Push-уведомление GCM без использования JSON

Я пытаюсь перенести свое приложение из службы C2DM в новое push-уведомление GCM. Я успешно интегрировал класс GCMIntentService, который расширяет GCMBaseIntentService. Когда я отправляю push-уведомление с сервера с помощью 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('Авторизация: ключ=' . $apiKey, 'Тип контента: 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-скрипте для отправки push-уведомления с использованием библиотек GCM и без JSON.

Заранее спасибо Тим


person Timson    schedule 20.07.2012    source источник


Ответы (2)


вам нужно отправить полезную нагрузку через JSON - по какой причине вы не хотите использовать JSON?

person ligi    schedule 20.07.2012
comment
Просто хотел подтвердить, можем ли мы использовать только JSON для отправки данных с помощью push-сообщения. - person Timson; 20.07.2012
comment
нет, он должен быть инкапсулирован с помощью JSON - и, если быть точным, только json со строковыми параметрами (из-за обратной совместимости с 2.2) - person ligi; 20.07.2012
comment
Спасибо. Я сделал код для разбора JSON, и он отлично работает из моего приложения :) - person Timson; 23.07.2012

Вы действительно можете отправлять полезную нагрузку без 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

person azgolfer    schedule 20.07.2012