如何从节点服务器发送 Firebase 云消息?

Posted

技术标签:

【中文标题】如何从节点服务器发送 Firebase 云消息?【英文标题】:How to send Firebase Cloud Messaging from a node server? 【发布时间】:2016-10-27 06:22:13 【问题描述】:

有没有办法从FCMnode.js 服务器发送通知?

我在文档中没有找到任何关于它的信息。

【问题讨论】:

【参考方案1】:

通过 Firebase 云消息传递发送消息需要调用documentation on sending downstream messages 中所述的 HTTP 端点。

这样简单的事情就可以解决问题:

var request = require('request');

function sendMessageToUser(deviceId, message) 
  request(
    url: 'https://fcm.googleapis.com/fcm/send',
    method: 'POST',
    headers: 
      'Content-Type' :' application/json',
      'Authorization': 'key=AI...8o'
    ,
    body: JSON.stringify(
       "data": 
        "message": message
      ,
        "to" : deviceId
      
    )
  , function(error, response, body) 
    if (error)  
      console.error(error, response, body); 
    
    else if (response.statusCode >= 400)  
      console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage+'\n'+body); 
    
    else 
      console.log('Done!')
    
  );

sendMessageToUser(
  "d7x...KJQ",
   message: 'Hello puf'
);

更新(2017 年 4 月):您现在还可以在 Cloud Functions for Firebase 中运行与此非常相似的代码。见https://firebase.google.com/docs/functions/use-cases#notify_users_when_something_interesting_happens

【讨论】:

谢谢!但哪个是变量 YOUR_API_KEY_HERE?我不知道如何从 FCM 控制台获取该密钥... 在控制台中,齿轮图标 > 项目设置 > 云消息传递那里您将看到您的 API 密钥(服务器密钥)。 我正在尝试这个,我没有收到错误,但我也没有看到通知。这有可能的原因吗?我尝试了一个特定的 deviceId 以及一个主题......快速入门示例使用“/topic/news”,所以我做了那个。 *** 对于 ios 顺便说一句,但我认为参数是相同的...... 您好,您是否从客户端获得了此实现的简单示例?如何获取 deviceId? 如何向所有用户(所有设备 ID)发送通知?我可以使用上述方法发送到单个设备,并且工作正常。挣扎了2-3天,到处搜索。 @FacundoLaRocca 设备 ID 是您在注册 FCM 时可以获得的特定设备的唯一 ID。您究竟是如何开发应用程序的?【参考方案2】:
//I done by this code using node- gcm module.
//We're using the express framework and the node-gcm wrapper

var express = require('express');
var gcm = require('node-gcm');
//init express
var app = express();
app.get('/push', function (req, res) 
    var message = new gcm.Message(
        data:  key1: 'hello' ,
        notification: 
            title: 'SPECOZ Offers1',
            body: 'body_data'
        
    );

    // Set up the sender with you API key, prepare your recipients' registration tokens.
    var sender = new gcm.Sender('Api_Key');
    sender.send(message, 'device_token', function (err, response) 
        if (err) 
            console.error("Error:", err);


        

        else console.log("Response:", response);
        res.send(response);
    );

);
app.listen("pass the port number");

【讨论】:

【参考方案3】:
const admin = require('firebase-admin');
  const payload =  
   notification: 
        title: 'this is title', body: 'this is body'
    ,
   data: 
           balance: 100,
          priceplanId: 1235 
  
  
const deviceToken ='yourtoekn' | ['yourtoekn'];
admin.messaging().sendToDevice(deviceToken, newpayload)
                .then((_response) => console.log(_response))
                .catch(error => console.log(error));

强调文字 您可以向 ios 和 android 设备发送通知;

【讨论】:

以上是关于如何从节点服务器发送 Firebase 云消息?的主要内容,如果未能解决你的问题,请参考以下文章

即使在发送消息后,也不会在 React 应用程序中触发 Firebase 云消息传递 onMessage

如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?

Firebase 上游云消息

Firebase 云消息传递如何在 Android 上运行

无法将iOS CriticalAlert发送到Firebase云消息传递

如何通过 Firebase 云消息发送推送通知(快速入门)?