【问题标题】:Initializing Firebase in a different process (in multi-process app) does not work在不同的进程(在多进程应用程序中)初始化 Firebase 不起作用
【发布时间】:2021-03-30 14:56:18
【问题描述】:

在 Google firebase-talk 小组中发布了此内容,但没有任何回复,因此在此处发布:

我正在尝试将 Firebase 消息传递卸载到我的应用中的独立进程中,与主应用进程不同。我读过这个blog by Doug Stevenson,它说Firebase 在使用ContentProviders (FirebaseInitProvider) 的应用程序的主进程中默认初始化。

这个小组之前的对话似乎表明在辅助进程中初始化 Firebase 应该可行: “ContentProviders 不是在其他进程中创建的,因此您必须在其他进程中手动初始化 Firebase 才能使用 Firebase 功能。我自己还没有尝试过,但我的理解是您应该通过FirebaseApp 单例使用它的initializeApp() 函数,它需要三个参数。您需要安排在预期在另一个进程中运行的组件的入口点发生这种情况。 " 这是我尝试过的:

  • 我创建了一个扩展 FirebaseMessagingServiceFirebaseListenerService 并将其添加到清单中以在辅助过程中出现:
<service
  android:name=".xxx.yyy.FirebaseListenerService"
  android:enabled="true"
  android:process="secondary"
  android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT" />
  </intent-filter>
</service>
  • 在此 FirebaseListenerService 中,我重写了 onCreate 函数并在此处初始化 FirebaseApp:
@Override
public void onCreate() {
  FirebaseApp.initialize(/** context */, /** options */);
}

我可以看到“辅助”进程正确启动。 我还看到 onCreate() 被调用。 但是我没有看到 FirebaseListenerService 通过 onMessageReceived() 收到任何消息

我相信这在理论上应该可行,但正如 Doug 在二次进程中提出 Firebase 之前的对话中提到的那样,没有经过很好的测试,所以我很好奇是否是 Firebase SDK 本身的一些限制导致了这种情况。非常感谢您对此的任何帮助!

【问题讨论】:

    标签: android firebase push-notification firebase-cloud-messaging


    【解决方案1】:

    我有同样的问题,但我没有找到任何解决方案,因为 FirebaseMessagingService 显然只在主线程上运行。

    但我找到了一种临时解决问题的方法。只需调用任何广播接收器(在“辅助”进程中运行)

    val intent = Intent(this, SomeBroadcastReceiver::class.java)
    intent.putExtra("action", "some action")
    sendBroadcast(intent)
    

    此 BroadcastReceiver 可以与同一进程中的其他类交互,即使它是由主进程调用的。

    希望对你有所帮助:)

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2023-03-14
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多