限制GCM/FCM通知的方法:通过注销

11
有没有一种方法可以限制 Firebase 推送通知的注册?不是寻找主题。假设我有一个登录功能,我希望已登录的用户订阅推送通知。然后将 token 发送到服务器并存储。
与此同时,当用户退出时,用户也应该被注销。
那么目前是否有可用的机制?我查看了 Firebase API 文档,但没有找到相关内容。
只想知道是否错过了什么。

1
退出登录时,为什么不直接调用 unsubscribeFromTopic() 函数呢? - AL.
1个回答

11

关于何时使用deleteToken()deleteInstanceId()的区别,请参考此答案


注销应用程序实例(设备/用户)登录不可取,即使是GCM。根据GCM文档

开发人员不应注销客户端应用程序作为注销或在用户之间切换的机制,原因如下:

  • 注册令牌与特定已登录的用户无关。如果客户端应用程序注销然后重新注册,则应用程序可以接收相同的注册令牌或不同的注册令牌。

  • 注销和重新注册可能需要多达五分钟才能传播。在此期间,由于未注册状态,消息可能会被拒绝,而且消息可能会发给错误的用户。

如果您仍想继续,请仍可参考上述文档。

注销和取消订阅

客户端应用程序可以使用三种方法停止从应用程序服务器接收消息和/或主题订阅:

  • InstanceID deleteToken(),并将audienc设置为应用程序服务器的发送者ID,scope设置为GCM。这将停止来自特定应用程序服务器的消息(包括主题消息)

  • InstanceID deleteID()。这将停止所有上一次注册和所有应用程序服务器的主题订阅的消息

  • GCMPubSub unsubscribe()。这将停止指定应用程序服务器的特定主题的主题消息

对于FCM,应该使用FirebaseInstanceId


是的,这是正确的,但是话题是关于分组的。例如,体育运动。使用话题的目的是向一组用户传达信息。但这不是我想要的。我想管理单个用户。如果我想与单个用户通信,可以通过令牌实现。但是假设用户已注销,则通信应该是不可能的。 - Hashan Seneviratne
@HashanSenevirante 您的意思是完全注销用户吗? - AL.
我把术语搞混了。正确的术语是设备注册。这正是我想知道的。非常感谢AL。 - Hashan Seneviratne
deleteToken 不起作用,至少对于 FCM(即使使用此方法,消息仍然会继续到来)。deleteId 已经不存在了。unsubscribe 仅适用于主题,这可能并不总是一个解决方案(对我来说不是)。我是否遗漏了什么?请查看我的问题:https://dev59.com/NFgQ5IYBdhLWcg3wLQ2W - Michał Klimczak
为确保消息发送给指定用户:应用服务器可以维护当前用户和注册令牌之间的映射关系。 客户端应用程序可以检查以确保接收到的消息与已登录用户匹配。 - Dan Alboteanu
1
有人能否确认在切换到 FCM 后注销应用程序实例仍然不被推荐? - BabyishTank

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