如何在 Firebase Firestore Android 发生更改时实现通知?

2023-11-22

有两种类型的应用程序,一种由用户使用,另一种由我(即所有者)使用。因此,每当任何用户将内容(数据)添加到 Cloud Firestore 数据库时,我都希望收到通知。简而言之,如何在 Cloud Firestore 数据库发生更改时发送通知?


实现这一目标的最简单方法是使用Firebase 的云功能。这将帮助您在发生有趣的事情时通知用户,在您的情况下,当用户将内容(数据)添加到数据库时。为了使其发挥作用,您需要实施Firebase 身份验证。这将帮助您在发生新情况时向特定用户或一组用户发送通知。

因此,请考虑遵循以下步骤。

一、落实Firebase Authentication。一旦实现,就创建一个用户集合,其中每个用户都将是用户集合中的一个文档。您的数据库结构应如下所示:

Firebase-root
    |
    --- users (collection)
          |
          --- uid1 (document)
          |    |
          |    --- //user properties
          |
          --- uid2 (document)
               |
               --- //user properties

除了用户详细信息之外,您还需要为每个用户添加tokenId。您可以使用以下代码行非常简单地获得它:

String tokenId = FirebaseInstanceId.getInstance().getToken();

用户文档应该如下所示:

uid1 (document)
 |
 --- userName: "John"
 |
 --- userEmail: [email protected]
 |
 --- tokenId: "e_wLukMfq..." //very long token
 |
 --- //other specific user details

其次,在用户文档中创建一个名为的新集合notifications,您应该在其中添加需要发送给管理员的所有通知。需要的属性是notification messagesender。用户文档应如下所示:

    uid1 (document)
     |
     --- userName: "John"
     |
     --- userEmail: [email protected]
     |
     --- tokenId: "e_wLukMfq..." //very long token
     |
     --- notifications (collection)
     |      |
     |      --- notificationId1
     |              |
     |              --- notificationMessage: "My Notification"
     |              |
     |              --- fromUser: "My Notification"
     |
     --- //other details

请参阅嵌套notifications托管在用户文档下的集合。

现在你需要使用Node.js编写一个函数Cloud Functions它将侦听此引用中出现的每个新通知:

    "users/{uid}/notifications/{notificationId}"

Here是如何编写 Node.js 函数的简单示例。

一旦出现新通知,您可以使用sendToDevice函数和tokenId将通知发送给特定用户。该通知将由 Android 系统处理并显示给用户。请注意,这仅当应用程序处于background。当应用程序运行时您也可以收到通知foreground通过实施FirebaseMessagingService.

我也在我的一篇文章中解释过教程一步一步,你可以怎样发送通知当你需要的时候。

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

如何在 Firebase Firestore Android 发生更改时实现通知? 的相关文章

