我已经从http://code.google.com/p/gcm/下载并设置了Android gcm-client和gcm-demo-server(http服务器)。我已经设法在我的Android gcm-client应用程序中接收下游消息。我做了很多具有以下特点的测试:
在所有情况下,应用程序会在发送后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服务器遇到的延迟有任何经验?
提前致谢
答案 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秒内收到通知,当然没有这个工作代码。
希望得到这个帮助,抱歉我的英语不好。