【问题标题】:Best approach to FCM with tokens and a Cloud Function使用令牌和云函数的最佳 FCM 方法
【发布时间】:2021-06-06 05:47:27
【问题描述】:

我有一个应用程序,通过电子邮件和密码进行用户身份验证 - 一切正常。

通过使用该应用程序,用户将输入各种日期,并且我想在这些日期向该用户发送通知(例如他们的生日)。

目前,我将用户 UID 和他们输入的日期存储到一个集合(比如说“dateEntires”)中。我正在尝试为 cron 作业编写一个云函数,以每天检查集合,如果日期匹配今天,则向用户(通过他们的 UID)发送通知。我遇到的问题是注册令牌。

我已阅读我需要根据用户的注册令牌向用户发送通知。这我可能可以设置 - 但我的问题是如果他们的注册令牌更改(即他们卸载并重新安装应用程序)会发生什么?

为了实现这一点,我应该这样做吗?

  1. 将注册令牌存储在身份验证中,每次用户打开应用程序时都检查它并在必要时进行更新 - 云功能可以检查集合,如果日期与今天匹配,那么它将使用集合中的 UID在Authentication表中找到Registration Token来发送消息

  2. 将注册令牌和 UID 存储到 dateEntries 中,每次用户打开应用程序时,检查 'dateEntries' 中所有记录中该用户 UID 的注册令牌并在需要时更新

或者有更好的方法吗?

根据他们的(固定)UID而不是他们的(可变)注册令牌发送个性化通知会容易得多 - 但有人告诉我这是不可能的(?)

【问题讨论】:

    标签: flutter notifications firebase-cloud-messaging token


    【解决方案1】:

    当用户每次打开应用程序时,您需要将令牌保存到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",
                    },
                     );
    

    【讨论】:

      【解决方案2】:

      不幸的是,由于使用 Firebase 发送到单个设备的工作方式,您确实需要您所说的注册令牌。

      当您说“在身份验证范围内”时,这是否意味着您在 firebase 中有另一个名为“身份验证”的集合,或者您是在谈论保存到用户的 Firebase 身份验证声明中?我强烈建议不要使用后者,因为它会被放入身份验证令牌中。

      我建议在 Firebase 中创建一个单独的集合,以 UID 为键,并将注册令牌保存在那里。这可以称为“身份验证”或“用户”或任何对您最有意义的名称,这将是我存储任何用户特定数据的地方。

      另外,对于您的活动,我认为您可能希望拥有像 events/${User-ID}/${Event-ID}/ 这样的结构。

      【讨论】:

      • 谢谢 - 是的,这也是我作为第三选择的想法。添加一个单独的集合,仅存储 UID 和令牌 - 然后将其用作云函数的一部分以发送通知。更容易维护一个用户数据集合,然后为所有实际数据维护一个单独的集合 - 并将两者作为函数的一部分调用。谢谢!
      猜你喜欢
      • 2018-10-24
      • 2017-08-26
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多