随机推荐

  • 如何将 facebook、twitter 和 google plus 集成到 Android 应用程序中

    我喜欢将 Facebook Twitter 和 Google plus 集成到我的应用程序中 以便使用该应用程序的用户可以更新他们的状态 因此我想知道如何做到这一点 Thanks 我强烈建议不要使用这些 SDK 因为它们包含很多错误 而且据
  • 如何获取默认 NIC 连接名称

    重要编辑 再次回到这个话题 正如您所说不应该有默认的网卡 我试图了解是否有一种方法可以检测实际连接的所有网卡 有了我的物理接口的 MAC 地址 是否有一种编程方式来获取接口名称 接口状态 等 比如我的XP机器 设备 Realtek RTL8
  • 自动递增 bigint 列?

    我想要插入表中的每一行数据都有一个 bigint ID 列 我想要 Sql 服务器生成数字 我尝试创建一个具有 bigint 列 ID 的表 我希望这是自动增量 第一个值为 1 我尝试使用 ID bigint AUTO INCREMENT
  • 将数据从 Props 传递到 vue.js 中的数据

    我有以下 vue 组件
  • 在 Rust 中使用枚举实现动态多态性

    当人们已经知道某些需要动态多态性的代码中涉及的所有有限数量的类型时 使用enum与使用相比 可以更好地提高性能Box因为后者使用动态内存分配 并且您需要使用也具有虚拟函数调用的特征对象 也就是说 与 C 中使用的等效代码相比std vari
  • 如何配置 IIS,以便在连接到 SQL Server 时使用用户的域凭据?

    我们最近发布了最新版本的 Intranet 应用程序 该应用程序现在使用 Windows 身份验证作为标准 并且需要能够使用最终用户的域凭据连接到已配置的 SQL 服务器 最近我们发现 在一些客户部署中 尽管 IIS 可以看到用户的域凭据
  • 是否可以在 .NET 4 中动态创建路由?

    在我们的应用程序中 我们使用新的 NET 4 路由系统将某些请求路由到站点的其他部分 我们只允许在深夜发布我们的网站代码 这意味着我们必须加班到很晚才能发布任何代码更改 我们经常需要创建自定义路由来支持旧内容的旧链接并将其路由到新内容 这些
  • Adobe Media Encoder 是否可以使用 ExtendScript 编写脚本?

    Adobe Media Encoder AME 是否可以编写脚本 我听人们提到它是 官方可编写脚本的 但我找不到任何对其可编写脚本的对象集的引用 有人有编写 AME 脚本的经验吗 Adobe 媒体编码器 正式 不可编写脚本 但我们可以使用扩
  • Windows 窗体:如何更改禁用标签的字体颜色

    我正在尝试为标签控件设置禁用的字体特征 我可以设置所有字体特征 大小 粗体等 但颜色被默认的窗口行为覆盖 这似乎是这两种颜色之一 如果背景颜色是透明的 则前景色与文本框禁用颜色相同 如果背景颜色设置为其他颜色 则前景色为深灰色 下图演示了该
  • SQLAlchemy:将查询结果插入到另一个表中

    所以我得到了一些结果install表 像这样 install metadata tables install results session query install
  • Activiti / Camunda 用变量改变边界计时器

    我有一个关于 Activiti Camunda 中用户任务的计时器边界事件的特殊问题 启动流程时 我使用流程变量设置计时器持续时间 并使用边界定义中的表达式来解析该变量 边界事件是在用户任务上定义的
  • Javascript - .innerHTML 更改自动关闭标签

    我正在尝试使用 Javascript 动态地将元素放入其他元素中 而无需刷新页面 它的 AJAX 部分可以工作并且功能正常 然而 由于某种未知的原因 我的代码自动关闭 这是代码片段 您可以看到它实际上并未关闭 但是在浏览器中运行代码后它被关
  • 使用 iOS 的 ExtAudioFileWrite 将音频样本缓冲区写入 aac 文件

    更新 我已经弄清楚了这一点并发布了我的解决方案作为我自己的问题的答案 如下 我正在尝试使用 AAC 格式的 ExtAudioFileWrite 将简单的音频样本缓冲区写入文件 我已经通过下面的代码实现了这一点 将单声道缓冲区写入 wav 文
  • 如何向 HTTP 客户端传递客户端证书?

    我想在服务 A 和 B 之间使用相互 SSL 身份验证 我目前正在使用 Java 实现从服务 A 传递客户端证书 我正在使用 Apache DefaultHttpClient 来执行我的请求 我能够从内部凭证管理器检索服务 A 的客户端证书
  • 我可以使用 CGAffineTransform Rotation 将视图旋转超过 360 度吗?

    我正在编写一个 iPhone 应用程序 并且我有一张图像 我想将其向外旋转 目前我的代码如下所示 包装在 beginAnimations commitAnimations 块中 scale CGAffineTransformScale CG
  • 经典 ASP - ADO 执行传递参数的存储过程

    我需要使用经典 ASP 将参数传递到存储过程中 我确实看到有些人使用 Command 对象 而其他人则不使用它 我的存储过程参数是这样的 RECORD NUMBER decimal 18 0 ErrorType nvarchar 100 I
  • 如何让 Cobertura 因代码覆盖率低而导致 M2 构建失败

    如果行或分支覆盖率低于给定阈值 我正在尝试将 WAR 项目构建配置为失败 我一直在使用这本优秀书籍第455页提供的配置Java电动工具 但没有成功 这是我的项目 Maven 2 POM 的相关片段
  • 从长度为 N 的数组中返回前 k 个值的最佳算法

    我有一个包含 n 个浮点的数组 我希望返回前 k 个 在我的例子中 n 100 k 10 该问题是否有已知的最佳解决路径 谁能提供一个C算法吗 编辑 实际上这里有两个问题 排序和未排序 我对未排序感兴趣 这应该更快 Method 1 由于k
  • 计算给定角度和长度的向量

    有没有什么办法 在javascript中 我可以调用一个带有x和y坐标以及方向 以度为单位的角度 的函数 并且它将返回一组已 移动 10px的新坐标按照原始坐标给出的方向 我环顾四周 但我所能找到的只是获得两个给定坐标的角度的方法 该函数返
  • 如何在 Firebase Firestore Android 发生更改时实现通知?

    有两种类型的应用程序 一种由用户使用 另一种由我 即所有者 使用 因此 每当任何用户将内容 数据 添加到 Cloud Firestore 数据库时 我都希望收到通知 简而言之 如何在 Cloud Firestore 数据库发生更改时发送通知