Android GCM在上传到play store后停止工作

Android GCM在上传到play store后停止工作,android,Android,我创建了一个应用程序,它可以使用谷歌的信息,它工作得非常好。 那么, 我导出带有新密钥库的已签名应用程序。 上传到playstore 在发布页面上链接发件人ID。 我卸载了未签名的应用程序,并从play store安装了新的应用程序,但现在我无法接收消息。服务器控制台显示已成功发送的消息以及消息ID,但设备上没有通知。奇怪的是, 删除android:protectionLevel=signature标记修复了这个问题。我明白这意味着现在其他应用程序也可以获取我发送的通知。奇怪的是, 删除andr

我创建了一个应用程序,它可以使用谷歌的信息,它工作得非常好。 那么, 我导出带有新密钥库的已签名应用程序。 上传到playstore 在发布页面上链接发件人ID。 我卸载了未签名的应用程序,并从play store安装了新的应用程序,但现在我无法接收消息。服务器控制台显示已成功发送的消息以及消息ID,但设备上没有通知。

奇怪的是, 删除android:protectionLevel=signature标记修复了这个问题。我明白这意味着现在其他应用程序也可以获取我发送的通知。

奇怪的是,
删除android:protectionLevel=signature标记修复了这个问题。我知道这意味着现在其他应用程序也可以获取我发送的通知。

检查您的清单文件。如果您可以在不使用

android:protectionLevel=signature
您可能在权限对象中使用了错误的包名。检查是否已将程序包名称更改为应用程序程序包名称

因此而不是:

<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" />
<permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE" />

使用:

<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" />
<permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE" />

检查您的清单文件。如果您可以在不使用

android:protectionLevel=signature
您可能在权限对象中使用了错误的包名。检查是否已将程序包名称更改为应用程序程序包名称

因此而不是:

<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" />
<permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE" />

使用:

<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" />
<permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="YOUR.PACKAGENAME.HERE.permission.C2D_MESSAGE" />


如果您更新apk,GCM消息可以忽略旧版本。我发现新的设备ID是通过play中的apk安装生成的,我也在服务器端使用了它们。有生产/沙箱钥匙之类的东西吗?或者某个地方要更新的密钥库?当应用程序被更新时,它应该使其现有的注册ID无效,因为它不能保证与新版本一起工作。因为在更新应用程序时没有调用生命周期方法,所以实现此验证的最佳方法是在存储注册ID时存储当前应用程序版本。是的,我已经解决了这个问题。我已从数据库中删除了设备的id并插入了新id。为了更安全起见,我增加了重试次数。但所有这些都没有帮助。我还尝试从play store卸载应用程序并直接安装已签名的apk,效果很好。API控制台或Play store控制台上肯定有一些配置我不知道。如果更新apk,GCM消息可以忽略旧版本。我看到新的设备ID是通过Play安装apk生成的,我也在服务器端使用了它们。有生产/沙箱钥匙之类的东西吗?或者某个地方要更新的密钥库?当应用程序被更新时,它应该使其现有的注册ID无效,因为它不能保证与新版本一起工作。因为在更新应用程序时没有调用生命周期方法,所以实现此验证的最佳方法是在存储注册ID时存储当前应用程序版本。是的,我已经解决了这个问题。我已从数据库中删除了设备的id并插入了新id。为了更安全起见,我增加了重试次数。但所有这些都没有帮助。我还尝试从play store卸载应用程序并直接安装已签名的apk,效果很好。API控制台或Play store控制台上肯定有一些配置我没有。