何时适当地订阅Firebase主题

4
在Firebase文档中,当您的应用程序在MainActivity的onCreate中打开时,订阅主题是安全的。
MainActivity.java
FirebaseMessaging.getInstance().subscribeToTopic("announcement");

大多数情况下,当应用程序在后台(按了Home键)/前台时,您将收到通知。

问题是,当我关闭应用程序(应用程序被销毁)或重新启动手机时,我的应用程序似乎无法从Firebase控制台(通过Topic发送)接收通知。虽然我认为需要在手机重启时实现广播接收器。

无论如何,我已经在我的扩展FirebaseMessagingService的onCreate中订阅了Topic,但它总是调用onDestroy。从调试结果来看,当从FirebaseMessagingService接收到通知时,它会按顺序转到onCreate -> onMessage -> onDestroy处理每个通知。

据我所知,即使应用程序被销毁,我的扩展FirebaseMessagingService也应该保持存活状态,因此它不应每次都调用onCreate。

由于服务应该即使应用程序被销毁也能正常工作

因此,我想知道应该在我的Android代码的哪里放置我的主题订阅,以便即使应用程序被销毁,它仍将接收通知,例如公告。

提前感谢您。


还可以查看上面链接的Linked帖子(中右侧)。 - AL.
谢谢提供信息,但实际上在提问之前我已经阅读过那个链接了。是的,在每次应用程序启动时订阅是可以的,但问题是即使我没有调用unsubscribeToTopic,当应用程序被杀死时我也不再订阅了。所以问题是我应该把我的订阅放在哪里,这样即使应用程序被杀死,我仍然能收到公告。因为我假设FirebaseMessagingService应该会处理这个问题。 - bumblebeen
the problem is im not subscribed anymore when app is killed even if i didnt call unsubscribeToTopic” 这句话并没有什么意义。只有在调用 unsubscribeToTopic() 方法之前,你才会一直保持订阅状态(请参见下面Diego的回答)。当你的应用程序被杀死时,无法接收到任何消息可能是由于其他原因引起的。 - AL.
2个回答

3

FirebaseMessagingService不需要在您的应用程序中处于活动状态即可接收通知。

该服务仅在处理传入消息或令牌请求时执行。

如果服务停止,请不要担心。当新通知到达时,Android会重新启动它。


您可以在应用程序的任何地方订阅主题。 订阅将存储直至您取消订阅。


好的,这个行为解释了服务的重启周期。 现在似乎我可以接收主题,即使应用程序已被销毁。但是只有一些设备可以。我不确定是什么原因导致某些设备无法接收公告。谢谢。 - bumblebeen
一些设备实现了非标准的省电技术,这会破坏许多Android API(包括FCM)。你可能会受到影响。如果是这种情况,你应该通知制造商,说明[设备和版本号]在推送通知方面存在缺陷。 - Diego Giorgini

0

使用 STIKY 服务。

重写这个方法:

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

这应该可以让您的服务在应用程序被销毁后重新启动。此外,请在此方法中订阅您的主题,因为每次销毁后都会调用此方法。


所以我应该创建另一个服务吗?因为当我扩展FirebaseMessagingService时,我不能重写那个方法。“无法重写onStartCommand(Intent,int,int),因为被覆盖的方法是final”。 - bumblebeen
尝试创建自己的服务并向“公告”主题添加一个值事件监听器。 - Cătălin Florescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接