Для получения коротких сообщений, можно использовать электронную почту, SMS, push-уведомления или создать бота для мессенджера.

Предлагаю рассмотреть еще один простой способ:

1. Создаем на стороне веб-сервиса источник данных в JSON.

{
        "refl.me":true,
        "message":"Hello!",
	"refresh":96
}

«refl.me» указываем обязательно true.
«message» задает текст сообщения, пустые сообщения игнорируются.
«refresh» задает, сколько раз нужно проверять источник в течении 24 часов (0 — ручное обновление, 288 — максимум).

<?php
        header('Content-Type: application/json');
        $json_array =array('refl.me'=>true,'message'=>'Hello!','refresh'=>96);
        echo json_encode($json_array);
?>

2. Скачиваем приложение и добавляем в нем ссылку на наш созданный источник данных.

3. Все готово. Получаем оповещения и сообщения.

Принцип работы предельно простой, приложение проверяет источник в соответствии с заданными интервалами (или в ручном режиме), если значения «message» изменилось на отличное от предыдущего значения, отображается оповещение в приложении.

Все работает без сторонних серверов, не требует личные данные и регистрацию.

Полная документация здесь.

Комментарии (41)


  1. aamonster
    07.11.2019 17:09

    Push-уведомления придуманы специально для того, чтобы этого не делать. Чтобы всё обеспечивал системный сервис, не отжирая зазря батарейку.


    1. re_dmitriy Автор
      07.11.2019 19:58
      -1

      Задача стояла работать без использования «пушей». Есть задача, есть решение. По батарейке — популярное опасение. Потребление оптимизировано. При разумном использовании, все укладывается в потребление близкое к стандартным мессенжерам. «Отжирать» батарейку будет хорошо, если использовать мобильный интернет в «глухом» месте с постоянными разрывами связи + множество источников с частым обновлением. Это все логично.


      1. aol-nnov
        07.11.2019 20:48
        +1

        о, крайне профессиональное решение! особенно детально раскрыт вопрос выживания в doze mode, да и вообще гарантированной доставки!

        пережить выдавливание из памяти? AlarmManager, ForegroundService, а то, так и вообще WakeLock. ачотакова?! Не перевелись еще костыли… «есть задача, есть решение»

        // sarcasm mode off

        Кстати, хотя бы один аргумент в пользу того, почему я захочу доверить свои данные какому-то товарищмай refl.me?


        1. re_dmitriy Автор
          07.11.2019 21:12

          Если // sarcasm mode off, тогда может подскажешь решение для оперативного получения оповещений на Андроид? Обязательно без использования «сторонних» серверов. С удовольствием буду пользоваться, если есть хорошее и удобное решение.

          Кстати, хотя бы один аргумент в пользу того, почему я захочу доверить свои данные какому-то товарищмай refl.me?

          В этом смысл и аргумент, что данные не хранятся у refl.me. Работает все напрямую веб сервис-мобильное устройство.


          1. aol-nnov
            07.11.2019 21:14

            > данные не хранятся у refl.me

            их получает стороннее приложение с android.permission.INTERNET. что там дальне происходит — большая загадка.


            1. re_dmitriy Автор
              07.11.2019 21:27

              … предлагаете удалить android.permission.INTERNET? )))


              1. 402d
                08.11.2019 09:00

                Слона ребят в вопросе секретности вы не заметили.
                PHP скрипт на сервере лежит без авторизации.
                Вся защита на том, что его URL якобы никто не знает ;)
                Мне из броузера на него никогда не заходить?

                Данные не шифруются, от человека по середине уповаем на https?


                1. re_dmitriy Автор
                  08.11.2019 11:45

                  Если нужно, есть возможность простой аутентификации пользователя. Посмотрите доки. Данные не шифруются. Хотя, я подумаю об этом в будущем.


          1. aamonster
            07.11.2019 21:21

            Оперативное – таки через сторонние сервера (push).


            Безопасность можно обеспечить отправкой данных в зашифрованном виде или же не отправлять сами данные, а лишь сигнал об их приходе (т.е. тот же ваш poll выполняется не каждые 5 минут, а лишь при приходе push).


            Надёжность от отключения гугловских серверов :-) — оставив всё-таки poll с достаточно большим интервалом, чтобы при отказе гугла сервис деградировал, но не отключился. Но imho нет смысла.


            1. re_dmitriy Автор
              07.11.2019 21:32

              Я уже писал, нельзя использовать сторонние сервера, а работать нужно… такая жизнь в рамках ТЗ.

              Отправлять «push» для частых «пробуждений» в данном случае — экономия на спичках, лишняя логика и опять использование стороннего сервера. Хотя, не отрицаю, возможно это имеет смысл.


              1. aamonster
                07.11.2019 22:09

                Сочувствую. Военный заказ, что ли?


                Нельзя сторонние сервера + нет входящих соединений – кажется, остаётся только poll или long poll (умеете?) в зависимости от задачи, да.


                1. re_dmitriy Автор
                  08.11.2019 11:32

                  Нет, просто своеобразные требования. Считаю, long poll здесь не нужен, данные слишком короткие, а промежутки обновления достаточно большие.


        1. ne_kotin
          07.11.2019 21:27
          +1

          пережить выдавливание из памяти? AlarmManager, ForegroundService, а то, так и вообще WakeLock. ачотакова?!

          А иначе выживать в Doze Mode только при помощи неуправляемого процесса, как это OrBot делает.
          Предлагаете «средствами выживания» вообще не пользоваться?


        1. ptyrss
          08.11.2019 15:50

          Ну если сильно надо, то все эти проблемы решаются. Но какой ценой… За такие решения я не удивлюсь если в трояны запишут) Я имею в виду решаются без WakeLock и ForegroundService. Чисто фоновым сервисом.


      1. aamonster
        07.11.2019 21:08

        Ну просто то, что вы слепили – это базовая вещь, которую любой рисует левой ногой, когда надо сделать доставку сообщений на коленке за час. Poll, первое и самое тупое решение.


        А потом начинается оптимизация. Потому что poll создаёт массу проблем (например, раз в 5 минут ваше приложение должно работать – вытесняя из памяти более ценные).


        1. re_dmitriy Автор
          07.11.2019 21:23

          Пусть базовая, база это вообще хорошо. Готовое аналогичное решение есть похожее по простоте и удобству? Я не нашел в «сторах». При реальном опыте эксплуатации не вижу никаких «масс проблем», как и другие пользователи. Если есть желание, попробуйте сами (только с позитивным подходом и настроем).


          1. aamonster
            07.11.2019 21:40

            В npm наверняка есть, там даже leftpad был :-)


            Самому поллинг приходилось писать неоднократно, правда, не на андроиде. Как-то не привык для такого сторонние либы цеплять: разбираться с ними дольше, чем написать самому.


            Готовое решение практически неизбежно обрастёт наворотами.


            ЗЫ: я бы ваше решение предложил развить до цепочки туториалов от простейшего (poll) до push + навороты.
            Ну типа задача – решение – какие проблемы – решение посложнее – ...


            1. re_dmitriy Автор
              07.11.2019 22:05

              Я подумаю над предложением! Мыслей много, нужно выбрать путь… ;)


  1. 402d
    07.11.2019 17:19
    -2

    Готовитесь на случай окончательного суверенитета рунета?


    1. re_dmitriy Автор
      07.11.2019 20:01

      Смех смехом, но работает и востребовано.


      1. 402d
        08.11.2019 09:07

        Это не смех. А единственное достоинство решения.
        Которое как я понимаю получилось из ТЗ.
        Работать без промежуточных серверов.

        А вот все остальное, что работает экономнее и быстрее в ваше тз не вписывалось.
        Послать с сайт уведомление
        через телеграмму — это один curl запрос (и 10-30 минут на внедрение)
        через веб пуш — 1 вызов метода из библиотеки (несколько часов)


        1. re_dmitriy Автор
          08.11.2019 12:00

          Приложение нашло часть «своих» пользователей. Значит интерес есть. США, Индия, ЕС основные пользователи сейчас.


          1. 402d
            08.11.2019 15:44

            «своих» пользователей может найти любое приложение.
            Вот его исходники
            github.com/402d/TextToPrint
            Вот статистика за 15 месяцев
            photos.app.goo.gl/T1CqkWhxNCmkMnD56

            Все дело в том, что их маловато как-то получается ;(


            1. re_dmitriy Автор
              08.11.2019 21:11

              А почему пошел резкий спад установок?


              1. 402d
                08.11.2019 21:24

                ноябрь только начался (последняя точка)
                а в октябре я поменял название на более длинное.
                По предыдущему «Текст на Печать» слишком много от него ожидали пользователи.
                Т.е. пусть меньше, но не стирают сразу и не пишут разочарований в отзывы.

                Описание ведь никто не читает. На скриншоты не смотрят.
                Прочитали и думают, что тут универсальный драйвер под все принтеры


            1. 402d
              08.11.2019 22:51

              Ребят, кто мне чашечку кофе подарил?
              Поделюсь тогда результатами эксперимента монетизации приложения через донат.
              90 баксов за время существования.
              Из разряда абсурда. Не читают за что платят. Пару раз просили возврат, так как считали, что за этим пунктом (купить мне чашку кофе) скрываются какие-то супер возможности приложения.


  1. token
    07.11.2019 17:47
    -2

    Это типа пример из учебника по php для пятого класса?


    1. re_dmitriy Автор
      07.11.2019 20:03
      +1

      Комментарий звучит как похвала. Значит код действительно простейший.


      1. token
        08.11.2019 15:19

        Угу, а теперь возьмите свою разработку, запустите, залочьте телефон и положите на полку на часок. А через часок попробуйте отправить пуш этим методом.


        1. re_dmitriy Автор
          08.11.2019 15:43
          +1

          Угу, могу не только положить, могу перезагрузить, оставить на часок не запуская приложение «по иконке» и все будет работать. Вы реально думаете, что никто не проверил основные моменты работы? И причем тут вообще «пуш»?


  1. Dollor
    07.11.2019 20:10

    Может тогда лучше отправлять на email письмо, а почтовое приложение на телефоне получало бы своевременное уведомление. Тогда и ставить лишнего ничего не нужно


    1. re_dmitriy Автор
      07.11.2019 20:12

      Каждые 5-15 минут письмо от 5-6 источников со свежими данными? Почта не лучший способ оперативно получать информацию.


      1. Dollor
        07.11.2019 20:26

        И тот и другой варианты все равно костыль


        1. re_dmitriy Автор
          07.11.2019 20:29

          Костыли бывают разные, удобные и нет, подходящие для решения задачи и нет.


  1. Incognito4pda
    08.11.2019 03:17

    Буду крайне благодарен, если выложите в паблик сырцы, для ознакомления с реализацией и возможной модификации решения под себя.


  1. advance
    08.11.2019 12:47

    Опасение о разряде аккумулятора всё-таки есть и не на пустом месте. Что Вы использовали для того, чтобы держаться в фоне? AlarmManager? WorkManager? Foreground Service? Sync Service? Или его вообще ничего не держит?

    «Отжирать» батарейку будет хорошо, если использовать мобильный интернет в «глухом» месте с постоянными разрывами связи + множество источников с частым обновлением. Это все логично.
    Нет. В Вашей ситуации потреблять батарею будет быстро, если не давать устройству переходить в режим сна и снижать частоты ядер SOC. По сравнению с этим радиомодуль расходует на 3g-4g вообще копейки.

    Подобным способом (polling) работает со сторонними ящиками клиент GMail, но он разрешает синхронизацию не чаще, чем раз в 15 минут и при этом еще ее откладывает если устройство находится в глубоком сне. На этом фоне запросы раз в 5-6 минут вызывают очень большие опасения.


    1. re_dmitriy Автор
      08.11.2019 13:00

      Как «база» используется WorkManager. Кстати, кол-во обновлений вы задаете сами на стороне веб-сервиса, многие данные не требуют обновлений каждые 5 минут. Попробуйте, запустите и посмотрите энергопотребление в конце дня (тестовый источник создавать не нужно, «демо» есть в приложении). У меня «Телега» в фоне «съедает» гораздо больше, хотя я ей не пользуюсь.


  1. Bonio
    08.11.2019 18:22
    +1

    На телефоне нету гуглосервисов и пуши не работают. Нормльное решение для такого случая, как-то искал нечто подобное и ничего не нашел.

    PS. Так как приложение будет особенно полезно тем, у кого нет гуглосервисов, было бы неплохо иметь возможность скачать apk файл прямо с сайта, а не из плеймаркета.


    1. re_dmitriy Автор
      08.11.2019 21:20

      Спасибо. Выложить apk нет проблем. Хотя в интернете есть множество сайтов, которые дублируют apk с «гуглмаркет» достаточно оперативно. Поэтому, не знаю, нужно или нет.


      1. loki82
        08.11.2019 21:36

        Нужно. Мне вот нравиться одно приложение. И в маркете его уже нет. В сервисах, оно тоже исчезает. Свое тоже не буду выкладывать в маркет, а буду отдельно распространять. Слишком нишевое решение.


    1. token
      11.11.2019 15:21
      -1

      Еще неплохо было бы иметь возможность ввести код приложения в машинных кодах прямо в память, на случай если нет возможности скачать apk файл и установить его (интернета на телефоне также может не быть)