Android 谷歌云消息(GCM)下游消息延迟
我已经从下载并设置了Android gcm客户端和gcm演示服务器(http服务器)。我已经设法在我的Android gcm客户端应用程序中接收下游消息。我已经做了许多具有以下特征的测试:Android 谷歌云消息(GCM)下游消息延迟,android,push-notification,xmpp,google-cloud-messaging,Android,Push Notification,Xmpp,Google Cloud Messaging,我已经从下载并设置了Android gcm客户端和gcm演示服务器(http服务器)。我已经设法在我的Android gcm客户端应用程序中接收下游消息。我已经做了许多具有以下特征的测试: 服务器使用了浏览器API密钥或服务器API密钥 数据连接不是3G就是WiFi 发送的邮件包含/未包含其他数据 发送的邮件有/没有折叠密钥 发送的消息已将delayWhileIdle设置为false 已发送邮件的timeToLive设置为0或5分钟 服务器位于欧洲的两个不同位置 Android应用程序在欧洲不同
在所有情况下,应用程序都会在发送消息的25-30秒后接收到这些消息。但是,我已经测试了其他使用GCM下游消息的Android应用程序,在大多数情况下,消息几乎立即到达(我认为问题出在保留消息的Android GCM客户端演示中,而不是GCM服务器中。 在gcm客户端演示的gcminentService.java文件中,可以看到受保护的函数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) {
}
}
[...]
[…]
//如果是常规GCM消息,请执行一些操作。
}else if(GoogleCloudMessaging.MESSAGE\u TYPE\u MESSAGE.equals(messageType)){
//此循环表示正在执行某些工作的服务。
对于(int i=0;i<5;i++){
Log.i(标记“正在工作…”+(i+1)
+“/5@”+SystemClock.elapsedRealtime());
试一试{
睡眠(5000);
}捕捉(中断异常e){
}
}
[...]
在发送通知消息之前,此代码会使android应用程序在每次迭代中休眠5秒(总共25秒)。您可以删除此代码,因为这是一个示例,您可以在显示通知之前将一些工作插入else if语句
我已经实现了一个xmpp服务器,我在《你怎么知道“其他Android应用程序”的延迟》中收到了通知“通过测试。例如,在短信应用程序中,您可以以用户身份发送消息,以其他用户身份接收消息,并测量传递时间。您如何知道GCM参与了消息传递?通过监控应用程序从远程主机(GCM服务器)接收的数据包。”在5228端口。救了我的命,他们为什么要放这段代码???太没必要了…谢谢!