首页 文章

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

提问于
浏览
0

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

  • 服务器使用浏览器API密钥或服务器API密钥 .

  • 数据连接是3G或WiFi

  • 已发送的消息包含/不包含其他数据 .

  • 发送的消息有/没有折叠键 .

  • 已发送的消息已将delayWhileIdle设置为false .

  • 已发送的消息将timeToLive设置为0或5分钟 .

  • 服务器位于欧洲的两个不同位置 .

  • Android应用程序在位于欧洲不同地方的两台设备上运行 .

在所有情况下,应用程序会在发送后25-30秒之后收到已发送的消息 . 但是,我测试了其他使用GCM下游消息的Android应用程序,在大多数情况下,消息几乎立即到达(<5秒) .

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

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

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

提前致谢

1 回答

  • 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 if语句中的一些工作 .

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

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

相关问题