2012-11-28 61 views
0

我目前正在使用GCM for android並使用PHP實現服務器代碼。現在,我的代碼如下所示:我應該如何在服務器端實施GCM推送過程?

$url = 'https://android.googleapis.com/gcm/send'; 
$registrationIDs = array('device1', 'device2');//device ids from database. 

$fields = array(
       'registration_ids' => $registrationIDs, 
       'data'    => array("message" => $message), 
       ); 

$headers = array( 
        'Authorization: key=' . $apiKey, 
        'Content-Type: application/json' 
       ); 

// Open connection 
$ch = curl_init(); 

// Execute post 
$result = curl_exec($ch); 

// Close connection 
curl_close($ch); 

當我執行,結果如下:

{ 
    "multicast_id": 5407120473654582795, 
    "success": 1, 
    "failure": 1, 
    "canonical_ids": 1, 
    "results": [ 
    { 
     "registration_id": "skjdfhksdfgksudghldshfgkdjfghdiugf", 
     "message_id": "0:1354101888763222%14c0e050f9fd7ecd" 
    }, 
    { 
     "error": "MismatchSenderId" 
    } 
    ] 
} 

有GCM頁上的音符:

  • 如果消息已創建,但結果返回了規範註冊ID,因此有必要將當前註冊ID替換爲規範註冊ID。
  • 如果返回的錯誤是NotRegistered,則需要刪除該註冊ID,因爲應用程序是從設備上卸載的。

我的問題是:

  1. 基於服務器的輸出,我有1個規範的結果。但是,我不確定它屬於哪個設備。 我如何確定它?
  2. 根據問題(1),我發現我可以一次將設備發送到GCM。但是,這提出了另一個問題。 如果我擁有數百萬的設備會怎麼樣?

回答

1

基於此頁面GCM Architectural Overview

上的信息是你的陣列,需要其REGID與「skjdfhksdfgksudghldshfgkdjfghdiugf」替換第一個元素。數組中的第二個元素是out和out失敗。

數以百萬計的設備? - 不!高達1000? - 是

在同一頁上是

registration_ids一個字符串數組,與接收到該消息的設備(註冊ID)的列表。它必須至少包含1和至多1000註冊ID。

0

你可以閱讀更多有關規範的ID在GCM Advanced Topics page明確:

如果您稍後嘗試使用不同的註冊 ID,GCM將處理該請求照常發送郵件,但它會包括 響應的registration_id字段中的 規範註冊ID。請確保使用此規範ID替換存儲在您的 服務器中的註冊ID,因爲最終您使用的ID將會停止工作。

您還可以在Response Format部分閱讀更多。

如果您要發送到數百萬設備,則必須使用JSON以1000個註冊ID塊的形式發送消息。Google文檔提供以下內容作爲發送到六個設備的示例:

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "registration_ids": ["4", "8", "15", "16", "23", "42"] 
} 
相關問題