Oreo(8.0)或更高版本中的GCMBroadcastReceiver无法正常工作

时间:2018-08-10 08:41:24

标签: android google-cloud-messaging

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 :(得分:1)

自2018年4月10日起,Google已弃用 GCM GCM 服务器和客户端API已过时,将于2019年4月11日删除。将GCM应用程序迁移到Firebase Cloud Messaging (FCM),它将继承可靠且可扩展的GCM基础架构以及许多新功能。有关更多信息,请参见migration guide。在Google Cloud Messaging -- DEPRECATED 4/10/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开始以及2019年4月11日之后对于每个API都没有用。

答案 1 :(得分:0)

如以上答案中已提到的,不建议使用GCM。从GCM迁移到FCM,这非常容易。您只需要创建一个扩展FirebaseMessagingService类的类。

在清单中注册服务类。

    <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完成