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

Android GCM已成功发送,但在某些设备上未收到,android,google-cloud-messaging,Android,Google Cloud Messaging,在服务器端,我使用的是谷歌提供的GCMServer1.0.2库。在客户端,我按照上提供的设置了GCM 我的问题是,在大多数设备上,一切都可以正常工作,但在少数设备上,推送功能无法接收 if (case1) message = new Message.Builder() .timeToLive(0) .collapseKey("0") .delayWhileIdle(false) .addData(&quo

在服务器端,我使用的是谷歌提供的GCMServer1.0.2库。在客户端,我按照上提供的设置了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(这是错误的标志)

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

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

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

在GCMinentService#OnHandleContent中,只需删除即可

GcmBroadcastReceiver.completeWakefulIntent(intent);
该行释放唤醒服务。但我很好奇,因为在其他设备上,推送消息会持续发送,即使这条线路没有被删除

这不是一个解决方案,因为它声明我应该在每次工作之后调用completeWakeFulIntent。而且,我的方法会显著耗尽电池电量


有什么建议吗?

您有接收通知的正确版本的Playstore吗? 您是否在这些设备上使用功能正常的Google帐户登录


当我“强制停止”一个应用程序时,我也遇到了一个问题,在“强制停止”(从android 3.1开始)之后,你无法收到任何应用程序的通知,因此也要小心。如果你使用wifi,可能是互联网防火墙阻止了gcm。尝试使用手机sim卡上网

  • 确保您正确设置了从谷歌收到的
    发件人ID
  • 确保您的设备已正确注册到谷歌的GCM服务
  • 确保你将推送发送到从谷歌收到的正确注册id。而且你没有收到来自谷歌GCM服务的错误
  • 当空闲=1时,您是否设置了延迟?这意味着如果设备处于空闲状态(关闭、脱机、锁定屏幕等),消息将不会到达设备。如果您想让wakelock权限发挥任何作用,请将其更改为
    delay\u,而_idle=0
    。请阅读更多
  • 有些时候,推动需要时间(但不要花太多时间,否则会出现问题)。检查你发送的推送的“生存时间”是多少
  • 检查表

    • 确保Google Play商店已更新至最新版本
    • 确保没有阻止通知的系统范围设置
    • 进入应用程序管理器中的应用程序并取消选中/重新选中“通知”
    • 如果使用Wifi,请将Wifi连接切换到其他AP(如果可能)
    • 重新启动设备

    • 安装“推送通知修复程序”(仍需安装此程序)

    首次运行通知设置可能是令人恼火的任意设置,需要通过以下一种或多种方式“踢”设备。

    您是在WiFi上测试的吗?@Apoorv否,在LTE网络上。刚刚用WIFI进行了测试,但没有收到推送消息……如果消息发送成功,则regID肯定是错误/无效的,并且谷歌云消息无法传递消息。@artworkadシ. 但是,是否存在这样的情况:即使regId错误/无效,result.getErrorCodeName()也会返回null?@JeeSeokYoon否。playstore或google帐户没有问题。此外,GCM根本不起作用(无论我是否强制停止应用程序)。你在防火墙后面吗?看起来有些人对此有异议。没有防火墙或防病毒应用程序。。。是否有任何android设置会阻止GCM?我不这么认为。。。就像我说的,PlayStore的正确版本和一个连接的谷歌账户。你也可以发布你的清单吗?我正在用谷歌官方文档中的演示代码进行测试。除了我删除了“gcmbroadcasreceiver.completeWakefulIntent(intent);”之外,没有任何更改(甚至包名也没有更改),请阅读上面的评论。。。我已经用LTE,3种不同的WIFI进行了测试。虽然你的方法将是每个有GCM问题的人应该首先采取的方法,但我已经检查并尝试了所有方法。更改了GCM提供的所有设置,但似乎没有任何效果。问题不是GCM,而是“特定电话”上的GCM。另外,请注意,不释放尾流锁解决了此问题。还有其他想法吗?我也有同样的问题,像@JeeSeokYoon,这些步骤都没有为我解决。你检查过播放服务是否连接了吗?如果没有,您需要呼叫Play services问题解决方案。我有类似的问题,但对我来说,消息只是“有时”被接收。为什么谷歌不为这个过程提供一些调试工具?发送者id=project noInstall“推送通知修复程序”(无论如何都要安装这个)这个步骤成功了