无法使谷歌云消息服务正常工作

4

我按照新的教程在Android上实现GCM客户端进行了操作,但是无法使其工作。

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

{
  "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类的onMessageReceived方法。 我唯一的线索是以下日志跟踪:

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

我正在逐步复制Google Cloud Messaging Quickstart示例项目。显然,我使用了我的API密钥和发送者ID...但是它不起作用,我的应用程序从未停止在我的onMessageReceived方法中。
还有其他人遇到这个问题吗?

@Hidemburg:您能展示一下如何在 PHP 端创建消息吗?我有一个类似的问题:两个客户端可以互相发送消息,但当我从服务器(PHP)发送消息时,什么也不会发生。我得到了成功的结果,但客户端上没有任何反应。谢谢。 - marco
如果你在客户端成功了,但是没有收到消息,那么请仔细检查一下 build.gradle 文件中的 application_id,并确保在 gradle 脚本、Google 开发者控制台以及 google-services.json 脚本中使用相同的 application_id。当然,应用程序 ID 必须与您的包结构相同(也许您在创建项目后更改了包结构)。 - R. Campos
是的,问题已解决。我只是打错了 PHP 代码,而且图标也缺失了。不管怎样,还是谢谢你。 - marco
1个回答

5
实际上,在没有通知的情况下,有效载荷应该能够到达“onMessageReceived”方法并正常工作,但是如果有效载荷中存在通知,则会显示相同的错误“无法显示通知:缺少图标”。
我尝试在AndroidManifest.xml中设置图标(在两个intent-filter上、在接收器上),但仍然无效。
如果您不需要通知,请从有效载荷中删除它们。如果需要通知,则需要在通知中添加另一个必填字段:
如果您的图标位于mipmap中,您可以添加:
"icon" : "ic_launcher"

如果您的图标在drawable内部,您应该有以下内容:
"icon" : "@drawable/ic_myicon"

那么您的新请求将如下所示:

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

嗨!谢谢你的回答。我今晚会尝试你说的方法。我想你是对的,这就是答案,测试后我会将其标记为答案。再次感谢! - R. Campos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接