【问题标题】:push notifications to a group using Firebase functions使用 Firebase 函数向群组推送通知
【发布时间】:2018-05-31 08:41:24
【问题描述】:

我正在开发一个使用 firebase 进行消息传递的应用。当群组中有新消息时,我想使用函数发送推送通知。不幸的是,我对 node.js 的经验为零,因为我没有 CS 背景并且只有几个月的编码经验。

我试图从我能找到的教程中拼凑起来,但我什至不确定我是否朝着正确的方向前进。

这适用于 iOS 应用程序,如果有任何区别的话

这是我的火力基地结构

这是我目前所拥有的

let functions = require('firebase-functions');
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendPush = functions.database.onWrite(event => {
let projectStateChanged = false;
let projectCreated = false;
let projectData = event.data.val();

if (!event.data.previous.exists()) {
    projectCreated = true;
}
if (!projectCreated && event.data.changed()) {
    projectStateChanged = true;
}
var valueObject = event.data.val();

return loadUsers().then(users => {
    let tokens = [];
    for (let user of users) {
        tokens.push(user.pushToken);
    }
    let payload = {
        notification: {
            title: valueObject.RealName,
            body: valueObject.MessageBody,
            sound: 'default',
        }
    };
    return admin.messaging().sendToDevice(tokens, payload);
});
 });
function loadUsers() {
let dbRef = event.data.ref.parent.parent.ref('/GroupMembers/');
let defer = new Promise((resolve, reject) => {
    dbRef.once('value', (snap) => {
        let data = snap.val();
        let users = [];
        for (var property in data) {
            users.push(data[property]);
        }
        resolve(users);
    }, (err) => {
        reject(err);
    });
});
return defer;

}

【问题讨论】:

    标签: ios node.js firebase firebase-realtime-database firebase-cloud-messaging


    【解决方案1】:

    这是最终的工作代码

    let functions = require('firebase-functions');
    let admin = require('firebase-admin');
    admin.initializeApp(functions.config().firebase);
    // console.log(functions.database.ref('/{pushId}/GroupMembers'));
    var pushID = ''
    exports.sendPush = functions.database.ref('/{pushId}/messages/{messageID}').onWrite(event => { //THIS IS NOW CORRECT!!
    
        let projectData = event.data.val();  // this is the actual message data
        // console.log(event.data.val());
    
        // console.log(event.params);//pushId and messageID
        pushID = event.params.pushId;
        // console.log(pushID);
    
        return loadUsers().then(users => {
    
            let tokens = [];
    
            for (let user of users) {
                if (user.pushToken != projectData.PushToken){
                    tokens.push(user.pushToken);
                }
    
            }
            let payload = {
                notification: {
                    title: projectData.RealName,
                    body: projectData.MessageBody,
                    sound: 'SnowSocialNotificationTone.wav',
                }
            };
            return admin.messaging().sendToDevice(tokens, payload);
        });
    });
    function loadUsers() {
        // console.log('started loadUsers()');
    
        let dbRef = admin.database().ref(`/${pushID}/GroupMembers`);
    
        let defer = new Promise((resolve, reject) => {
            dbRef.once('value', (snap) => {
                let data = snap.val();
                console.log(snap.val());
                let users = [];
    
                for (var property in data) {
                    users.push(data[property]);
                }
                resolve(users);
            }, (err) => {
                reject(err);
            });
        });
        return defer;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多