【发布时间】:2019-05-27 23:45:26
【问题描述】:
我的应用正在实施 FCM,以便作为我使用的第 3 方库。我的问题是每次我通过控制台发送通知时,第 3 方都有一个像这样注册的广播接收器
<receiver
android:name=".ThirdPartyReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
能够获取我所有通知的内容,我该如何防止这种情况? atm 我正在使用我的凭据初始化和使用 firebase 应用程序的实例,如下所示:
FirebaseOptions.Builder()
.setApplicationId(id)
.setApiKey(api)
.setDatabaseUrl(databaseurl)
.setGcmSenderId(senderId)
.setProjectId(projectId)
.build()
但是看起来 FCM 只依赖 packageName 来传递推送通知,并且我项目中包含的任何第三方库都可以注册以获取推送通知,有没有办法防止这种情况?
观察,手动禁用所有未知接收器可以防止这种情况发生,但是库不再收到通知,我破坏了它的功能。
【问题讨论】:
-
"能够获取我所有通知的内容,我该如何防止这种情况发生?"似乎与“然后图书馆不再收到通知并且我破坏了它的功能”相冲突。要么摆脱图书馆,要么使用图书馆(并接受图书馆需要访问您的通知以帮助您处理这些通知的事实)。
-
@CommonsWare 该库是应用程序的核心部分。他们有他们的 FCM 项目、管理和其他一切,他们的通知只对他们很重要,比如对讲机或 Zendesk 集成。我的应用程序有我自己的 FCM 项目,我需要我的通知。我试图阻止的是他们的接收者接收我的通知。我不想以编程方式强制/禁用它,因为它会破坏第三方功能。我认为 FCM FirebaseApp 应该以某种方式与 GCM 发送者绑定,并且只发送/通知正确的接收者。
-
你有自己定义的类扩展
FirebaseMessagingService吗?只是看看这是否会拦截他们进来。 -
嗨@Silmarilos,我确实有自己定义的类扩展
FirebaseMessagingService,扩展这个似乎工作得差不多了,但是图书馆注册的com.google.android.c2dm.intent.RECEIVE的接收器仍然能够得到我的通知内容,即使在其上注册另一个接收器。关于广播优先级,我仍然需要尝试 János 解决方案
标签: android firebase firebase-cloud-messaging