2017-01-01 5 views
3

У меня есть некоторые приложения, которые используют gcm notification. Они работают нормально, но здесь есть проблема: если я не открою один из них в течение почти долгого времени (например, 2 месяца или более), он больше не будет получать уведомления.Уведомление GCM push не получено, если приложение не было открыто в течение длительного времени

На самом деле, я также испытал это поведение с помощью приложения stackoverflow. Может ли кто-нибудь объяснить, в чем причина и как его избежать?

ответ

1

Обычно уведомление gcm имеет срок службы 4 недели после того, как Google перестает транслировать его. Но в вашем случае приложения обычно имеют бодрствование, чтобы они периодически просыпались и пытались получать уведомления даже без открытия. Если вы теряете уведомления в некоторых своих приложениях, проверьте, есть ли у вас приложение для экономии заряда батареи, например Greenify, или другие, которые эффективно блокируют уведомления для ваших приложений. Если нет, то может быть, у вашего ПЗУ есть функция экономии заряда аккумулятора, которая блокирует эти пробуждения. E.t.c. Некоторые условия могут также запускать пробуждение в таких приложениях, как соединение WiFi или передача данных.

+0

Спасибо за ваш ответ, я протестировал на некоторых телефонах, но ни у кого из них не было батареи. Кроме того, о 4-недельном сроке службы уведомлений, я имею в виду, что эти приложения не получат никаких уведомлений вообще через некоторое время бездействия, например, если я отправлю уведомление об этом прямо сейчас, он не получит его не сейчас, а не в любое время позже в будущее, несмотря на то, что оно подключено к Интернету, а другие приложения не имеют проблем при получении уведомлений. Если я однажды открою это приложение-образец, он будет получать уведомления с этого момента. О «бодрствованиях» вы можете объяснить это каким-то кодом? – Merka

1

Рекомендуется использовать службу, которая работает непрерывно в фоновом режиме. here. Следует отметить, что IntentService останавливается, когда заканчивается работа.

Кроме того, в соответствии с этим thread:

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

А поскольку @Bmbariah заявила, что приложение Android на устройстве Android не нужно запускать для приема сообщений. Система пробудит приложение Android через Intent-трансляцию, когда поступит сообщение, если приложение настроено с помощью правильного приемника вещания и разрешений. Вы можете проверить этот сервис WakefulBroadcastReceiver, который позволяет вам управлять жизненным циклом фоновой задачи.

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

Надеюсь, это поможет!