windows - 如何在 firebase 实时数据库上安排通知?

标签 windows dart flutter

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

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

问题是,当应用程序处于后台时,我如何捕获通知文本?

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

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

谁能帮帮我?

最佳答案

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

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

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

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

但是,根据我的经验,将主题用于群组和个人用户会容易得多。然后你的通知将被定向到主题而不是特定的标记。例如,给定用户会订阅两个主题,一个名为 questions.group.finance,另一个名为 user.id.131231。这样,您就不必维护主题 数据库,您只需根据答案的详细信息进行推断即可。

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

因此,您可以拥有一个具有类似结构的数据库

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

您还可以设置一个 Cloud Function,以便在创建新答案时触发。

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)
  })

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

On Android, DATA messages are received through onMessage while app stays in the background.

On iOS, DATA messages are stored by FCM and delivered to app via onMessage when the app is brought back to foreground

(从该表重新编辑)

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

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

关于windows - 如何在 firebase 实时数据库上安排通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53857186/

相关文章:

flutter - flutter 文本的宽度和高度与父项匹配

android - 如何从 ListTile 领先属性中删除固有填充?前导属性容器的填充颜色

xml - 如何在Flutter中将远程xml文件转换为字符串?

windows - 如何在文件所有行的最后一个和最后一个单词之前插入逗号?

windows - 如何使用 Ansible 对 Windows Docker Windows 容器内运行的 Spring Boot 应用程序进行运行状况检查?

c++ - 如何将输入焦点设置到 Qt 中显示的对话框?

dart - 如何修复 Flutter 本地身份验证的平台异常错误 "auth_in_progress"?

windows - 在 Windows 中获取进程的私有(private)字节峰值值

dart - 用红石批处理URL

dart - 尝试从列表中删除对象时迭代期间的并发修改