第三方库中的Firebase接收器

时间:2017-03-14 09:39:24

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

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

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

  1. 第一个扩展FirebaseInstanceIdService并声明 INSTANCE_ID_EVENTS 的意图过滤器。
  2. 第二个扩展FirebaseMessagingService并声明 MESSAGING_EVENTS 的意图过滤器。
  3. 如果托管我的库的Android应用程序也依赖于Firebase Notifications进行自己的执行,它也会使用相同的意图过滤器实现这两项服务( INSTANCE_ID_EVENTS MESSAGING_EVENTS )。

    当多个服务声明相同的intent过滤器时,只有其中一个在相关事件发生时得到通知。

    因此,使用此类配置,库和托管应用程序都不会收到Firebase相关事件的通知。例如,如果 MESSAGING_EVENT 仅发生库的FirebaseMessagingService或应用程序的FirebaseMessagingService,则通知但不同时通知。{strong> MESSAGING_EVENT 。

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

    您是否了解如何向托管应用程序和库通知Firebase事件?

    非常感谢

    更新

    我发现constist唯一的解决方案是不在库中实现FirebaseInstanceIdServiceFirebaseMessagingService,因此在库的清单文件中没有声明与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>
    

    我没有找到如何勾解&#39;令牌更新事件的方式相同。

    最后,此解决方案可以通知Firebase消息接收事件,而不会干扰其正确的Firebase服务实现附带的托管应用程序。 Firebase令牌更新不会通知库,但它可以接受,因为它们是应用程序重置时发生的事件。

0 个答案:

没有答案