Google Cloud Messaging(GCM)下游邮件延迟

时间:2014-01-21 13:18:53

标签: android push-notification xmpp google-cloud-messaging

我已经从http://code.google.com/p/gcm/下载并设置了Android gcm-client和gcm-demo-server(http服务器)。我已经设法在我的Android gcm-client应用程序中接收下游消息。我做了很多具有以下特点的测试:

  1. 服务器使用浏览器API密钥或服务器API密钥。
  2. 数据连接是3G或WiFi
  3. 发送的消息包含/不包含其他数据。
  4. 发送的消息有/没有折叠密钥。
  5. 已发送的消息已将delayWhileIdle设置为false。
  6. 发送的消息将timeToLive设置为0或5分钟。
  7. 服务器位于欧洲境内的两个不同位置。
  8. Android应用在位于欧洲不同地方的两台设备上运行。
  9. 在所有情况下,应用程序会在发送后25-30秒之后收到已发送的消息。但是,我测试了其他使用GCM下游消息的Android应用程序,在大多数情况下,消息几乎立即到达(<5秒)。

    我是否可以在客户端或服务器中更改某些内容,以便更快地在应用中收到消息?

    我还尝试使用http://developer.android.com/google/gcm/ccs.html中给出的gcm XMPP服务器(使用Smack的Java应用程序),但我没有设法发送任何消息。我从GCM Cloud Connection Server(CCS)收到的回复显示“项目XXXXXXXXXX未列入白名单”。最可能的原因是我的注册CCM尚未得到批准,如Google CCS (GCM) - project not whitelisted中所述。正如我在各种网站上看到的,批准通常需要2-3个月,所以我很可能很快就无法测试XMPP服务器。

    您是否有可能只能通过使用XMPP服务器接收即时消息?有没有人对使用XMPP服务器遇到的延迟有任何经验?

    提前致谢

1 个答案:

答案 0 :(得分:2)

我认为问题在于android gcm-client演示中保留了消息,而不是在gcm-server中。 在gcm-client演示的GcmIntentService.java文件中,可以看到函数 protected void onHandleIntent(Intent intent)具有以下代码:

[...]
// If it's a regular GCM message, do some work.
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
// This loop represents the service doing some work.
    for (int i = 0; i < 5; i++) {
    Log.i(TAG, "Working... " + (i + 1)
            + "/5 @ " + SystemClock.elapsedRealtime());
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
    }
}
[...]

此代码在发送通知消息之前每次迭代(总共25秒)睡眠android应用程序5秒。您可以删除此代码,因为这是一个示例,如果语句在显示通知之前有效,您可以插入 else。

我已经实现了一个xmpp服务器,并且我在<5秒内收到通知,当然没有这个工作代码。

希望得到这个帮助,抱歉我的英语不好。