推送内容更改通知

Posted

技术标签:

【中文标题】推送内容更改通知【英文标题】:Push notifications on content change 【发布时间】:2018-06-26 05:01:12 【问题描述】:

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

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

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

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

【问题讨论】:

如果您使用 .NET 作为 API,那么您应该使用 SignalR 您不需要数据库,您实际上可以在您的 web-api 中创建一个 api,当添加新内容时触发该 api,然后使用该 api 调用 firebase 并非常轻松地发送通知 我无权访问 API 代码。我正在使用第 3 方 API(即流行的天气 REST API)。那么在这种情况下我该怎么办?我是否需要添加某种网关,例如调用天气 API 的 Node.js API,然后将结果返回给我的应用程序? (这样我就可以从 Node API 触发通知) 如果您无权访问 API,那么 something's 必须不断轮询它以查找更新/更改,因此它要么是您的客户端/应用程序或然后通知客户端/应用程序的服务器(例如在节点中)。您可能还应该检查 3rd-party API 的 Ts&Cs,以确保您被允许以这种方式使用它。 您可以根据显示您的通知使用firebase远程配置 【参考方案1】:

实现此目的的最佳方法是使用Firebase Cloud Functions。这将帮助您在发生有趣的事情时通知用户,在您的情况下,当有新内容可用时。您可以使用Cloud Firestore 或Firebase Realtime Database 来实现此目的。我将在回答中向您解释如何使用新的Cloud Firestore 来完成。为此,我建议您也实施Firebase Authentication。这将帮助您在发生新情况时向特定用户或一组用户发送通知。

为了实现这一点,请考虑按照以下步骤操作。

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

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

除了用户详细信息,您还需要为每个用户添加一个tokenId。你可以很简单地使用以下代码行:

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

用户文档应如下所示:

    uid1
     |
     --- userName: "John"
     |
     --- userEmail: john@email.com
     |
     --- tokenId: "e_wLukMfq..." //very long token
     |
     --- //other details

    现在,向名为notifications 的用户文档添加一个新集合,您需要在其中添加您需要发送的notificationsender,每次发生新事情时。它应该看起来像这样:

     uid1
      |
      --- userName: "John"
      |
      --- userEmail: john@email.com
      |
      --- tokenId: "e_wLukMfq..." //very long token
      |
      --- notifications (collection)
      |      |
      |      --- notificationId1
      |              |
      |              --- notificationMessage: "My Notification"
      |              |
      |              --- fromUser: "My Notification"
      |
      --- //other details
    

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

     "users/uid/notifications/notificationId"
    

出现新通知后,您可以使用sendToDevice 函数和tokenId 将通知发送给特定用户。通知将由 Android 系统处理并显示给用户。请注意,这仅在应用程序位于 background 时有效。通过实现FirebaseMessagingService,您还可以在应用位于foreground 时收到通知。

【讨论】:

谢谢,我试试看。 你达到你想要的了吗?一切都好吗? 嗨,Alex,感谢您抽出宝贵时间。实际上这是出于个人训练的目的,所以它在我的日程安排中是次要的。我之前必须为我的公司工作:D 我会及时通知你 好的,让我知道!干杯! 是的,谢谢您的宝贵时间。在您的帖子获得帮助并使用 Firebase 文档后;我终于让推送通知工作了:)

以上是关于推送内容更改通知的主要内容,如果未能解决你的问题,请参考以下文章

来自内容提供商的内容解析器推送通知

门户更改后推送通知不起作用

iOS -- 我想更改语言警报推送通知

如何取消或停止来自客户端的推送通知?

更改推送通知警报消息

在 Unity 中更改服务器端解析通知的推送通知图标