我正在开发一个Android库(发布在aar文件中),旨在嵌入到Android应用程序中。
由于我的图书馆利用Firebase通知服务,因此它定义了两项服务(遵循Google的Firebase实施指南):
FirebaseInstanceIdService
并声明 INSTANCE_ID_EVENTS 的意图过滤器。FirebaseMessagingService
并声明 MESSAGING_EVENTS 的意图过滤器。如果托管我的库的Android应用程序也依赖于Firebase Notifications进行自己的执行,它也会使用相同的意图过滤器实现这两项服务( INSTANCE_ID_EVENTS 和 MESSAGING_EVENTS )。
当多个服务声明相同的intent过滤器时,只有其中一个在相关事件发生时得到通知。
因此,使用此类配置,库和托管应用程序都不会收到Firebase相关事件的通知。例如,如果 MESSAGING_EVENT 仅发生库的FirebaseMessagingService
或应用程序的FirebaseMessagingService
,则通知但不同时通知。{strong> MESSAGING_EVENT 。
由于 GCM 通知的前一个实施依赖于接收方(而不是服务),因此库和应用程序都可以接收 GCM 通知。
您是否了解如何向托管应用程序和库通知Firebase事件?
非常感谢
更新
我发现constist唯一的解决方案是不在库中实现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>
我没有找到如何勾解&#39;令牌更新事件的方式相同。
最后,此解决方案可以通知Firebase消息接收事件,而不会干扰其正确的Firebase服务实现附带的托管应用程序。 Firebase令牌更新不会通知库,但它可以接受,因为它们是应用程序重置时发生的事件。