【发布时间】:2018-09-03 01:35:19
【问题描述】:
在我的应用中,当用户创建新帖子时,我会向该用户的关注者发送推送通知。正如您在下面的代码中看到的,我需要从每个关注者的个人资料中查询一些额外的设置,以获取他们的推送令牌并检查一些额外的通知设置。如果用户拥有大量关注者(即 1000),我担心每个用户的个人资料的查询可能会成为瓶颈。
解决这个问题的最佳方法是什么?
// The cloud function to trigger when a post is created
exports.newPost = functions.database.ref('/posts/{postId}').onCreate(event => {
const postId = event.params.postId;
const post = event.data.val();
const userId = post.author;
let tokens = [];
let promises = [];
return admin.database().ref(`/followers/${userId}`).once('value', (followers) => {
followers.forEach((f) => {
let follower = f.key;
promises.push(
admin.database().ref(`users/${follower}`).once('value')
);
});
})
.then(() => {
return Promise.all(promises).then((users) => {
users.forEach((user) => {
const userDetails = user.val();
if (userDetails.post_notifications) {
if(userDetails.push_id != null) {
tokens.push(userDetails.push_id);
}
}
})
})
})
.then(() => {
if (tokens.length > 0) {
const payload = {
notification: {
title: 'New Post!',
body: 'A new post has been created'
}
};
// Send notifications to all tokens.
return admin.messaging().sendToDevice(tokens, payload);
}
});
})
编辑:
我们考虑过使用主题。但是我们不确定我们如何仍然可以让我们的自定义通知设置与主题一起使用。这是我们的困境。
我们有多个可以创建通知的操作,并且我们为应用中的每种通知提供单独的开关,以便用户可以选择他们想要关闭的通知类型。
假设用户 A 关注用户 B。我们可以为用户 A 订阅“用户 B 的主题”,因此每当用户 B 执行向他/她的关注者发送通知的操作时,我都可以向订阅的用户发送通知“用户 B 主题”。
因为我们在应用中有多个通知开关,并且当用户 A 更改他/她的设置,他们不希望收到新帖子的通知但仍希望收到他/她关注的用户的其他类型的通知时,我们无法弄清楚在这种情况下我们如何使用主题。
【问题讨论】:
-
你不能使用主题吗?
-
@PeterHaddad 我已经编辑了问题并解释了为什么我们没有使用主题。也许您可以根据我写的关于使用主题的内容进行更多详细说明。
标签: javascript firebase firebase-cloud-messaging google-cloud-functions