GCMBroadcastReceiver в oreo (8.0) или выше не работает

GCMBroadcastReceiver не регистрируется с использованием манифеста или динамически

<receiver
            android:name = "com.ee.nowmedia.core.pushnotification.PushBroadcastReceiver"
            android:permission = "com.google.android.c2dm.permission.SEND">
            <intent-filter><!-- Receives the actual messages. -->
                <action android:name = "com.google.android.c2dm.intent.RECEIVE" /><!-- Receives the registration id. -->
                <action android:name = "com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name = "com.ee.nowmedia.core.pushnotification" />
            </intent-filter>
        </receiver>
2
0
741
2

Ответы 2

С 10 апреля 2018 г. Google не поддерживает GCM. Серверные и клиентские API GCM устарели и будут удалены 11 апреля 2019 г. Перенесите приложения GCM в Firebase Cloud Messaging (FCM), который наследует надежную и масштабируемую инфраструктуру GCM, а также множество новых функций. См. руководство по миграции, чтобы узнать больше. Подробнее читайте в документации Google Cloud Messaging - УСТАРЕЛО 10.04.2018 .

Итак, код

<receiver
    android:name = "com.google.android.gms.gcm.GcmReceiver"
    android:exported = "true"
    android:permission = "com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        ......
    </intent-filter>
</receiver>

бесполезен с 8.0, а также после 11Apr2019 для каждого API.

Как уже упоминалось в ответе выше, GCM устарел. Переходите с GCM на FCM, и это довольно просто. Вам просто нужно создать класс, расширяющий класс FirebaseMessagingService.

Зарегистрируйте класс обслуживания в Manifest.

    <service
        android:name = ".fcm.MyFirebaseMessagingService"
        tools:ignore = "ExportedService">
        <intent-filter>
            <action android:name = "com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

и так выглядит ваш класс MyFirebaseMessagingService.

public class MyFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    //Here you will get your FCM ID/Token
    Log.d(TAG, "onNewToken: " + s);
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    //This method is used for handling incoming notifications
}}

Вот и все. FCM Готово

Другие вопросы по теме