防止第三方库获取我的推动通知



我的应用程序像我使用的第三方库一样实现FCM。我的问题是,每次我通过控制台发送通知时,第三方都有像这样注册的广播接收器

    <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来发出推送通知,并且我项目中包含的任何第三方库可以注册以获取推送通知,有没有办法防止此?

观察,手动禁用所有未知接收器会阻止这种情况,但是库不再收到通知,我打破了其功能。

我不确定FCM是否使用有序广播,但是如果这样做,则必须:

  1. 更改BroadcastReveiver的优先级(例如在AndroidManifest.xml中(和
  2. onReceive()实施中致电abortBroadcast(),以防止其他广播接收器接收广播。

https://developer.android.com/reference/android/content/broadcastreceiver.html#abortbroadcast((

它可能会帮助您。

这就是我要做的(未测试(

  1. 从应用清单中删除其他接收器。我认为这可以通过tools:node="remove"的示范合并策略

    来完成
    <receiver tools:node="remove"
        android:name=".ThirdPartyReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" />
    
  2. 使您自己的FirebaseMessagingService实现遵循代理模式,即调用ThirdPartyReceiver如果不是消息,则可以处理。

一种做法的方法是给您的接收器最高优先级(最大1000(,并使用abortBroadcast();阻止其转发到下一个接收器,但是您需要在AndroidManifest.xml <</p>

上面的代码将是绝对的,很快就不会使用广播接收器。阅读Bellow链接。

https://developers.google.com/cloud-messaging/android/client

现在您必须迁移到新机制。请按照此链接进行迁移。

https://developers.google.com/cloud-messaging/android/android-migrate-migrate-fcm

相关内容

  • 没有找到相关文章

最新更新