android - onRegistered() 被调用但 onMessage() 没有

标签 android push-notification google-cloud-messaging

我在类 GCMIntentService 中有以下两个方法,但是在注册 regID 时会调用 onRegistered() 方法,但是,当我发送消息时,不会调用 onMessage()。

@Override
protected void onRegistered(Context context, String registrationId)
{
    Log.i(tag, "onRegistered called");
    GCMRegistrar.setRegisteredOnServer(context, true);
}

@Override
protected void onMessage(Context context, Intent intent)
{
    Log.i(TAG, "Received message");
    sendNotification("A", "B");
}

下面是我的 list

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.myApp.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
    <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        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.myApp" />
        </intent-filter>
    </receiver>

    <service android:name="com.myApp.GCMIntentService" />

我得到的注册 ID 是这样的:

            regid = getRegistrationId(context);

            //Check if we have registered.
            if (regid.length() == 0) {
                GCMRegistrar.checkDevice(myActivity.this);
                GCMRegistrar.checkManifest(myActivity.this);
                GCMRegistrar.register(myActivity.this, SENDER_ID);
            } else {
                Log.i(tag, "You are already registered.");
                Log.i(tag, "The registration ID is : " + regid);
            }

最佳答案

在您的 list 中,使用以下代码接收消息:

<permission
    android:name="com.MyApp.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.MyApp.permission.C2D_MESSAGE" />

<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

关于android - onRegistered() 被调用但 onMessage() 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18440127/

相关文章:

java - 将数据填充到 RecyclerView 中

android - 如何在 Android 中使用外部声音设置推送通知的音量

android - C2DM的可靠性

google-chrome - chrome service worker 推送通知仅在我的网站的标签页 URL 关闭或不活动时显示

java - 写入行时 eclipse(ADT) 崩溃包括 "R."

android - 如何通过 BLE 100 字节做广告?

java - Android Studio : How to resize an image before uploading to server?

android - 为什么首选使用 GCM 进行推送通知?

ios - GCM 推送通知返回错误消息 "GCM registration is not ready with auth credentials...."

c# - 添加 HttpClient header 会生成具有某些值的 FormatException