如何在 Firebase 实时数据库上安排通知?

2024-04-29

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

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

问题是,当应用程序在后台运行时,如何捕获通知文本?

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

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

有谁能够帮助我?


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

如果是这样,我将使用 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)
  })

如果您真的想在后台捕获通知数据,我会发送数据通知,因为此表来自firebase_messaging 存储库状态 http://Message%20is%20stored%20by%20FCM%20and%20delivered%20to%20app%20via%20onMessage%20when%20the%20app%20is%20brought%20back%20to%20foreground,

在 Android 上,DATA 消息通过以下方式接收onMessage当应用程序 留在后台。

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

(从该表重新编辑)

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Firebase 实时数据库上安排通知? 的相关文章

随机推荐

  • Rails Heroku 应用程序错误

    我的项目在本地运行良好 我将它部署到 Heroku 我遇到了一些错误 应用程序无法在那里运行 我正在使用 Rails 4 和 postgresql 无法理解为什么会发生这种情况 在我看来 数据库没有创建 我应该在我的database yml
  • 从 C 调用带有字符串参数的 Go 函数?

    我可以从 C 调用一个没有参数的 Go 函数 按照下面的 https github com joeprivacy crefgo hello world 这通过编译go build和打印 Hello from Golang main func
  • 找不到全局类型 CallableFunction

    这是一个基本汇编脚本项目 但我在 tsconfig json 文件中遇到此错误消息 extends assemblyscript std assembly json include ts 这是我的 package json devDepen
  • 如何在 C++/CLI 中转发声明委托?

    How 以下内容无效 delegate MyDelegate ref class MyDelegate delegate void MyDelegate 申报工作如下 public delegate void MyDelegate Obje
  • Intent.ACTION_DIAL 号码以 # 结尾

    所以我尝试通过以下方式发送号码Intent ACTION DIAL以 结尾 例如 123 但是当Android Dialer应用程序启动时 只有 123 不见了 我正在使用以下代码来触发 Android 的拨号应用程序 Uri number
  • 如果文本框不为空,如何添加并显示工具提示文本框 WPF

    需要显示提示 其中包含文本字段中的数据 文本框有数据时出现提示 只需使用绑定到 ToolTipService 附加属性即可 XAML
  • API 27 中 startActivityForResult 后崩溃

    更新到 API 27 和支持库 27 0 2 后 我突然在 Crashlytics 中得到了很多这样的堆栈跟踪 Fatal Exception java lang IllegalArgumentException at android os
  • pip 安装与本地包具有相同命名空间的包

    我使用的是 Python 3 6 5 通过 miniconda 安装 我的问题是由于我正在安装一个与本地包具有相同命名空间的包 pip 安装此包后 我无法再从本地包导入 我收到一个ModuleNotFoundError错误 如果可能的话 命
  • 强制预先加载原本延迟加载的属性

    我有一个 Hibernate 对象 它的属性都是惰性加载的 大多数这些属性是其他 Hibernate 对象或 PersistentSet 现在我想强制 Hibernate 一次性加载这些属性 当然 我可以 触摸 这些属性中的每一个objec
  • 从 codeigniter 调用存储过程

    我正在使用将 mysqli 作为数据库驱动程序的 codeigniter 我试图从我的模型中调用一个简单的存储过程 但出现错误 我究竟做错了什么 Error Number 1064 You have an error in your SQL
  • BLE:使用 Android / iOS 读取长特征值

    对于正常的特征读取 仅读取 MTU 大小 20 字节 的数据 我的客户将提供更大尺寸 超过 100 字节 的特征 我看到 BLE 提供了 长读取 功能 可以读取直到达到特征的大小 https bluegiga zendesk com ent
  • 如何更新 certifi 的根证书?

    我正在使用 certifi python 模块来验证 ssl 连接 我查看了 certifi python2 7 site packages certifi cacert pem 中包含的根证书 其中一些证书已过期 我如何更新这些证书 我尝
  • RegEx 从 CSS 背景样式中提取 URL

    我有一个这种形式的字符串 url http www example com imgs backgrounds bg80 jpg repeat scroll 10 0 transparent 这是来自某个元素的 CSS 样式 该元素目前在页面
  • 在 Clojure 中递归反转序列

    我想在 Clojure 中反转序列而不使用reverse函数 并递归地执行此操作 这是我想出的 defn reverse recursively coll loop r rest coll acc conj first coll if co
  • python中根据变量类型处理数据子集

    我将以下数据存储在 csv df sample csv 中 我将列名放在名为 cols list 的列表中 df 数据 样本 df data sample pd DataFrame new video BASE SHIVER PREFER
  • 如果未登录则重定向 html 页面

    我的网页上有简单的登录表单 它使用 javascript 来登录用户并且工作正常 问题是 用户直接在地址栏中输入登陆页面 URL 他无需登录即可直接访问该页面 如果他没有登录 我想将他重定向到登录页面 以下是loding和目标页面的链接 l
  • 当按下 flutter 中编写的按钮时,有没有办法运行 python 脚本?

    本质上 我想做的是 按下我在 Flutter 中编程的按钮 当按下该按钮时 Python 脚本应该开始在我的 Android 设备上运行 我想在 python 中使用 youtube dl 用于下载 Youtube 视频 库 但我想知道是否
  • Google Cloud Build 获取身份令牌

    在我的场景中 我想在 Google Cloud Build 期间触发基于 HTTP 端点的 Google Cloud Function HTTP 请求是使用 python 3 7 slim 容器的步骤完成的 基于this https clo
  • 如何在 Chart.js 中将 Y 轴值从数字更改为字符串?

    我在用Chart js http www chartjs org 我正在尝试更改 y 轴 请参见下面的屏幕截图 我尝试填写yLabels具有字符串数组的属性 但这没有用 任何帮助 将不胜感激 jQuery document ready fu
  • 如何在 Firebase 实时数据库上安排通知?

    我正在为我工 作的公司开发一个 flutter 通信应用程序 但我遇到了两个问题 这是我需要做的 1 向用户组或特定用户发送通知 并将这些通知保存在数据库或json文件中 该列表将作为 最新新闻 出现在我的应用程序的主屏幕上 问题是 当应用