如何在google-services.json中添加多个project_number或sender id

8
我希望能够在我的Android应用程序中添加多个发送者ID。
来自https://developers.google.com/cloud-messaging/concept-options GCM允许多个方发送消息到同一个客户端应用程序。例如,假设客户端应用程序是一个具有多个贡献者的文章聚合器,并且每个贡献者都应该能够在发布新文章时发送消息。此消息可能包含URL,以便客户端应用程序可以下载文章。GCM使您能够让这些贡献者发送自己的消息,而不必将所有发送活动集中在一个位置上。
如何使用google-services.json配置文件实现这一点?

我会在这里回复你的评论。因为过长的评论链会导致你的帖子被删除。请继续。FCM很容易设置。干杯! - AL.
@Zyoo,你试过了吗?感觉如何? :) - AL.
@intj 我尝试了你的方法,但是出现了异常 06-23 21:24:07.009 7149-8358/com.google.firebase.quickstart.fcm D/FirebaseInstanceId: background sync failed: INVALID_SENDER, retry in 80s 06-23 21:24:51.959 7149-7149/com.google.firebase.quickstart.fcm D/MainActivity: InstanceID token: null - Zyoo
1
搞定了,这里有一个空格 "project_number": "487xxx, 102xxx",但是去掉后,令牌不为空。我会接受你的答案并在此之后写一些附加内容(使用 GCM)。 - Zyoo
太好了。 :) 顺便问一下,问题不错。干杯! :D - AL.
嗨。我刚刚浏览了一些旧的GCM帖子,希望您能接受我的答案或提供另一个解决您帖子的答案,以便它被正确标记为已回答。干杯! - AL.
4个回答

7

更新:为了避免未知问题,将采用官方推荐的方法来完成此操作,而不是使用“hacky”和非官方的方法。请参考我的回答here

实际上,文档中有关于这个主题的一部分内容:

接收来自多个发送方的消息 FCM允许多个发送方向同一客户端应用程序发送消息。例如,假设客户端应用程序是一个带有多个贡献者的文章聚合器,并且每个贡献者都应该能够在发布新文章时发送消息。此消息可能包含URL,以便客户端应用程序可以下载文章。FCM为您提供了让每个贡献者发送自己的消息的能力,而不必将所有发送活动集中在一个位置。 为实现这一点,请确保每个发送方生成自己的sender ID。有关如何获取FCM发送方ID的信息,请参阅您平台的客户端文档。在请求注册时,客户端应用程序多次获取令牌,每次在受众字段中使用不同的发送方ID。 最后,将注册令牌与相应的应用程序服务器共享(以完成FCM注册客户端/服务器握手),他们将能够使用自己的身份验证密钥向客户端应用程序发送消息。 请注意,有100个多个发送方的限制。
当客户端应用程序请求注册时,它会多次获取令牌,每次将不同的发送方ID放在受众字段中。
换句话说,您需要调用 getToken() 并传递 Sender ID 和简单的 "FCM" (例如:getToken("2xxxxx3344", "FCM")) 作为参数。您必须确保为每个需要的发送方(项目)调用此函数。
此外,请注意 getToken() 文档中的说明:
这是一个阻塞函数,因此不要在主线程上调用它。
还有一些额外需要了解的信息:
  • 它不像默认的函数那样自动重试失败。
  • 它在失败时返回 IOException。

所以,这是使用单个注册令牌完成的吗?您介意分享请求令牌的代码吗? - Zyoo
我通过Firebase控制台发送了一条消息。在通知下,选择新消息。 - AL.
1
看起来我必须使用 FCM。我现在会尝试去做。 - Zyoo
你救了我的一天。我尝试了很多方法,但都没有奏效。这个方法返回了一个令牌,我仍然可以在我的旧项目中使用。谢谢。 - Roberto
1
@Lancelot 不用谢。请注意,这只是一种hacky的方法,不建议修改google-services.json文件。干杯! - AL.
显示剩余5条评论

1

截至2016年12月,有一种非常简单、非hack的方法可以实现这一点,现在(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 官方博客


0

逗号分隔的senderID解决方案仍然有效,并且能够为2个不同的sender注册相同的token。我使用了2个不同的API密钥向该单个神奇令牌发送推送通知,并能够接收到两个API密钥的推送通知。希望它至少能持续到2020年底。因为我正在尝试在旧的GCM和FCM项目之间实现无缝过渡,这些项目面向超过100万用户。(听我说谷歌,感谢谷歌没有弃用这个伟大的解决方案)

String magicalToken = FirebaseInstanceId.getInstance().getToken("senderId, anotherSenderId", "FCM");


-2

您可以将多个发送者的单个令牌作为逗号分隔的字符串传递,然后这些发送者将能够使用公共令牌发送推送通知,请尝试调用

FirebaseInstanceId.getInstance() .getToken("senderId1,senderId2", FirebaseMessaging.INSTANCE_ID_SCOPE);

请确保从后台线程调用此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接