2012-01-02 62 views
5

我已經成功實現了使用google c2dm的Android推送通知。我總是發送一個設備的發佈請求,一個設備延遲1-2秒。所以,如果我有1000個設備,我的腳本將需要1000多秒才能完成對所有設備的推送。使用谷歌一次性向多個設備推送通知c2dm

我想知道的是,我們可以發送所有設備的發佈請求到谷歌c2dm嗎?如果可以,該怎麼辦?

我正在使用PHP腳本。

這裏是我的代碼推消息到設備:

function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText, $infoType, $messageInfo) { 

    $headers = array('Authorization: GoogleLogin auth=' . $authCode); 
    $data = array(
     'registration_id' => $deviceRegistrationId, 
     'collapse_key' => $msgType, 
     'data.message' => $messageText, 
     'data.type' => $infoType, 
     'data.data' => $messageInfo 
    ); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send"); 
    if ($headers) 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

    $response = curl_exec($ch); 

    curl_close($ch); 

    return $response; 
} 

如果我有更多的設備我環路這樣的:

while($row = mysql_fetch_assoc($result)) { 

    sendMessageToPhone($authCode, $row['deviceRegistrationId'], GOOGLE_MSG_TYPE, $messageText, $infoType, $messageInfo); 

} 

感謝幫助。

+0

您應該添加的代碼,你的片段展示瞭如何把你的事件,這樣的建議可以進行。 – hakre 2012-01-02 08:50:38

回答

2

驗證是所有過程中最爲廣泛的(及時)操作,這可能是爲什麼每次發送之間有1秒的延遲。

要加快此過程,您不應每次都進行身份驗證。 只需驗證一次,然後獲取Auth令牌。此令牌有一定的TTL,但Google沒有指定。 然後循環播放您的設備,並使用以前的身份驗證令牌發送。身份驗證令牌可以更改(很少),並可在響應標頭Update-Client-Auth中找到。

整個過程不應該花費幾百毫秒的設備。

還要考慮使用stream代替捲曲

+0

那麼,你能讓我這麼做嗎? – Kannika 2012-01-03 02:55:18

+0

你已經完成了所有的工作。只要確認一次驗證(而不是每次發送消息)。也許在你的代碼中加入一些基準來找到減慢腳本速度的部分。使用流不是強制性的。 – grunk 2012-01-03 07:37:40

0
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText, $infoType, $messageInfo) { 

    $headers = array('Authorization: GoogleLogin auth=' . $authCode); 
    $data = array(
     'registration_id' => $deviceRegistrationId, 
     'collapse_key' => $msgType, 
     'data.message' => $messageText, 
     'data.type' => $infoType, 
     'data.data' => $messageInfo 
    ); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send"); 
    if ($headers) 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

    $response = curl_exec($ch); 

    curl_close($ch); 

    return $response; 
} 
+0

OPs代碼有什麼區別? (以及爲什麼) – 2012-09-26 01:47:14

相關問題