0

我正在尝试将我的应用程序从 C2DM 服务迁移到新的 GCM 推送通知。我已经成功集成了扩展 GCMBaseIntentService 的 GCMIntentService 类。当我使用 PHP 从服务器发送推送通知时,GCM 将消息数据作为 JSON 对象发送。我在我的 Android 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 脚本包含:

$headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/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 来发送推送通知。

提前感谢蒂姆

4

2 回答 2

0

您必须通过 JSON 发送有效负载 - 您不想使用 JSON 的原因是什么?

于 2012-07-20T10:32:18.287 回答
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

于 2012-07-20T14:39:09.493 回答