2016-10-26 4 views
2

Я пытаюсь создать уведомление из службы REST. Недостатком является то, что он не отправляется, хотя fcm.googleapis.com/fcm/send отвечает, что это было успешно. Это я двумя способами, первым модулем HTTP:Сгенерировать уведомление о выпуске через Firebase

var http = require('http'); 
    var options = { 
     'hostname': 'fcm.googleapis.com', 
     'path': '/fcm/send', 
     'method': 'POST', 
     'headers': { 
      'Authorization': 'key=<Key Server>', 
      'Content-Type': "application/json" 
     } 
    }; 
    var data = { 
     'to':tokenPush, 
     'notification':notification 
    }; 
    var requestHttp = http.request(options, function(res){ 
     res.setEncoding('utf8'); 
     res.on('data', function (chunk) { 
      console.log(chunk); 
     }); 
    }); 
    requestHttp.on('error', function(e) { 
     console.log('problem with request: ' + e.message); 
    }); 
    requestHttp.end(JSON.stringify(data)); 

Другой путь через команду из оболочки:

var exec = require('child_process').exec; 
    var  cmd = 'curl -X POST --header "Authorization: key=<Key Server>" '; 
    cmd += '--Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send '; 
    cmd +='-d \'{"to":"<Token Client>","notification":{"title":"Validación","body":"'+(new Date()).getTime()+'","sound":"default"}}\''; 
    console.log("====================================="); 
    console.log(cmd); 
    console.log("====================================="); 
    exec(cmd, function(error, stdout, stderr) { 
     if (error) { 
      console.log("====================================="); 
      console.error('exec error:'+error); 

     } 
     console.log("====================================="); 
     console.log('stdout: '+stdout); 
     console.log('stderr: '+stderr); 
    }); 

В обоих случаях ответ:

{«Multicast_id»: «success»: 1, «failure»: 0, «canonical_ids»: 0, «results»: [{"message_ID": ""}]}.

Код для оболочки работает правильно, когда я запускаю ее из отдельного файла с помощью команды «node».

Что я могу ошибаться?

+0

ли у вас есть ошибки в узле? У вас есть ошибка в "requestHttp var = http.request (опции, функция" заменить на "var requestHttp = http.request (опции, функция" –

+0

Извините, моя ошибка. Но игнорируя эту ошибку, скопируйте-вставьте, отправьте уведомление, хотя служба была успешной ответ Firebase. –

+0

Попробуйте код из моего ответа –

ответ

1

Используйте обертку fcm. Я использовал 'ТСМ-узел' ссылка: https://www.npmjs.com/package/fcm-node

Просто установите его с npm install fcm-node --save

Использование

var FCM = require('fcm-node'); 
 

 
var serverKey = ''; 
 
var fcm = new FCM(serverKey); 
 

 
var message = { //this may vary according to the message type (single recipient, multicast, topic, et cetera) 
 
    to: 'registration_token', 
 
    collapse_key: 'your_collapse_key', 
 
    
 
    notification: { 
 
     title: 'Title of your push notification', 
 
     body: 'Body of your push notification' 
 
    }, 
 
    
 
    data: { //you can send only notification or only data(or include both) 
 
     my_key: 'my value', 
 
     my_another_key: 'my another value' 
 
    } 
 
}; 
 

 
fcm.send(message, function(err, response){ 
 
    if (err) { 
 
     console.log("Something has gone wrong!"); 
 
    } else { 
 
     console.log("Successfully sent with response: ", response); 
 
    } 
 
});

+0

С модулем, который вы укажете, проще, но все равно не отправляет уведомления. Для вышеуказанных двух алгоритмов служба FCM также указала, что процесс был успешным. Служба FCM сообщает, что процесс является succ essful, но сообщения не отображаются на устройстве. Я думаю, что это вопрос собственной службы, которая предотвращает отправку уведомлений в течение небольшого периода времени. –

+0

Спасибо за ваш вклад. –

0

Ваш код не является чистым.

Это должно сработать. Замены CLIENT_PUSH_ID и YOUR_AUTH_KEY к реальным

var http = require('http'); 
 
var message = { 
 
    "to": "CLIENT_PUSH_ID", 
 
    "notification": { 
 
     "title": "Validación", 
 
     "body": (new Date()).getTime(), 
 
     "sound": "default" 
 
    } 
 
}; 
 
var postData = JSON.stringify(message); 
 
var options = { 
 
    hostname: 'fcm.googleapis.com', 
 
    path: '/fcm/send', 
 
    method: 'POST', 
 
    headers: { 
 
     'Content-Length': postData.length, 
 
     'Content-Type': 'application/json; charset=UTF-8', 
 
     'Authorization': 'key=YOU_AUTH_KEY' 
 
    } 
 
}; 
 

 
var requestHttp = http.request(options, function (res) { 
 
    res.setEncoding('utf8'); 
 
    res.on('data', function (chunk) { 
 
     console.log(chunk); 
 
    }); 
 
    res.on('error', function (e) { 
 
     console.log('error:' + e.message); 
 
    }); 
 
}); 
 
requestHttp.write(postData); 
 
requestHttp.end(); 
 

 
requestHttp.on('error', function (e) { 
 
    console.log(e); 
 
});

+0

Этот код не чист, чтобы предотвратить использование ключевого сервера, а токен тестового устройства был обнаружен по всему миру. Спасибо за ваш комментарий. –

+0

Я проверил этот код с моими жетонами - работает хорошо. –