【问题标题】:When to properly subscribe to a topic in firebase何时正确订阅 firebase 中的主题
【发布时间】:2017-02-23 11:34:55
【问题描述】:

在 Firebase 文档中,当您的应用打开时订阅主题是安全的,就像在 MainActivity 的 onCreate 中一样。

MainActivity.java

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

当应用程序处于后台(按下主页按钮)/前台时,您很可能会收到通知。

问题是当我关闭应用程序(应用程序被破坏)或我重新启动手机时,我的应用程序似乎没有收到来自 Firebase 控制台的通知(通过主题发送)。虽然我认为我需要在手机重启时实现广播接收器。

无论如何,我从扩展 FirebaseMessagingService 的 onCreate 订阅了主题,但它总是调用 onDestroy。从调试看来,当从 FirebaseMessagingService 收到通知时,它会转到 onCreate -> onMessage -> onDestroy 以获取每个通知。

据我了解,即使应用程序被销毁,我的扩展 FirebaseMessagingService 也应该存在,因此它不应该每次都调用 onCreate。

因为即使应用程序被销毁,服务也应该工作

所以我想知道我应该将我的主题订阅放在我的 Android 代码中的哪个位置,这样即使应用程序被销毁,它仍然会收到通知等通知。

提前谢谢你。

【问题讨论】:

  • 另请参阅上面链接的链接帖子(中右侧)。
  • 感谢您提供信息,但实际上我在提问之前已经阅读了该链接。是的,在每个应用程序启动时订阅都很好,但是当应用程序被杀死时,即使我没有调用 unsubscribeToTopic,我也不再订阅了。所以问题是我应该把我的订阅放在哪里,这样即使应用程序被杀死,我仍然会收到通知。因为我假设 FirebaseMessagingService 应该处理这个问题。
  • "即使我没有调用 unsubscribeToTopic,当应用程序被杀死时,我也不再订阅问题了" 真的没有意义。在致电unsubscribeToTopic() 之前,您将保持订阅状态(请参阅下面 Diego 的回答)。当您的应用程序被终止时,您没有收到任何消息一定有其他原因。

标签: android firebase android-service firebase-cloud-messaging


【解决方案1】:

FirebaseMessagingService 无需激活即可让您的应用接收通知。

该服务仅用于处理传入消息或令牌请求。

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


您可以在应用的任何位置订阅主题。 订阅将被存储,直到您取消订阅。

【讨论】:

  • 好的,所以行为解释了服务的重启周期。即使应用程序被破坏,我现在似乎也可以接收主题。但仅适用于某些设备。我不确定是什么导致某些设备无法收到通知。谢谢
  • 一部分设备实现了非标准的节电技术,这些技术会破坏许多 Android API(包括 FCM)。你可能会受到这个影响。如果是这种情况,您应该通知制造商 [设备和构建版本] 包含有关推送通知的错误。
【解决方案2】:

使用STIKY 服务。

重写此方法:

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

这应该会使您的服务在应用程序被销毁后重新启动。还要订阅你的主题的这个方法,因为每次销毁后都会调用这个方法。

【讨论】:

  • 所以我应该创建另一个服务?因为当我扩展 FirebaseMessagingService 时,我无法覆盖该方法“无法覆盖 onStartCommand (Intent, int, int),因为覆盖的方法是最终的”
  • 尝试制作自己的服务,并为announcement主题添加一个值事件监听器。
猜你喜欢
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多