Запретить сторонним библиотекам получать мои push-уведомления - PullRequest
5 голосов
/ 17 мая 2019

Мое приложение реализует 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>

, который может получать содержимое всех моих уведомлений, как я могу предотвратить это?Я инициализирую и использую экземпляр приложения Firebase, используя мои учетные данные, например:

FirebaseOptions.Builder()
        .setApplicationId(id)
        .setApiKey(api)
        .setDatabaseUrl(databaseurl)
        .setGcmSenderId(senderId)
        .setProjectId(projectId)
        .build()

Но похоже, что FCM полагается только на packageName для доставки push-уведомлений и любой сторонней библиотеки, содержащейся в моем проектеможете зарегистрироваться, чтобы получать push-уведомления, есть ли способ предотвратить это?

Наблюдение, ручное отключение всех неизвестных получателей предотвращает это, но тогда библиотека больше не получает уведомления, и я нарушаю ее функциональность.

Ответы [ 3 ]

3 голосов
/ 20 мая 2019

Я не уверен, что FCM использует упорядоченную трансляцию или нет, но если это так, вам нужно:

  1. изменить приоритет ваших BroadcastReveiver (например, в AndroidManifest.xml) и
  2. вызов abortBroadcast() в реализации onReceive() для предотвращения приема вещания другими приемниками вещания.

https://developer.android.com/reference/android/content/BroadcastReceiver.html#abortBroadcast()

Это может помочь вам.

2 голосов
/ 26 мая 2019

Вот как бы я это сделал (не проверено)

  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 если это не сообщение, которое вы можете обработать.

0 голосов
/ 27 мая 2019

Один из способов сделать это - дать наивысший приоритет (макс. 1000) вашему получателю и использовать abortBroadcast();, чтобы остановить его пересылку следующему получателю, но вам необходимо добавить правильное разрешение в свой AndroidManifest.xml

вышекод скоро станет абсолютным, не используйте широковещательный приемник.Читайте ниже ссылку.

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

Теперь вам нужно перейти на новый механизм.Перейдите по этой ссылке для миграции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...