2012-08-28 50 views
0

有沒有辦法查看設備是否對GCM服務器空閒?Android設備在delay_while_idle設置爲true時未收到消息

有沒有辦法使用delay_while_idle而不使用collapse_key?

當我在php中這樣設置我的消息時,它確實有效。

$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $key); 
$data = array(
    'registration_ids' => $deviceRegistrationIds, 
    'data' => array('message' => $messageText, 
     'msgfromname' => $fromname, 
     'close' => $close, 
     'newchat' => $newchat, 
     'msgfrom' => $from) 
); 

當我使用這樣的delay_while_idle它不起作用。

$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $key); 
$data = array(
    'registration_ids' => $deviceRegistrationIds, 
    'collapse_key' => $messageText, 
    'delay_while_idle' => true, 
    'data' => array('message' => $messageText, 
     'msgfromname' => $fromname, 
     'close' => $close, 
     'newchat' => $newchat, 
     'msgfrom' => $from) 
); 

我想這是因爲$ messageText與數據數組中的東西有相同的值?當我將它的值更改爲'hello'時,它確實有效。

回答

1

我只能看到你需要圍繞$ messageText和所有其他帶雙引號的字符串。我也設置delay_while_idle爲1,而不是真的..我知道它應該轉換爲1,當你通過它的真實。

另外我不認爲你正確使用collapse_key(不知道你在那裏設置了什麼樣的實際數據),但通常你會使用該字段作爲「批處理ID」。

$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $key); 
$data = array(
    'registration_ids' => $deviceRegistrationIds, 
    'collapse_key' => "$messageText", 
    'delay_while_idle' => 1, 
    'data' => array('message' => "$messageText", 
     'msgfromname' => "$fromname", 
     'close' => "$close", 
     'newchat' => "$newchat", 
     'msgfrom' => "$from") 
); 
+0

謝謝您的回答。我正在用GCM寫一個聊天應用程序。所以不應該有一個collapse_key,因爲我發送聊天消息。當使用1而不是true時,所有消息均失敗。 – Klaasvaak

+0

現在使用隨機數爲collapse_key。它似乎工作。 – Klaasvaak

+2

也許最好不要使用隨機數字,如果數字相同,可能會導致消息有時會消失。可能只是對用戶做一些反制。然而,對於聊天客戶端來說,在閒置時延遲可能並不適合,因爲我希望當我的手機閒置時傳遞消息。 –

1

您可以將delay_while_idle設置爲true,而無需指定collapse_key。

GCM一次最多隻支持4個摺疊鍵。如果在設備處於脫機狀態時使用多於4個摺疊鍵,則只有4條消息將被保留,並且不能保證4條消息。

如果您使用消息文本作爲摺疊鍵,GCM將只保存四條獨特的消息,並且您無法知道它將最終傳遞哪四條消息。

(順便說一句,如果你想使用collapse_key的,我敢肯定,你還必須提供一個time_to_live值或請求將被拒絕。)