Правильный способ отправки push-уведомлений

Я хочу отправить уведомление с какого-либо сервера на устройство Android. Самый очевидный (и энергозатратный) способ - продолжать поиск в какой-либо базе данных любых новых сообщений, используя сервисный/широковещательный приемник.

Я уверен, что есть и другие способы выполнить эту работу. Я взглянул на GCM (обмен облачными сообщениями Google), и кажется, что Google всегда поддерживает активное соединение TCP/IP. По сути, это означает, что использование GCM будет потреблять меньше энергии.

Однако у меня есть несколько вопросов относительно GCM.

  1. НУЖНО ли пользователю иметь сервисы Google и зарегистрированный игровой идентификатор?
  2. Если пользователь загрузит apk, сможет ли он по-прежнему получать уведомления?

Я хотел бы знать, есть ли альтернативы GCM

Как насчет устройств с разветвленными версиями Android, таких как nokia X, kindle и т. д.? Как push-уведомления отправляются на эти устройства?


person harveyslash    schedule 23.10.2014    source источник
comment
developer.android.com/google/gcm/gcm.html q1: да , It requires devices running Android 2.2 or higher that also have the Google Play Store application installed q2: да, However, you are not limited to deploying your Android applications through Google Play Store для nokia и kindle — есть ли на этих устройствах магазин Google Play?   -  person Selvin    schedule 23.10.2014
comment
я прочитал это. я хочу спросить, возможно ли получать push-уведомления без GCM, без постоянной проверки   -  person harveyslash    schedule 23.10.2014
comment
поэтому я должен проголосовать за закрытие, так как Questions asking us to recommend or find a book, tool, software library, tutorial or other off-site resource are off-topic for Stack Overflow   -  person Selvin    schedule 23.10.2014


Ответы (1)


НУЖНО ли пользователю иметь сервисы Google и зарегистрированный игровой идентификатор?

Да, в вашей разработке необходимо использовать сервисы Google Play. Однако пользователям не обязательно иметь учетную запись Google или установленные сервисы Google Play.

Если пользователь загрузит apk, сможет ли он по-прежнему получать уведомления?

Да.

Шаги, которые необходимо выполнить, чтобы отправить уведомление на устройство:

  1. Разработчик создает приложение в Google Developer Console.
  2. Пользователь устанавливает приложение
  3. Приложение получает NotificationID и отправляет его в вашу базу данных
  4. Вы храните NotificationID на своих серверах вместе с любой другой связанной информацией (ваше имя пользователя, информация об устройстве и т. д.).
  5. Всякий раз, когда вы хотите отправить уведомление, вы подключаетесь к GCM, отправляя один или несколько NotificationID и содержимое уведомления.
  6. Пользователи, связанные с NotificationID, получат в вашем приложении содержимое уведомления.
  7. Выполните любое действие, которое вам нужно.

Посмотрите здесь.

ИМХО, реальной альтернативы GCM в Android нет (исходя из эффективности и простоты). Вы можете искать сторонние сервисы, которые помогут вам в реализации и добавят ценности (маркетинг, бизнес-аналитика). В качестве примера посмотрите на UrbanShip.

Если вы хотите реализовать собственное решение, обратите внимание на WebSockets. Это будет поддерживать активную связь между вашим сервером и устройством. Эти сокеты предназначены для связи в реальном времени между вашим сервером и мобильным телефоном.

Две проблемы:

  • Как приложение влияет на батарею, зависит от вашей реализации и варианта использования приложения (насколько часто вы отправляете информацию, как долго устанавливается соединение).
  • Я не знаю о какой-либо встроенной реализации этого в Android, но есть несколько библиотек из проектов с открытым исходным кодом. Погугли это.
person CarlesCF    schedule 23.10.2014
comment
предположим, я создаю свою собственную службу уведомлений, как мне общаться со своим сервером, не сильно влияя на время автономной работы? - person harveyslash; 23.10.2014
comment
На мой взгляд, любое решение, которое вы реализуете, повлияет на батарею пользователей или не будет таким немедленным, как GCM. Вы можете взглянуть на WebSockets (en.wikipedia.org/wiki/WebSocket) в качестве самая лучшая альтернатива. - person CarlesCF; 23.10.2014