内容变更推送通知

2024-04-24

假设我有一个 Android 应用程序,它仅使用从随机 REST API 获取的内容构建 ListView。

想象一下,现在我需要在 API 上有新内容时发送推送通知。最简单的方法是什么?

我对 Android 上的推送通知过程有点困惑。我查看了 Firebase,但我不知道我是否强制需要 Firebase 上的数据库来存储结果,因为新内容可以通过 API 获得,然后触发数据库更新通知,或者如果我不需要需要数据库等

如您所见,我对此非常不清楚,因此非常感谢您的帮助。谢谢 !


实现这一目标的最佳方法是使用Firebase 云功能 https://firebase.google.com/docs/functions/use-cases。这将帮助您在发生有趣的事情时(在您的情况下,当有新内容可用时)通知用户。您可以使用云Firestore https://firebase.google.com/docs/firestore/ or Firebase 实时数据库 https://firebase.google.com/docs/database/为了达成这个。我将在我的回答中向您解释如何使用新的Cloud Firestore。为此,我建议您也实施Firebase 身份验证 https://firebase.google.com/docs/auth/。这将帮助您在发生新情况时向特定用户或一组用户发送通知。

为了实现这一目标,请考虑遵循以下步骤。

  1. 实施 Firebase 身份验证。一旦实现,就创建一个用户集合,其中每个用户都将是用户集合中的一个文档。您的数据库结构应如下所示:

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

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

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

用户文档应该如下所示:

    uid1
     |
     --- userName: "John"
     |
     --- userEmail: [email protected] /cdn-cgi/l/email-protection
     |
     --- tokenId: "e_wLukMfq..." //very long token
     |
     --- //other details
  1. 现在,将一个新集合添加到名为的用户文档中notifications,您需要在其中添加notification你需要发送和sender,每次有新的事情发生。它应该看起来像这样:

     uid1
      |
      --- userName: "John"
      |
      --- userEmail: [email protected] /cdn-cgi/l/email-protection
      |
      --- tokenId: "e_wLukMfq..." //very long token
      |
      --- notifications (collection)
      |      |
      |      --- notificationId1
      |              |
      |              --- notificationMessage: "My Notification"
      |              |
      |              --- fromUser: "My Notification"
      |
      --- //other details
    
  2. 现在你需要使用Node.js https://nodejs.org/en/编写一个函数Cloud Functions它将侦听此引用中出现的每个新通知:

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

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

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

内容变更推送通知 的相关文章

  • 使用 Fragment 在工具栏中实现 SearchView

    当前情况 我的应用程序主页由导航抽屉组成 因此我将视图作为片段加载 我的工具栏中也有搜索图标 我在中实现了它menu xml 下一步我实施了SearchView通过以下问题的答案来获取搜索图标在工具栏中实现搜索 https stackove
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • socket.io xhr 在连接缓慢时出现错误(3G 移动网络)

    当我在 3G 移动网络 互联网连接速度慢 上测试我的真实聊天应用程序时 Socket io反复断开然后重新连接 我已经记录了原因 它说 xhr post error 这提高了 transport error 然后断开连接 我可以知道什么意思
  • 如何通过我的活动在 Android 中设置铃声?

    我正在尝试找到一种方法来通过 Android 活动中的代码设置新的默认铃声 我已经将铃声下载到bytearray 最后 我设法将默认铃声设置为我下载的铃声 下面不包含下载代码 仅包含将其设置为默认铃声所需的代码 File k new Fil
  • 改造中的多个队列导致内存不足错误?

    我正在使用retrofit2 做我的项目 当我的呼叫失败时 我再次重复相同的呼叫 重复此 呼叫使我的应用程序强制关闭 当我查看日志时 我得到了错误日志 如下所示 我觉得这是由于同一呼叫的多次排队造成的 所以我在排队之前就这样做了 我打电话给
  • Android 全屏对话框确认和拒绝操作

    材料设计中的全屏对话框应该在操作栏 工具栏上有确认和拒绝操作 我的问题是 我该怎么做 显示对话框 getFragmentManager beginTransaction add R id container new MyDialogFrag
  • Ionic 2 RC0 和 Angular 2 最新的 Android 构建错误(ngc:错误:静态解析符号值时遇到错误)

    当我使用构建android时出现错误ionic build android命令 ngc 错误 静态解析符号值时遇到错误 引用本地 非导出 符号 字典 考虑导出符号 原始 ts文件中的位置14 8 解析符号TRANSLATION PROVID
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • Android -room 持久库 - DAO 调用是异步的,因此如何获取回调?

    从我读到的Room 不允许您在主线程上发出数据库查询 因为可能会导致主线程延迟 所以想象一下我正在尝试更新 UI 主线程上的文本视图 其中一些数据我将如何得到回调 让我给你举个例子 想象一下 我想将我的业务模型数据存储到一个名为 事件 的对
  • 选项卡主机内的 Android Fragment 视图状态 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Fragment 为 Android 中的每个选项卡单独的返回堆栈 https stackoverflow com questions 6987334 separate back stack f
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • 如何将 Android 添加到 Phonegap 平台版本 3

    经过大量挖掘 我相信这个问题 https stackoverflow com questions 18423444 phonegap 3 doesnt work with andriod studio与我没有添加任何用于构建phonegap
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • Android模拟器中的网络访问

    我试图通过我的 Android 应用程序访问互联网 但我既成功又失败 我在构建应用程序时启动模拟器 并且应用程序安装得很好 我可以使用浏览器访问互联网 但是 当我尝试这个小代码片段时 InetAddress inet try inet In
  • jetpack compose 是否使用drawable-night 文件夹?

    我们有一个基于视图的 Android 应用程序 其中有一些可绘制对象res drawable文件夹 以及夜间模式的对应文件夹res drawable night folder 使用旧视图时 引用可绘制对象R drawable foo从 XM
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 如何从 Cloud Functions for Firebase 文件夹读取证书文件

    我正在尝试读取 certs 文件夹下的文件 如下所示 functions certs idp public cert perm 这是我用来读取文件的代码 fs readFileSync path join dirname certs idp

随机推荐