2017-02-23 210 views
1

В документах Firebase можно подписаться на тему, когда ваше приложение открыто, как в onCreate от MainActivity.Когда правильно подписаться на тему в firebase

MainActivity.java

FirebaseMessaging.getInstance().subscribeToTopic("announcement"); 

Скорее всего, вы будете получать ваше уведомление, когда приложение находится в фоновом режиме (нажал Home Button)/передний план.

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

В любом случае я подписался на тему из onCreate моего расширенного сервиса FirebaseMessagingService, но он всегда вызывает onDestroy. От отладки кажется, что когда уведомление получено от FirebaseMessagingService, оно переходит к onCreate -> onMessage -> onDestroy для каждого уведомления.

Как я понимаю, мой расширенный FirebaseMessagingService должен жить, даже если приложение уничтожено, поэтому он не должен каждый раз вызывать onCreate.

Поскольку служба должна работать, даже если приложение будет уничтожен

Так мне интересно, где я поместил мою подписку на тему в моем Android кодекс таким образом, что даже если приложение будет уничтожен он будет все равно получать уведомления, такие как объявления.

Заранее спасибо.

+0

Возможный дубликат [Android: Подписаться на Firebase Cloud Messaging (FCM) Тема] (http://stackoverflow.com/questions/40055051/android-subscribe-to-firebase-cloud-messagingfcm-topic) –

+0

Также см. * Связанные * сообщения (в середине справа) ссылки выше. –

+0

Спасибо за информацию, но на самом деле я уже прочитал эту ссылку, прежде чем задавать вопрос. Да, хорошо подписаться на каждый запуск приложения, но проблема в том, что я не подписался больше, когда приложение убито, даже если я не позвонил unsubscribeToTopic. Поэтому вопрос в том, где я должен поставить свою подписку, чтобы я все равно получал объявления, даже если приложение было убито.Потому что Im, предполагающий, что FirebaseMessagingService должен позаботиться об этом. – bumblebeen

ответ

0

FirebaseMessagingService не обязательно быть активным для вашего приложения, чтобы получать уведомления.

Служба выполняется только для обработки входящих сообщений или запросов токенов.

Не волнуйтесь, если служба остановлена. Android перезапустит его при поступлении нового уведомления.


Вы можете подписаться на любые темы в любом месте вашего приложения. Подписки сохраняются до тех пор, пока вы не отпишетесь.

+0

Хорошо, поэтому поведение объясняет цикл перезапуска службы. Кажется, что я могу получать темы сейчас, даже если приложение уничтожено. Но только для некоторых устройств. Я не уверен, что заставляет некоторые устройства не получать объявление. Благодаря – bumblebeen

+0

подмножество устройств реализует нестандартные методы экономии батареи, которые ломают многие Android API (включая FCM). Вы можете быть затронуты этим. Если это так, вы должны сообщить производителю, что [версия устройства и сборки] содержит ошибки в отношении push-уведомлений. –

0

Используйте услугу STIKY.

Override этот метод:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
} 

Это должно сделать свой перезапуск службы после того, как приложение destroied. Alse подписываются в этом методе, потому что этот метод вызывается каждый раз после уничтожения.

+0

Так что я должен создать еще одну услугу? так как, когда я расширяю FirebaseMessagingService, я не могу переопределить этот метод. «не может переопределить onStartCommand (Intent, int, int), так как метод overriden final» – bumblebeen

+0

Попробуйте сделать свой собственный сервис и добавьте прослушиватель событий значения в тему «объявление». –