GcmBroadcastReceiver未在Android 4.0.3上触发

时间:2013-07-24 02:05:13

标签: android notifications push-notification google-cloud-messaging

我在我的应用中实施了 GCM ,跟随此official tutorial。 但我在 Android 4.0.3 下的用户报告我通知无效。我发现我的onReceive GcmBroadcastReceiver extends BroadcastReceiver未被解雇。 这是我的清单。

    <!-- GCM -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.VIBRATE" />

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

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

    <application
        ... >

        <!-- GCM -->
        <receiver
            android:name="com.myapp.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <category android:name="com.myapp" />
            </intent-filter>
        </receiver>

我做错了什么?

3 个答案:

答案 0 :(得分:5)

您的应用程序的主程序包名称是com.nyapp.gcm还是com.myapp?

在清单的权限部分,您使用com.myapp.gcm,而在接收者的意图过滤器类别中使用com.myapp。

在这两个地方,您应该使用相同的包,这是您应用的主要包。

答案 1 :(得分:0)

您的过滤器中缺少“com.google.android.c2dm.intent.REGISTRATION”操作,如果没有该操作,您的应用将无法接收注册ID。将以下内容添加到您的intent-filter:

动作android:name =“com.google.android.c2dm.intent.REGISTRATION”

答案 2 :(得分:0)

<!-- GCM -->
    <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="YOUR_APP_PACKAGE_NAME" />
        </intent-filter>
    </receiver>

您的清单文件权限丢失检查清单文件中的BroadcastReceiver注册