无法使 Google 云消息传递工作

Unnable to make Google Cloud Messaging Work

我遵循了新教程 Implementing GCM Client on Android,但我无法使其正常工作。

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

{
  "to": "f19jCbaw-S4:APA91b....",
  "notification": {
    "body": "body",
    "title": "title"
  },
  "data": {
    "message": "test"
  }
}

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

{
"multicast_id": 844556567...,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1433092445706613%..."
}
]
}

但我的应用程序从未进入 MyGcmListenerService class 的 onMessageReceived。我唯一的线索是以下日志跟踪:

 6399-6454/com.miapp.app W/GcmNotification﹕ Failed to show notification: Missing icon

我正在逐步复制 Google Cloud Messaging Quickstart 示例项目。显然我使用了我的 api 密钥和我的发件人 ID...但是 ID 不起作用,我的应用程序在我的 onMessageReceived 方法中从未停止。

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

事实上,没有通知的有效载荷应该到达 "onMessageReceived" 方法并且工作正常,但如果有效载荷中存在通知,则会显示相同的错误 "Failed to show notification: Missing icon"。

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

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

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

如果您的图标在 mipmap 中,您可以添加:

"icon" : "ic_launcher"

如果您的图标在可绘制对象内,您应该:

"icon" : "@drawable/ic_myicon"

因此您的新请求将如下所示:

{
  "to": "f19jCbaw-S4:APA91b....",
  "notification": {
    "body": "body",
    "title": "title",
    "icon" : "@drawable/ic_myicon"
  },
  "data": {
    "message": "test"
  }
 }