2

我成功地使这些 c2dm 实现在我的应用程序上运行。

当设备突然没有收到 c2dm 消息时,我遇到了问题。这次它给了我许可拒绝,我对此感到困惑:

权限拒绝:接收 Intent {
act=com.google.android.c2dm.intent.REGISTRATION cat=[myapp.android] (has extras) } 到 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" />

4

3 回答 3

6

对我来说,它在我将其定义如下之后起作用:

<permission android:name="mypkg.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="mypkg.permission.C2D_MESSAGE"/>

其中 mypkg = 是我的应用程序包

于 2013-08-26T14:08:27.377 回答
2

您还需要像这样在清单中定义权限,因为它不是系统权限,而是特定于您的应用程序的权限:

<permission android:name="myapp.android.gms.permission.C2D_MESSAGE" />

如果您已经拥有,则可能是特定设备中的错误或相关 Google 库的旧版本等。在这种情况下,您无能为力。

于 2012-12-17T03:41:53.520 回答
0

即使我在清单中定义了权限,我也遇到了同样的问题。

这似乎与 protectionLevel="signature" 以及在使用生产与调试密钥重新安装应用程序时权限的定义损坏有关。

为我解决的问题是暂时设置 protectionLevel="normal",然后重新安装应用程序,然后改回“签名”并再次重新安装。

于 2013-05-09T06:26:32.233 回答