使用令牌和 Cloud Function 的最佳 FCM 方法
Best approach to FCM with tokens and a Cloud Function
我有一个应用程序,通过电子邮件和密码进行用户身份验证 - 一切正常。
通过使用该应用程序,用户将输入各种日期,在这些日期我想向该用户发送通知(例如他们的生日)。
目前我将用户 UID 和他们输入的日期存储到一个集合中(比方说 'dateEntires')。我正在尝试为 cron 作业编写一个云函数以每天检查集合,如果日期与今天匹配,则向用户(通过他们的 UID)发送通知。我遇到的问题是注册令牌。
我了解到我需要根据用户的注册令牌向用户发送通知。这我可能会设置 - 但我的问题是如果他们的注册令牌发生变化(即他们卸载并重新安装应用程序)会发生什么?
为了实现这个我应该吗?
将注册令牌存储在身份验证中,每次用户打开应用程序时检查它并在必要时更新 - 云功能可以检查集合,如果日期与今天匹配,那么它将使用 Collection 中的 UID 在 Authentication table 中找到 Registration Token 以发送消息
将Registration Token和UID存储到dateEntries中,每次用户打开应用时,检查'dateEntries'中所有记录中的Registration Token是否为这个用户的UID,并在需要的地方更新
或者有更好的方法吗?
根据他们的(固定)UID 而不是他们的(可变)注册令牌发送个性化通知会容易得多 - 但有人告诉我这是不可能的 (?)
您需要在用户每次打开应用时将令牌保存到CloudFirestore
数据库中。然后在 Cloud functions
查询令牌并使用这样的代码将通知发送给特定用户:
//here you will query the specific user to get the token
var token = //get the token from Firestore
var payload = admin.messaging.MessagingPayload = {
notification: {
title: senderName,
body: message,
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK',
},
"data": {
"sender": sender,
"senderName": senderName,
"gender": gender,
"fullName": fullName,
"message": message
}
admin.messaging().sendToDevice(
token,
payload,
{
contentAvailable: true,
priority: "high",
},
);
不幸的是,由于使用 Firebase 发送到单个设备的工作方式,您确实需要您所说的注册令牌。
当您说“在身份验证中”时,这是否意味着您在 firebase 中有另一个名为“身份验证”的集合,或者您是在谈论保存到用户的 Firebase 身份验证声明中?我强烈建议不要使用后者,因为后者会被放入授权令牌中。
我建议在 Firebase 中创建一个以 UID 为键的单独集合,并将注册令牌保存在那里。这可以称为“身份验证”或“用户”或任何对您来说最有意义的名称,这将是我存储任何用户特定数据的地方。
此外,对于您的活动,我认为您可能希望采用 events/${User-ID}/${Event-ID}/
.
这样的结构
我有一个应用程序,通过电子邮件和密码进行用户身份验证 - 一切正常。
通过使用该应用程序,用户将输入各种日期,在这些日期我想向该用户发送通知(例如他们的生日)。
目前我将用户 UID 和他们输入的日期存储到一个集合中(比方说 'dateEntires')。我正在尝试为 cron 作业编写一个云函数以每天检查集合,如果日期与今天匹配,则向用户(通过他们的 UID)发送通知。我遇到的问题是注册令牌。
我了解到我需要根据用户的注册令牌向用户发送通知。这我可能会设置 - 但我的问题是如果他们的注册令牌发生变化(即他们卸载并重新安装应用程序)会发生什么?
为了实现这个我应该吗?
将注册令牌存储在身份验证中,每次用户打开应用程序时检查它并在必要时更新 - 云功能可以检查集合,如果日期与今天匹配,那么它将使用 Collection 中的 UID 在 Authentication table 中找到 Registration Token 以发送消息
将Registration Token和UID存储到dateEntries中,每次用户打开应用时,检查'dateEntries'中所有记录中的Registration Token是否为这个用户的UID,并在需要的地方更新
或者有更好的方法吗?
根据他们的(固定)UID 而不是他们的(可变)注册令牌发送个性化通知会容易得多 - 但有人告诉我这是不可能的 (?)
您需要在用户每次打开应用时将令牌保存到CloudFirestore
数据库中。然后在 Cloud functions
查询令牌并使用这样的代码将通知发送给特定用户:
//here you will query the specific user to get the token
var token = //get the token from Firestore
var payload = admin.messaging.MessagingPayload = {
notification: {
title: senderName,
body: message,
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK',
},
"data": {
"sender": sender,
"senderName": senderName,
"gender": gender,
"fullName": fullName,
"message": message
}
admin.messaging().sendToDevice(
token,
payload,
{
contentAvailable: true,
priority: "high",
},
);
不幸的是,由于使用 Firebase 发送到单个设备的工作方式,您确实需要您所说的注册令牌。
当您说“在身份验证中”时,这是否意味着您在 firebase 中有另一个名为“身份验证”的集合,或者您是在谈论保存到用户的 Firebase 身份验证声明中?我强烈建议不要使用后者,因为后者会被放入授权令牌中。
我建议在 Firebase 中创建一个以 UID 为键的单独集合,并将注册令牌保存在那里。这可以称为“身份验证”或“用户”或任何对您来说最有意义的名称,这将是我存储任何用户特定数据的地方。
此外,对于您的活动,我认为您可能希望采用 events/${User-ID}/${Event-ID}/
.