Подтвердить что ты не робот

Android GCM (push-уведомление): устройство не получает уведомления, если приложение остановлено

Я использую push-уведомление (GCM) в своем проекте Android.

В соответствии с учебным пособием GCM я внедрил широковещательный приемник и зарегистрировал его в AndroidManifest.xml.

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

Но он не работает, как я ожидаю. onReceive() метод не вызывается, если приложение закрыто. Кажется, что мое понимание вещательных приемников является правильным, и проблема в моих ожиданиях относительно GCM.

Одна из возможных причин заключается в том, что сервер google даже не отправляет уведомление на устройство, если приложение закрыто. Итак, правильно ли мое приложение может получать сообщение (и метод onReceive() будет вызываться в широковещательном приемнике), только если он работает или находится в фоновом режиме (но не закрыт)?

Спасибо заранее.

4b9b3361

Ответ 1

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

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

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

В Android с точки зрения приложения нет понятия "закрыто" в Android. Если "закрыто" означает "не имеет ходового процесса, где последний процесс был завершен нормально", то да, вы должны получать сообщения GCM и другие трансляции. Но, опять же, принудительная остановка не "заканчивается нормально".

Ответ 2

По словам Франческо Нерьери в этот поток android-gcm:

Итак, если вы принудительно остановите приложение, предполагаемое поведение для ICS будет для приложение, чтобы не получать сообщение. В JB это означает, что GCM также отмените регистрацию приложения, это неудачное поведение, и мы работая, чтобы изменить это (незарегистрированная часть в JB).

Ответ 3

В документации говорится, что:

Приложение Android на устройстве Android не нужно запускать для получения сообщений. Система пробудит приложение Android через Intent, когда сообщение приходит, пока приложение настроено с правильным широковещательным приемником и разрешения.

Проверьте реализацию и разрешения вашего широковещательного приемника.