我正在使用firebase云功能发送用户推送通知。我不太了解JS,但我希望能够通过通知有效负载自动增加应用程序徽章编号,并为每个收到的通知增加1。这就是我现在拥有的。我已经阅读了firebase的文档,但我认为我没有足够的JS理解来弄清楚他们在描述什么。
exports.sendPushNotificationLikes = functions.database.ref('/friend-like-push-notifications/{userId}/{postId}/{likerId}').onWrite(event => {
const userUid = event.params.userId;
const postUid = event.params.postId;
const likerUid = event.params.likerId;
if (!event.data.val()) {
return;
}
// const likerProfile = admin.database().ref(`/users/${likerUid}/profile/`).once('value');
const getDeviceTokensPromise = admin.database().ref(`/users/${userUid}/fcmToken`).once('value');
// Get the follower profile.
const getLikerProfilePromise = admin.auth().getUser(likerUid);
return Promise.all([getDeviceTokensPromise, getLikerProfilePromise]).then(results => {
const tokensSnapshot = results[0];
const user = results[1];
if (!tokensSnapshot.hasChildren()) {
return console.log('There are no notification tokens to send to.');
}
const payload = {
notification: {
title: 'New Like!',
body: '${user.username} liked your post!',
sound: 'default',
badge: += 1.toString()
}
};
const tokens = Object.keys(tokensSnapshot.val());
// Send notifications to all tokens.
return admin.messaging().sendToDevice(tokens, payload).then(response => {
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => {
const error = result.error;
if (error) {
console.error('Failure sending notification to', tokens[index], error);
// Cleanup the tokens who are not registered anymore.
if (error.code === 'messaging/invalid-registration-token' ||
error.code === 'messaging/registration-token-not-registered') {
tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
}
}
});
return Promise.all(tokensToRemove);
});
});
});
提前感谢您提供任何帮助
答案 0 :(得分:1)
我猜这是问题所在:
from django.core import validators
假设您的架构中有可用的通知计数属性const payload = {
notification: {
title: 'New Like!',
body: '${user.username} liked your post!',
sound: 'default',
badge: += 1.toString()
}
};
,那么您可以这样做:
notificationCount
同样在此const payload = {
notification: {
title: 'New Like!',
body: `${user.username} liked your post!`,
sound: 'default',
badge: Number(notificationCount++) // => notificationCount + 1
}
};
上,此内容将另存为body: '${user.username} liked your post!'
。这不是你想要的行为,你应该做的是:
"user.username like your post!"
答案 1 :(得分:0)
假设这是有问题的一行:
badge: += 1.toString()
小心类型转换假设。添加" 1" +" 1"会给你" 11"而不是" 2"。为什么不尝试类似的东西:
badge: `${targetUser.notificationCount + 1}`
这假设notificationCount是架构中的一个键,并且它被键入为字符串。您需要在某个地方保留目标用户的通知计数,以便在新通知进入时可以递增。它也可以是整数,然后不需要字符串插值,即:
badge: targetUser.notificationCount + 1
另外,请注意,此处的字符串插值需要用反引号而不是单引号括起来,即:
body: `${user.username} liked your post!`
我无法告诉你的数据库中的交互是如何映射的。此方法需要持久化并更新目标用户的通知计数。