gpt4 book ai didi

Android GCM 发送成功但在某些设备上未收到

转载 作者:IT老高 更新时间:2023-10-28 21:52:52 25 4
gpt4 key购买 nike

在服务器端,我使用的是 Google 提供的 GCM 服务器 1.0.2 库。在客户端,我按照 official documentation 上提供的方式设置 GCM。 .

我的问题是在大多数设备上一切正常,但在少数设备上,没有收到推送。

if (case1)
message = new Message.Builder()
.timeToLive(0)
.collapseKey("0")
.delayWhileIdle(false)
.addData("msg", msg).build();
else if (case2)
message = new Message.Builder()
.collapseKey("2")
.addData("msg", msg).build();
else
message = new Message.Builder().addData("msg", msg).build();

Result result = sender.sendNoRetry(message, regId);
System.out.println("Message ID:"+result.getMessageId());
System.out.println("Failed:" + result.getErrorCodeName());

从上面代码的测试中我可以看到,没有错误。消息 id 存在,但错误代码名称为 null(这是 successful push 的标志)。

我几乎尝试了所有设置。已使用 TTL、折叠键、空闲设置开启和关闭时的延迟进行测试。

哪些情况会导致阻塞(?)GCM 推送?我该如何解决这个问题?

编辑

我不知道为什么,但下面的临时解决方案解决了我的问题。

在 GcmIntentService#onHandleIntent 中删除

GcmBroadcastReceiver.completeWakefulIntent(intent);

此行释放唤醒服务。不过我很好奇,因为在其他设备上,即使没有删除这条线,推送消息也会连续发送。

这不是解决方案,因为 this document声明我应该在每次工作后调用 completeWakeFulIntent。另外,我的方法会大量消耗电池。

有什么建议吗?

最佳答案

  1. 确保您已正确设置从 Google 收到的 SENDER ID
  2. 确保您的设备已正确注册 Google 的 GCM 服务。
  3. 确保将推送发送到您从 Google 收到的正确 reg id。并且您没有收到来自 Google GCM 服务的错​​误消息。
  4. 您是否设置了 delay_while_idle = 1?这意味着如果设备处于空闲状态(关闭、离线、锁定屏幕等),消息将不会到达设备。如果您希望您的唤醒锁定权限有所作为,请将其更改为 delay_while_idle = 0。请阅读更多 here .
  5. 有时推送到达需要时间(但永远不会有太多时间,那么就会出现问题)。检查您发送的推送的“生存时间”。

关于Android GCM 发送成功但在某些设备上未收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20513927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com