Android/Firebase - 检查您是否已订阅主题

14

请问在安卓端有没有一种方法可以测试您是否已订阅某个主题?

基本上,我希望所有设备都会在安装时订阅主题,当设备首次获取令牌时。但是,设备可能无法成功订阅。FCM注册令牌应长时间安装在设备上,因此,除非清除数据、卸载/重新安装等操作,否则不应再调用onTokenRefresh()方法。

我的想法是在MainActivity中测试设备是否已订阅主题,如果没有,则尝试重新订阅。如果订阅失败,则获取新令牌并重试,以此类推。

    @Override
    public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.e(TAG, "Refreshed token: " + refreshedToken);

    // Subscribe to a topic
    Log.e(TAG, "Subscribing to topic");
    FirebaseMessaging.getInstance().subscribeToTopic("test");

那么,我可以订阅和取消订阅,但是如何检查设备是否已订阅主题?我进行了相当多的谷歌搜索,但不幸的是没有找到任何信息。

非常感谢任何/所有的帮助。谢谢!

2个回答

12

目前没有办法在客户端上检查他们是否已订阅了主题。

subscribeToTopic的行为是,如果它失败了,它会自动重新尝试订阅指定的主题(除非您的应用被杀死),否则它将立即订阅该主题。请参见我的回答这里

我认为为了确保subscribeToTopic,强制调用onTokenRefresh太过了。如果您想要,您可以在初始活动中简单地调用它,这样每次应用启动时都会发送订阅请求。


2

实际上,您可以使用此API完成此操作:https://developers.google.com/instance-id/reference/server#get_information_about_app_instances

作为IID_TOKEN,您需要FCM令牌,并在标头中传递Authentication: key=YOUR_SERVER_KEY。您可以在此处找到服务器密钥的描述:Firebase messaging, where to get Server Key?

不要忘记在URL中包含details=true作为查询参数,否则主题将不会包含在响应中。

我建议编写一个Cloud Function来封装它,这样您就不必将服务器密钥部署到客户端。


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