繁体   English   中英

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

[英]Google Cloud Messaging (GCM) downstream message delay

我已经从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应用程序在位于欧洲不同地方的两台设备上运行。

在所有情况下,应用程序会在发送后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)所述 - 项目未列入白名单 正如我在各种网站上看到的,批准通常需要2-3个月,所以我很可能很快就无法测试XMPP服务器。

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

提前致谢

我认为问题是在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 if语句中的一些工作。

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

希望这有帮助,抱歉我的英语不好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM