const options = {
priority: 'high',
collapseKey: user_id
};
const deviceTokensPromise = db.ref('/users-fcm-tokens/' + user_id).once('value');
deviceTokensPromise.then(tokensSnapshot => {
if (!tokensSnapshot.hasChildren()) {
return console.log('There are no device tokens to send to.');
}
const tokens = Object.keys(tokensSnapshot.val());
console.log(tokens);
console.log(payload);
return admin.messaging().sendToDevice(tokens, payload, options).then(response => {
console.log(response);
return removeInvalidFCMTokens(tokensSnapshot, response);
});
});
我的选项中有一个折叠键字段。
运行此代码时,iPhone 会收到多个通知,所有通知都相互叠加。我希望用最新的通知取代之前的通知。
查看“交付选项”部分Firebase 的 FCM 消息文档.
Android 通过 FCM 支持“可折叠”消息行为collapse_key
,在 iOS 上通过apns-collapse-id
,并在 JavaScript/Web 上通过Topic
.
直觉上你可能会期望apns-collapse-id
设置可能会进入options
参数传入sendToMessage
您正在使用的方法。然而,这种情况并非如此。相反,尝试将其修补到payload
对象,像这样:
const patchedPayload = Object.assign({}, payload, {
apns: {
headers: {
'apns-collapse-id': user_id
}
}
});
这遵循payload
上面链接的文档中提供的格式。
一旦你构建了这个修补过的有效负载,不要忘记更新sendToDevice(tokens, payload, options)
to sendToDevice(tokens, patchedPayload, options)
.
希望这对你有用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)