我正在尝试在每天的特定时间向所有用户发送个性化推送通知。我发送这些信息的方法是:
谷歌云调度程序>Cloud Pub/Sub>云功能>云通信>推送通知
这适用于一般消息,但我想对它们进行个性化设置——这意味着我需要访问特定用户的子集合(如users/userID/products/product1
(中的数据。
如上所述,使用Pub/Sub触发器无法直接获取用户ID,因此我正在尝试创建第二个函数,该函数将触发为每个用户创建通用文档,然后将其用作个性化通知的触发器:
Cloud Scheduler>Cloud Pub/Sub>第一功能为每个用户创建文档>第二功能触发个性化推送通知
我遇到的问题是,我无法找到如何使用一个函数为每个用户创建一个通用文档,我已经尝试过了:
exports.addNotificationsDocumentFunction = functions
.pubsub
.topic('notificationDocuments')
.onPublish((message, context) => {
console.log(message);
console.log('The function was triggered at ', context.timestamp);
console.log('The unique ID for the event is', context.eventId);
var data = {
createdAt : context.timestamp.toString
}
return admin.firestore()
.collection('users')
.doc({userID})
.collection('userNotifications')
.doc('latestNotification')
.set(data)
.catch(error => {
console.log('Error writing document: ' + error);
return false;
});
});
我得到以下错误:
ReferenceError: userID is not defined
at exports.addNotificationsDocumentFunction.functions.pubsub.topic.onPublish (/srv/index.js:51:19)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:132:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
是否可以使用谷歌云功能为每个用户创建一个文档?
或者,是否有更好的方法从Firestore发送带有个性化数据的每日推送通知?
Firestore没有用于同时创建、更新或删除多个文档的通配符。如果您有一个用户文档列表,并且您想为每个用户做一些事情,那么您必须查询该集合,迭代文档,并为每个用户执行工作。所以,
- 查询用户集合
- 迭代结果集中的文档
- 对于每个用户文档,在其userNotifications子集合中创建/更新一个新文档