我正在开发一个旨在嵌入到Android应用程序中的Android库(发布在aar文件中)。
由于我的图书馆利用了Firebase通知服务,因此它定义了两项服务(遵循Google的Firebase实施指南):
FirebaseInstanceIdService并为INSTANCE_ID_EVENTS声明一个意图过滤器。FirebaseMessagingService并为MESSAGING_EVENTS声明一个意图过滤器。如果托管我的库的Android应用程序也依靠Firebase Notifications自行执行,它也将使用相同的意图过滤器(INSTANCE_ID_EVENTS和MESSAGING_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令牌更新不会通知库,但可以接受,因为它们是与应用程序重置一起发生的事件。
android intentfilter android-intent android-service firebase-cloud-messaging
这是我使用 HikariDatasource 的 logback 配置:
<appender name="AUDIT-DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.zaxxer.hikari.HikariDataSource">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<jdbcUrl>jdbc:mysql://myurl:3306/audit?useUnicode=true&characterEncoding=utf8&useSSL=false</jdbcUrl>
<username>mysqlciuser</username>
<password>mysqlcipwd</password>
</dataSource>
</connectionSource>
</appender>
Run Code Online (Sandbox Code Playgroud)
在 logback https://logback.qos.ch/manual/appenders.html的文档中,我没有找到限制数据源创建的默认池大小(10)的方法。我尝试使用标签 : <maxPoolSize>5</maxPoolSize>但它不起作用。
谢谢你的帮助。