第三方库中的Firebase接收器

Ant*_*lop 5 android intentfilter android-intent android-service firebase-cloud-messaging

我正在开发一个旨在嵌入到Android应用程序中的Android库(发布在aar文件中)。

由于我的图书馆利用了Firebase通知服务,因此它定义了两项服务(遵循Google的Firebase实施指南):

  1. 第一个扩展FirebaseInstanceIdService并为INSTANCE_ID_EVENTS声明一个意图过滤器。
  2. 第二个扩展FirebaseMessagingService并为MESSAGING_EVENTS声明一个意图过滤器。

如果托管我的库的Android应用程序也依靠Firebase Notifications自行执行,它也将使用相同的意图过滤器(INSTANCE_ID_EVENTSMESSAGING_EVENTS)实现这两个服务。

当多个服务声明了相同的意图过滤器时,关联事件发生时仅通知其中一个。

因此,使用这种配置,不会同时将Firebase相关事件通知库和托管应用程序。对于为例,如果MESSAGING_EVENT只发生在FirebaseMessagingService图书馆的或FirebaseMessagingService应用程序的通知,但没有他们两个。

由于以前的GCM通知实现依赖于接收者(而不是服务),因此库和应用程序都可以接收GCM通知。

您是否知道如何将Firebase事件通知给托管应用程序和库?

非常感谢

更新

我发现唯一的解决方案是既不实现 FirebaseInstanceIdService也不FirebaseMessagingService在库中实现,因此库的清单文件中没有声明与Firebase相关的服务。相反,我在库中使用以下配置声明了WakefulBroadcastReceiver:

<receiver android:name="com.example.InnerFirebaseMessageReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="${applicationId}" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

我没有找到如何以相同的方式“挂钩”令牌更新事件。

最后,此解决方案使您能够收到有关Firebase消息接收事件的通知,而不会干扰其适当的Firebase服务实现可能附带的托管应用程序。Firebase令牌更新不会通知库,但可以接受,因为它们是与应用程序重置一起发生的事件。