我在我的应用中实施了 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>
我做错了什么?
答案 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注册