2014-01-21 118 views
0

我已經從http://code.google.com/p/gcm/下載並設置了Android gcm-client和gcm-demo-server(http服務器)。我設法在我的Android gcm-client應用程序中接收下游消息。我做了以下特徵的多次測試:Google Cloud Messaging(GCM)下行消息延遲

  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雲連接服務器(CCS)收到的回覆顯示「項目XXXXXXXXXX未列入白名單」。最可能的原因是我的CCM註冊尚未獲得批准,如Google CCS (GCM) - project not whitelisted中所述。正如我在各種網站上看到的,批准通常需要2-3個月的時間,所以我很可能無法儘快測試XMPP服務器。

是否有可能通過使用XMPP服務器只能接收幾乎即時消息?有沒有人對使用XMPP服務器遇到的延遲有任何經驗?

在此先感謝

+0

你怎麼知道「其他Android應用程序」有延遲「<5秒」?我發現25-30秒非常合理,因爲這種服務能夠向數百萬設備發送/廣播消息。 – Flow

+0

通過測試他們。例如,在短信應用程序中,您可以作爲用戶發送消息,並以另一個用戶的身份接收消息並測量交付時間。 – retset

+0

你怎麼知道GCM參與了消息的傳遞? – Flow

回答

2

我認爲這個問題是在被保留的消息,而不是在GCM服務器在Android GCM客戶端演示。 在GCM客戶端演示GcmIntentService.java文件,可以看出,該函數保護無效onHandleIntent(意向意圖)有以下代碼:

[...] 
// 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) { 
    } 
} 
[...] 

此代碼的Android睡應用5.1秒每一次迭代(總共25秒),然後發送通知消息。您可以刪除此代碼,因爲這是一個示例,如果聲明在顯示通知前有些工作,您可以插入

我已經實現了一個xmpp服務器,並且我在5秒內收到了<的通知,當然沒有這個工作代碼。

希望得到這個幫助,並對我的壞英語感到抱歉。

+0

You are right!謝謝! – retset

+0

救了我的屁股,他們爲什麼要把這段代碼??!?所以沒用。謝謝! – idish

相關問題