2013年2月3日 星期日

使用GCM服務(四) 訊息推播伺服器(2)

Plain text的POST請求封包由於只支援單點推播,HTTP body內必須改用registration_id,而data欄位值須改為data.<key>=value,例如:data.title=Android Apps初學必修課&data.isbn=978-986-276-704-7&registration_id=reg_id。另外,中文字編碼時可能與「&」符號衝突,因此最好使用urlencode()函式處理。
以下PHP程式碼使用plain text格式送出GCM請求封包。
  define("GOOGLE_API_KEY", "your_api_key");
  $reg_id = 'device_reg_id';
  //payload data
  $payload = 'data.contentTitle='.urlencode('耕雲智慧').
'&data.contentText='.urlencode('
測試訊息推播');
  //http header
  $headers = array('Authorization: key=' . GOOGLE_API_KEY,
'Content-Type:application/x-www-form-urlencoded;charset=UTF-8');
  $fields = $payload.'&registration_id='.$reg_id;
  //curl connection
  $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  $result = curl_exec($ch);
   curl_close($ch);
  echo $result;
?>

2 則留言:

  1. 不好意思
    想請問一下device_reg_id是什麼東西
    跟Your_Sender_ID一樣嗎? @@

    回覆刪除
  2. device_reg_id是手機端應用程式透過GCM函式庫取得的裝置碼, 請參考"使用GCM服務(六) 設計GCM應用程式(2)"一文中, Android程式碼:
    final String regId = GCMRegistrar.getRegistrationId(this);

    回覆刪除