2012-07-20 163 views
0

我試圖將我的應用程序從C2DM服務遷移到新的GCM推送通知。我已成功集成了擴展GCMBaseIntentService的GCMIntentService類。當我使用PHP從服務器發送推送通知時,GCM將消息數據作爲JSON對象發送。我在我的Android GCM服務中使用了下面的代碼,它用新的代碼返回一個空值。未使用JSON的GCM推送通知

public void onMessage(Context context, Intent intent) 
    { 
     String action = intent.getAction();  
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) {    
      message=intent.getStringExtra("message");         
      createNotification(context); 
     } 
    } 

PHP腳本包含:

$頭=陣列( '授權:鍵=' $ apiKey, '內容類型:應用/ JSON' );

// Open connection 
$ch = curl_init(); 

// Set the url, number of POST vars, POST data 
curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

請建議我什麼都我需要在我的PHP腳本的變化使用GCM庫和JSON沒有發送推送通知。

在此先感謝 添

回答

0

你必須通過JSON發送有效載荷 - 什麼你不希望使用JSON的原因是什麼?

+0

只是想確認我們是否可以只使用JSON與推送消息發送數據。 – Timson 2012-07-20 11:28:37

+0

不,它必須用JSON封裝 - 並且確切地說只有帶有String參數的json(因爲向後兼容到2.2) – ligi 2012-07-20 11:54:14

+0

謝謝。我已經完成了解析JSON的代碼,並且它從我的應用程序中工作正常:) – Timson 2012-07-23 04:31:25

0

事實上,你可以發送有效載荷不JSON(如果你的首選),就像C2DM。

首先,內容類型更改爲這個:

Content-Type: application/x-www-form-urlencoded;charset=UTF-8 

那麼你的HTTP身體會包含此:

registration_id=xxxxxx&collapse_key=yyyyy&data.data1=value1&data.data2=value2 

然而,通過發送有效載荷以純文本格式,你只能將其發送到one device at a time。除非您已經在您的C2DM代碼中已經有了不希望更改的批量發送邏輯,否則這個原因本應使您避免使用此選項。

在這裏看到更多的細節:http://developer.android.com/guide/google/gcm/gcm.html#request