【问题标题】:FCM notification not received when app is killed with multiple Firebase projects应用被多个 Firebase 项目杀死时未收到 FCM 通知
【发布时间】:2019-12-13 15:50:54
【问题描述】:

我已经关注了这个documentation 并使用了多个在登录时动态切换的 Firebase 项目。结果,我不得不删除google-services 插件和google-services.json 并使用FirebaseApp.initializeApp 以编程方式设置配置。到目前为止一切正常,但是当应用程序被完全杀死并收到通知时,出现错误并且没有收到通知:

E/AndroidRuntime: FATAL EXCEPTION: Firebase-NotificationMessageHandler
    Process: com.example.app, PID: 8005
    java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
        at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@19.3.0:184)
        at com.google.firebase.messaging.zzo.zza(com.google.firebase:firebase-messaging@@20.1.0:120)
        at com.google.firebase.messaging.zzo.zza(com.google.firebase:firebase-messaging@@20.1.0:1)
        at com.google.firebase.messaging.FirebaseMessagingService.zzc(com.google.firebase:firebase-messaging@@20.1.0:50)
        at com.google.firebase.messaging.zze.run(com.google.firebase:firebase-messaging@@20.1.0:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:6)
        at java.lang.Thread.run(Thread.java:764)

在所有其他情况下,我都会收到相应的通知。使用google-services 插件和google-services.json,即使应用程序被终止,我也可以通过FCM 接收消息,但这不是一个选项,因为我无法使用google-services 插件动态切换Firebase 项目。

我总是将 FirebaseApp 初始化为默认应用:FirebaseApp.initializeApp(context, configuration)

关于如何解决这个问题的任何提示?

【问题讨论】:

  • 你在哪里打电话FirebaseApp.initializeApp(context, configuration)
  • 我们有一个单独的控制器用于切换 Firebase 项目,当用户尝试登录时我们会调用它。
  • 我不知道...也许现在为时已晚?您是否尝试过在具有高优先级的 ContentProvider 中执行此操作? (但这会强制您在用户登录之前初始化所有 Firebase 实例)
  • 我可以毫无问题地登录和使用不同的 Firebase 项目。如果应用程序处于前台或后台,我也可以接收来自不同 Firebase 项目的通知。唯一的问题是当应用程序被完全终止(从最小化的应用程序中删除)并且我尝试接收通知时。
  • 在您尝试过的每个设备中?

标签: android firebase firebase-cloud-messaging


【解决方案1】:

使用data messages 而不是notification messages 解决了这个问题。我现在可以动态切换 Firebase 项目并接收通知,即使应用已被终止/关闭。

更多信息:https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

【讨论】:

    【解决方案2】:

    您应该在 Application 的 onCreate() 中调用 FirebaseApp.initializeApp(context, configuration)

    【讨论】:

    • 这不适合我的情况,因为 Firebase 项目是在登录时动态选择的(取决于用户)。
    【解决方案3】:

    根据文档,

    通知消息 - FCM 自动将消息显示给 代表客户端应用程序的最终用户设备。通知消息 有一组预定义的用户可见键和一个可选数据 自定义键值对的有效负载。

    数据消息 - 客户端应用程序负责处理数据消息。 数据消息只有自定义键值对。

    这是Test FCM Notification with POSTMAN!的全文

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多