接收来自两个 Firebase 项目的一个 Android 应用的推送通知

Posted

技术标签:

【中文标题】接收来自两个 Firebase 项目的一个 Android 应用的推送通知【英文标题】:Receive push notifications on one android app from two Firebase projects 【发布时间】:2017-02-08 15:46:28 【问题描述】:

我有一个 android 应用,我希望它能够接收来自两个不同 Firebase 项目的推送通知。 我阅读了博客“在 Android 应用程序中处理多个 Firebase 项目”https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.html,其中谈到了“从两个不同的 Firebase 项目访问数据库”。 但是,没有关于从多个 Firebase 项目接收通知的信息。 那么,如何将我的应用与多个 Firebase 项目集成并接收来自它们的推送通知?

【问题讨论】:

只需添加一个项目,然后重复另一个项目... 这个设置你成功了吗? 我在这里回答了同样的问题***.com/a/51966084/1843984 【参考方案1】:

documentation中其实有一部分关于这个话题:

接收来自多个发件人的消息

FCM 允许多方向同一个客户端应用发送消息。例如,假设客户端应用程序是具有多个贡献者的文章聚合器,并且每个贡献者都应该能够在发布新文章时发送消息。此消息可能包含一个 URL,以便客户端应用程序可以下载文章。 FCM 无需将所有发送活动集中在一个位置,而是让您能够让这些贡献者中的每一个发送自己的消息。

为实现这一点,请确保每个发件人都生成自己的sender ID。有关如何获取 FCM 发件人 ID 的信息,请参阅您平台的客户端文档。请求注册时,客户端应用会多次获取令牌,每次在受众字段中使用不同的发件人 ID。

最后,与相应的应用服务器共享注册令牌(以完成 FCM 注册客户端/服务器握手),它们将能够使用自己的身份验证密钥向客户端应用发送消息。

请注意,有 100 个多个发件人的限制。

我认为这里令人困惑但重要的部分是:

在请求注册时,客户端应用会多次获取令牌,每次在受众字段中使用不同的发件人 ID。

换句话说,您必须调用 getToken() 并传递发件人 ID 和简单的 "FCM"(例如 getToken("2xxxxx3344", "FCM"))作为参数。您必须确保为您需要的每个发件人(项目)调用它。

另外,请注意getToken() 文档:

这是一个阻塞函数,所以不要在主线程上调用它。

一些额外的知识:

如果它像默认的那样失败,它不会自动重试。 失败时返回 IOException。

【讨论】:

在我看来,它已经覆盖了我想主要用于所有内容的配置。这不是我想要达到的目标。 @AL。这必须是调用回调onNewToken(String token) 时的方法,rt?我相信这个问题与完整实现的原始问题有关。在 GCM 的情况下,here 用示例代码清楚地提到了同样的问题。但是,FCM 的任何官方文档中都没有明确提及。你有任何官方链接可以回答我的问题吗? @garnet onNewToken() 是 new counterpart for onTokenRefresh(),与 getToken() 不同。 @AL.,是的,我知道。我担心的是,要完全回答所提出的问题,答案应该解释如何处理您提到的onNewToken(String token) 或 onTokenRefresh。请参考我之前关于 GCM 示例代码官方链接的评论。 @garnet 您提供的示例链接是可用的确切文档。 InstanceId 服务与 FirebaseInstanceId 服务使用的服务相同。干杯!【参考方案2】:

我在实施已接受的答案时遇到了一些问题,因此当我找到一个可靠的解决方案时,我继续尝试自己去做。我已经详细分享了那里的解决方案here。

【讨论】:

以上是关于接收来自两个 Firebase 项目的一个 Android 应用的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

在一个移动应用中使用来自不同 Firebase 项目的两个 Firebase 服务

订阅来自两个不同 Firebase 项目的主题

没有从firebase接收推送通知

接收来自 Firebase 的消息

Firebase 消息 - 无法接收来自订阅的通知

在 iOS (swift) 应用中,第二个 Firebase 应用的注册无法接收远程通知