Android 谷歌云消息:可以发送消息,但可以';收不到

Android 谷歌云消息:可以发送消息,但可以';收不到,android,google-cloud-messaging,Android,Google Cloud Messaging,我正在尝试在我的Android应用程序中使用谷歌云消息,但我遇到了困难。我已经成功地让我的应用程序将其注册令牌与我的应用程序服务器同步,这一部分似乎正在按照服务器的描述工作。据我所知,我的应用程序中需要一个扩展GcmListenerService的服务,我必须重写onMessageReceived方法来处理消息。下面是我对该类的实现,我基本上是从 我也相应地更新了我的清单,以说明这项新服务: <receiver android:name="com.google.android.gm

我正在尝试在我的Android应用程序中使用谷歌云消息,但我遇到了困难。我已经成功地让我的应用程序将其注册令牌与我的应用程序服务器同步,这一部分似乎正在按照服务器的描述工作。据我所知,我的应用程序中需要一个扩展GcmListenerService的服务,我必须重写onMessageReceived方法来处理消息。下面是我对该类的实现,我基本上是从

我也相应地更新了我的清单,以说明这项新服务:

    <receiver android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="xx.xx.xx.gcm" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        </intent-filter>
    </receiver>
    <service android:name="xx.xx.xx.GCMListenerService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        </intent-filter>
    </service>
我的安卓设备连接到互联网,我确信这一点,因为我有一个基本的登录服务器,可以通过网络正确验证登录凭据,并且工作正常


我已经尝试调用startService(),尽管我上面链接的repo中的示例应用程序似乎从来没有调用过。不管我是否这样做,在我发送消息后,结果仍然是沉默。有人能帮我吗?

您还有InstanceIDListenerService的实现吗?(询问,因为它不包括在您的清单摘录中)第二:您的GcmReceiver意图过滤器的类别标记是否等于您在清单文件最顶部的清单包标记中定义的根包?提示:您绝对不能自己调用startService(),错误必须在其他地方,因为我有InstanceIDListenerService和IntentService。我没有包括它们,因为我相信它们运行正常。如果我理解正确,那么如果从HTTP POST到/gcm/send的响应包括success:1,那么令牌已正确更新,而这不是问题所在,情况似乎就是这样。是的,类别包名称与清单顶部的名称相同。您是否已将令牌添加到从服务器端appYes发送的消息中的“registration_ID”中?是的,令牌是最新的,否则GCM至少会返回规范ID或失败。我只是想问一下,因为GcmReceiver可能既需要正常工作,也不需要。InstanceIDListenerService不一定工作,因为获取实例令牌不需要此服务。触发时,您可以尝试将GCM通知的优先级设置为“高”。与您发布的客户端代码相比,我发布的客户端代码(正在运行)的唯一区别在于,我没有在中设置发送权限GcmReceiver@s.schmid,您最初的评论实际上是正确的;我的GCM接收器的程序包名称中有错误。现在一切正常。非常感谢。您是否也有InstanceIDListenerService的实现?(询问,因为它不包括在您的清单摘录中)第二:您的GcmReceiver意图过滤器的类别标记是否等于您在清单文件最顶部的清单包标记中定义的根包?提示:您绝对不能自己调用startService(),错误必须在其他地方,因为我有InstanceIDListenerService和IntentService。我没有包括它们,因为我相信它们运行正常。如果我理解正确,那么如果从HTTP POST到/gcm/send的响应包括success:1,那么令牌已正确更新,而这不是问题所在,情况似乎就是这样。是的,类别包名称与清单顶部的名称相同。您是否已将令牌添加到从服务器端appYes发送的消息中的“registration_ID”中?是的,令牌是最新的,否则GCM至少会返回规范ID或失败。我只是想问一下,因为GcmReceiver可能既需要正常工作,也不需要。InstanceIDListenerService不一定工作,因为获取实例令牌不需要此服务。触发时,您可以尝试将GCM通知的优先级设置为“高”。与您发布的客户端代码相比,我发布的客户端代码(正在运行)的唯一区别在于,我没有在中设置发送权限GcmReceiver@s.schmid,您最初的评论实际上是正确的;我的GCM接收器的程序包名称中有错误。现在一切正常。非常感谢。
    <receiver android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="xx.xx.xx.gcm" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        </intent-filter>
    </receiver>
    <service android:name="xx.xx.xx.GCMListenerService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        </intent-filter>
    </service>
Response:     
{"multicast_id":7148018997883491563,
"success":1,"failure":0,"canonical_ids":0,
"results":[{"message_id":"long string that never changes"}]}