отправка узла-gcm успешно, но я не знаю, как получить данные со стороны клиента

#android #node.js #google-cloud-messaging

#Android #node.js #google-cloud-обмен сообщениями

Вопрос:

Итак, я отправляю на стороне сервера вот так, используя node-gcm
(https://github.com/ToothlessGear/node-gcm ):

 var gcm = require('node-gcm');

var message = new gcm.Message({
    collapseKey: 'demo',
    delayWhileIdle: true,
    timeToLive: 3,
    data: {
        type: 'pong',
        message: 'Hello Android!'
    }
});

var sender = new gcm.Sender(myAPIKey);
var registrationIds = [aDoc.registrationId];

sender.send(message, registrationIds, 4, function (err, result) {
    console.log(result);
});
  

А затем на стороне клиента, в моем BroadcastReceiver, я получаю распечатку сообщения Logcat и уведомление о получении, но дополнительные данные (из intent.getStringExtra(«data») равно нулю. Как мне получить их правильно? Я нигде не могу найти, как это сделать. Регистр регистрации работает отлично.

 @Override
protected void onHandleIntent(Intent intent) {
    String action = intent.getAction();
    Log.i(TAG, "GCM Received");

    switch(action){
    case GCM.ACTION_REGISTRATION:
        String registrationId = intent.getStringExtra(GCM.KEY_REG_ID);
        Log.i(TAG, "action received: registration: "   registrationId);
        ...
        break;
    case GCM.ACTION_RECEIVE:
        String extras = intent.getStringExtra("data");
        Log.v(TAG, ""   extras);
        ...
...
  

дополнительно постоянно равно нулю

Ответ №1:

С помощью экспериментов я решил свою проблему. Вместо прямого доступа к объекту данных, node-gcm напрямую добавляет пары ключ-значение в дополнения intent:

Неправильно:

 // returns null
String dataJson = intent.getStringExtra("data");
  

Правильно:

 // returns "pong"
String type = intent.getStringExtra("type");