推送内容更改通知

时间:2018-01-17 10:35:31

标签: android firebase android-notifications

假设我有一个Android应用程序,只需构建一个ListView,其内容来自随机REST API。

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

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

正如你所看到的,我很不清楚,所以任何帮助都非常感激。谢谢!

1 个答案:

答案 0 :(得分:3)

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

为实现此目的,请考虑按照以下步骤操作。

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

    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
    
  2. 现在,在名为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
    
  3. 现在您需要使用Node.jsCloud Functions中编写一个函数,该函数将侦听此引用中出现的每个新通知:

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

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