我成功地使这些c2dm实现在我的应用程序上运行。
当设备突然收不到c2dm消息时,我遇到了问题。 这次它给了我许可否认,我很困惑:
许可拒绝:接收意图{
act = com.google.android.c2dm.intent.REGISTRATION cat = [myapp.android] (有额外的)}到myapp.android需要 由于发件人而导致myapp.android.permission.C2D_MESSAGE com.google.android.location(uid 10037)
现在第二次发生在我身上,我不能告诉我的用户他们在没有收到任何命令时需要执行恢复出厂设置。 这里有没有人遇到类似的问题?任何帮助或见解和原因将不胜感激。
manifest.xml按要求
<receiver
android:name="myapp.EmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="myapp" />
</intent-filter>
</receiver>
...
<uses-permission android:name="myapp.android.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
答案 0 :(得分:6)
对我而言,在我将其定义如下之后,它起作用了:
<permission android:name="mypkg.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="mypkg.permission.C2D_MESSAGE"/>
其中mypkg =是我的应用程序包
答案 1 :(得分:2)
您还需要在清单中定义权限,因为它不是系统权限,而是您的应用程序特有的权限:
<permission android:name="myapp.android.gms.permission.C2D_MESSAGE" />
如果您已经拥有,则可能是特定设备或旧版相关Google库等的错误。在这种情况下,您无法做到。
答案 2 :(得分:0)
即使我在清单中定义了权限,我也遇到了同样的问题。
似乎与protectionLevel =“signature”有关,当使用生产密钥和调试密钥重新安装应用程序时,权限的定义会被破坏。
为我修复的是临时设置protectionLevel =“normal”,然后重新安装应用程序,然后更改回“签名”并重新安装。