如何将心跳发送到 GCM 服务器

Posted

技术标签:

【中文标题】如何将心跳发送到 GCM 服务器【英文标题】:How can I send Heartbeat to GCM Server 【发布时间】:2015-01-28 10:16:00 【问题描述】:

如何向 GCM 服务器发送心跳。这样我们就可以保持连接活跃。

我使用以下代码向 GCM 服务器发送心跳。

mContext.sendBroadcast(new Intent("com.google.android.intent.action.GTALK_HEARTBEAT"));
mContext.sendBroadcast(new Intent("com.google.android.intent.action.MCS_HEARTBEAT"));

但它再次延迟了消息。

在长时间的空闲状态后,我向我的应用和 gmail 应用发送了一条通知。 Gmail 应用会及时收到通知,而我的应用没有。

它是如何发生的。 AFAIK GCM 使用端口 5228 接收消息。那为什么gmail按时收到消息,而我的应用程序在很长一段时间后才收到消息。

我应该怎么做才能准时收到消息。

【问题讨论】:

告诉消息提前几分钟离开以避免高峰时段的交通? ..."on time" 是什么意思? 当我发送邮件时,Gmail 应用程序会立即显示通知。但是当我向我的应用程序发送通知时,需要一些时间才能收到通知 【参考方案1】:

想到的几个解决方案:

    您是否尝试将 delay_while_idle 标志设置为 false?

    您可以通过广播以下意图来强制 android 自己发送心跳。

    com.google.android.intent.action.MCS_HEARTBEAT com.google.android.intent.action.GTALK_HEARTBEAT

希望这对你有用。

【讨论】:

我在服务器端完成的第一个解决方案,我的问题中已经提到了第二个解决方案.. 两者都不适合我。

以上是关于如何将心跳发送到 GCM 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用服务器向 GCM 服务器发送发送重新注册请求以注册设备?

相同的服务器代码可以向 APNS 和 GCM 发送通知吗

GCM Phonegap,如何将消息发送到手机的核心通知

GCM - 如何有选择地将消息发送到某些包名称?

如何使用谷歌云连接服务器发送上游 GCM 消息

Android - 将用户发送到 Activity 的 GCM 推送通知不会导致 onCreate 调用