2012-07-20 132 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