1
您好,我希望将APN发送到我的应用程序。我成功地能够生成通知并将它们发送到我的应用程序。NodeJS通过Firebase将APN发送到应用程序
我的问题是,服务器在一个块中相当频繁地发送通知。我猜测我的脚本算法有问题。
我想要做什么:
我想通知中每有一个在某条信息的评论时发送给设备。我想从Firebase数据库中显式获取用户名和评论。
我附上服务器脚本:
var firebase = require("firebase");
var once = require("once");
const apn = require('apn');
var config = {
apiKey: "<key>",
authDomain: "<domain>",
databaseURL: "<url>",
projectId: "<id>",
storageBucket: "<bucket>",
messagingSenderId: "<ID>"
};
firebase.initializeApp(config);
let options = {
token: {
key: "<p8 file>",
keyId: "<key>",
teamId: "<team>"
},
production: false
};
let apnProvider = new apn.Provider(options);
// Prepare the notifications
let notification = new apn.Notification();
notification.expiry = Math.floor(Date.now()/1000) + 24 * 3600; // will expire in 24 hours from now
notification.badge = 3;
notification.sound = "default";
notification.topic = "<My bundle ID>";
notification.payload = {'messageFrom': 'me'};
var author;
var dtoken;
var spotter;
var comment;
var database = firebase.database();
var postref = database.ref("posts").orderByChild("gen_notif").equalTo("yes").on("value", function (snapshot) {
var key;
var deviceToken;
console.log("-------------------Post Ids----------------------")
snapshot.forEach(function (childSnapshot) {
key = childSnapshot.key
author = childSnapshot.val()["author"];
console.log(key)
var newref = database.ref("posts/" + childSnapshot.key + "/comment").on('child_added', function(snapy){
console.log(snapy.val())
console.log("-----------------comment Keys----------------------")
snapy.forEach(function(s){
var spotuserkey = s.key
comment = s.val()
console.log(spotuserkey)
var spotuser = database.ref("users/"+ spotuserkey +"/credentials/name").on('value', function(spottersnap){
console.log("-----------------User Key-----------------------")
spotuser = spottersnap.val()
console.log(spotuser)
var tokenref = database.ref("device/"+author+"/token").once('value', function(snap){
console.log("-----------------device token---------------------")
deviceToken = snap.val()
console.log(deviceToken)
notification.alert = {
"title": "You Got Spotted",
"body": spotuser + " Spot you " + comment
};
apnProvider.send(notification, deviceToken).then(result => {
console.log(result["failed"][0]["response"]);
});
})//tokenref end
})//spotteref end
}); //snapy forEach end
})//newref end
}); //snapshot forEach end
}); //postref end
apnProvider.shutdown();
这看起来很完美。但我在剧本中犯了一个错误。感谢您的帮助。一旦我完成整合,我会更新你。干杯队友 –
太棒了!是的,只是让我知道,如果一切正常,并随时问我是否可以帮助你;)为你的项目祝你好运! – Alex
嘿,我可能会遇到问题。我们在这里使用云功能。这似乎不适用于我。我得到'Firebase配置变量不可用。请使用最新版本的Firebase CLI部署此功能。尽管我已经安装了Firebase CLI。我错过了什么吗? –