我想从我的 Firebase 数据库中的以下路径获取我所有 FCM 用户 iOS 设备令牌的集合:
BootCamp/Notifications/iOS
在此位置,将创建一个 autoIDChild 以将用户的设备令牌存储为"deviceToken"。
我一直在尝试遵循此链接中的cloud_functions示例,但由于我的用例不同,因此很难弄清楚。这是我在JS中的云函数代码:
exports.iOSPush = functions.database.ref('/BootCamp/Bulletins/date').onWrite((snapShot, context) =>{
let tokensSnapShot
let tokens
//here, I attempt to get access to all iOS tokens on my server
const getTokens = admin.database().ref('/BootCamp/Notifications/iOS/{key}').once('value');
return Promise.all([getTokens]).then( (results) => {
tokensSnapShot = results[0]
tokens = Object.keys(tokensSnapShot)
const payload = {
notification:{
title: 'congrats it works',
body: 'Cloud function noti for ios',
sound: 'default',
badge: '1'
}
};
//tokens value in the console log is: "node_,ref_,index_". I was expecting an array of tokens:/
return admin.messaging().sendToDevice(tokens, payload)
})
});
如何在服务器上访问这些 iOS 令牌?
我终于想到,我必须将 childPath 命名为与设备令牌相同的名称,而不是随机生成的 childID。
请检查此示例:
return Promise.all([admin.database().ref(`/users/${user}/account/tokensArray`).once('value')]).then(results => {
const tokens = results[0];
if (!tokens.hasChildren()) return null;
let payload = {
notification: {
title: 'title',
body: 'message',
icon: 'icon-192x192.png'
}
};
const tokensList = Object.keys(tokens.val());
return admin.messaging().sendToDevice(tokensList, payload);
});