我希望能够在我的Android应用中添加多个发件人ID。
来自https://developers.google.com/cloud-messaging/concept-options
GCM允许多方向同一客户端应用发送消息。例如,假设客户端应用程序是具有多个贡献者的文章聚合器,并且每个文章都应该能够在发布新文章时发送消息。此消息可能包含一个URL,以便客户端应用程序可以下载文章。GCM不必集中所有发送活动,而是使您能够让每个贡献者发送自己的消息。
使用google-services.json
配置文件如何实现?
更新:请参考官方和建议的方法,而不是 hacky 和非官方方法,以防止/避免避免未知问题。从我的回答中。
关于此主题的文档中实际上有一部分:
接收来自多个发件人的消息
FCM允许多方将消息发送到同一客户端应用。例如,假设客户端应用程序是具有多个贡献者的文章聚合器,并且每个贡献都应该能够在发布新文章时发送消息。此消息可能包含一个URL,以便客户端应用程序可以下载文章。FCM不必集中所有发送活动,而是使您能够让每个贡献者发送自己的消息。
为了使其成为可能,请确保每个发件人生成自己的发件人ID。有关如何获取FCM发件人ID的信息,请参见客户文档以获取您的平台。当请求注册时,客户端应用程序每次在受众字段中使用不同的发送方ID获取令牌。
最后,与相应的应用程序服务器共享注册令牌(以完成FCM注册客户端/服务器握手),他们将能够使用自己的身份验证键将消息发送到客户端应用。
请注意,有100个多个发件人的限制。
我认为这里令人困惑但重要的部分是:
请求注册时,客户端应用程序每次在受众字段中使用不同的发件人ID获取令牌。
在其他术语中,您必须调用getToken()
传递发件人ID,而"FCM"
(例如getToken("2xxxxx3344", "FCM")
)作为参数。您必须确保为呼叫此发送者(项目)。
另外,从 getToken()
文档中注释:
这是一个阻止功能,因此请勿在主线程上调用它。
一些其他好处:
- 如果它像默认一个一样失败,则不会自动重试。
- 失败时它会返回IOException。
截至2016年12月,有一种非常简单,无刺的方法可以做到这一点,现在仍然有效(2018年7月)。
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:something:android:something_else") // Required for Analytics.
.setApiKey("your apikey") // Required for Auth.
.setDatabaseUrl("https://your-database.firebaseio.com/") // Required for RTDB.
.build();
FirebaseApp.initializeApp(this /* Context */, options, "secondary");
来源:官方Firebase博客
逗号分离的senderid解决方案仍在工作,并且能够为2个不同的发件人注册相同的令牌。我通过使用2个不同的API键将推送Notif发送到该单个神奇的令牌,并能够为两个API键接收推送Notifs。希望它至少在2020年底工作。因为我试图在旧的GCM和FCM项目之间进行无缝过渡,该项目针对超过100万用户。(听我说Google,并感谢Google没有贬低这个很好的解决方案)
字符串magicaltoken = firebaseInstanceId.getInstance()。
您可以通过将它们传递给逗号分隔字符串来获得多个发件人的单个令牌,然后这些发件人将能够使用共同令牌发送推送通知,请尝试调用
firebaseInstanceId.getInstance().getToken(" senderid1,senderid2", firebasemessaging.instance_id_scope);
确保从背景线程调用此。