#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");