无法使Google Cloud Messaging工作

R. *_*pos 4 google-cloud-messaging

我按照新的教程在Android上实现GCM客户端,我无法让它工作.

我成功地获得了令我的设备的令牌,当我发送以下消息时

{
  "to": "f19jCbaw-S4:APA91b....",
  "notification": {
    "body": "body",
    "title": "title"
  },
  "data": {
    "message": "test"
  }
}
Run Code Online (Sandbox Code Playgroud)

https://gcm-http.googleapis.com/gcm/send,我得到了结果:

{
"multicast_id": 844556567...,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1433092445706613%..."
}
]
}
Run Code Online (Sandbox Code Playgroud)

但我的应用程序永远不会进入MyGcmListenerService类的onMessageReceived.我唯一的线索是以下日志跟踪:

 6399-6454/com.miapp.app W/GcmNotification? Failed to show notification: Missing icon
Run Code Online (Sandbox Code Playgroud)

我一步一步地重复了 Google Cloud Messaging Quickstart示例项目.很糟糕,我使用我的api密钥和我的发件人ID ...但是id不起作用,我的app永远不会停留在我的onMessageReceived方法中.

还有其他人有这个问题吗?

Nic*_*las 5

事实上,没有通知的有效负载应该达到"onMessageReceived"方法并且工作正常,但如果通知存在于有效负载中,则会显示相同的错误"无法显示通知:缺少图标".

我试图在AndroidManifest.xml中设置图标(在接收器上的两个intent-filter上),但没有任何效果.

如果您不需要通知,只需从有效负载中删除它们即可.

如果您需要通知,则需要在通知中添加另一个必填字段:

如果您的图标位于mipmap中,则可以添加:

"icon" : "ic_launcher"
Run Code Online (Sandbox Code Playgroud)

如果你的图标在drawable中,你应该:

"icon" : "@drawable/ic_myicon"
Run Code Online (Sandbox Code Playgroud)

所以你的新请求看起来像:

{
  "to": "f19jCbaw-S4:APA91b....",
  "notification": {
    "body": "body",
    "title": "title",
    "icon" : "@drawable/ic_myicon"
  },
  "data": {
    "message": "test"
  }
 }
Run Code Online (Sandbox Code Playgroud)