【问题标题】:How to schedule notifications on firebase realtime database?如何在 Firebase 实时数据库上安排通知?
【发布时间】:2019-05-20 07:07:36
【问题描述】:

我正在为我工​​作的公司开发 Flutter 通信应用,但遇到了两个问题。

这是我需要做的: 1) 向用户组或特定用户发送通知,并将这些通知保存在数据库或 json 文件中。此列表将作为“最新消息”显示在我的应用主屏幕上。

问题是,当应用在后台时,我如何捕获通知的文本?

2) 创建一种“与我们交谈”的方式,员工可以在其中提出问题并从董事会获得答案。

在这种情况下,我认为理想的做法是使用实​​时数据库来存储这些消息,但是如何通知用户他有新的响应?我想我可以为此使用云功能,但我不知道该怎么做。

谁能帮帮我?

【问题讨论】:

    标签: windows dart flutter


    【解决方案1】:

    您的通知会是这些用户问题的答案吗?

    如果是这样,我将使用 Firebase 实时数据库(或 Firestore)复制此场景。我会在没有通知的情况下使用 FB DB 进行一切工作,然后根据需要添加通知。

    Firebase 实时数据库允许您对这些数据执行离线访问,并在再次连接互联网时进行同步。您无需将此数据保存在其他本地数据库或 json 文件中。

    作为通知组或用户,每台设备都会有一个fcmToken(firebase 云消息传递令牌),因此您可以将这些令牌云存储在您的用户配置文件中,并使用它们来引导您的通知。

    但是,根据我的经验,为组和个人用户使用主题会容易得多。然后您的通知将被定向到主题而不是特定令牌。例如,一个给定的用户将订阅两个主题,一个名为questions.group.finance,另一个就像user.id.131231。这样,您不必维护topics 数据库,您可以根据答案详细信息推断它们。

    这也使得支持同一用户的多个设备变得容易。

    所以,你可以拥有一个具有类似结构的数据库

     questions
        + 001
          - subject: What's ...? 
          - department: Finance
          - user: 131231
          + answers
              001
                 - text: That's a ...
                 - user: 432
    

    您可以设置一个云函数,以便在创建新答案时触发。

    export const answerCreate = functions.database.ref('/questions/{questionKey}/answers/{answerKey}')
      .onCreate(async (snapshot, context) => {
        // INCOMPLETE AND UNTESTED CODE
    
        const questionKey = context.params.questionKey
        const questionSnap = await fbadmin.database().ref(`/questions/${questionKey}`).once('value')
        const question = questionSnap.val()
    
        const answerKey = context.params.answerKey
        const answer = snapshot.val()
    
        const payload = {
          notification: {
            title: question.subject,
            body: `${answer.user.name} replied: ${answer.text}`,
            // icon: question.photoURL,
          }
        }
    
        const topic = `questions.group.${question.department}`
        return fbadmin.messaging().sendToTopic(topic, payload)
      })
    

    如果你真的想在后台捕获通知数据,我会发送 DATA 通知,因为这张表来自firebase_messaging repo states

    在 Android 上,DATA 消息通过onMessage 接收,而应用 留在后台。

    在 iOS 上,DATA 消息由 FCM 存储并通过 onMessage 当应用程序回到前台时

    (从该表重新编辑)

    但是,如果应用程序终止,根本没有运行,这些 DATA 消息将丢失,如表中所述。

    这就是为什么我建议您让您的应用在没有通知的情况下运行,而不是使用它们来传输实际数据,而只是通知用户有新数据可用。通知可以将用户指向应用程序中的正确位置,但对于应用程序的主要用途而言,这不是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2018-01-10
      • 1970-01-01
      • 2020-01-02
      • 2019-11-05
      • 1970-01-01
      • 2019-12-24
      相关资源
      最近更新 更多