我不确定如何正确处理同一设备上的不同用户帐户,因为Firebase只为每个设备创建一个Instance-Id。
因此,我认为可以在用户注销时删除Instance-Id,并在新用户登录时创建一个新的Instance-Id。
登录时:
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> System.out.println(task.getResult().getToken()));
字符串
注销时:
FirebaseInstanceId.getInstance().deleteInstanceId()
型
Firebase是否确保Instance-Id是唯一的,即使它在同一设备上多次生成?我喜欢这种方法的原因是,它很容易取消订阅用户从所有的主题一次,此外,推送通知可以解决到一个特定的用户。
3条答案
按热度按时间q3aa05251#
Firebase是否确保Instance-Id是唯一的,即使它在同一设备上多次生成?
重新生成一个示例ID确实总是会得到一个唯一的值。只要您确保在用户注销时删除了示例ID,下次您将获得一个新的令牌。
为了确保令牌注册表(存储令牌的地方)不会累积太多过期令牌,请确保在用户注销时删除令牌,或者在发送消息时发现令牌不再有效时删除令牌。请参阅my answer to this question。
8zzbczxx2#
如果您希望设备上的每个用户都有唯一的FCM示例ID,则应在每次注销帐户时调用
FirebaseInstanceId.getInstance().deleteInstanceId()
。然后在下一次FirebaseInstanceId.getInstance().instanceId
调用中,您将获得一个新的唯一中介ID但有一点你需要知道。在新线程上调用deleteInstanceId(),而不是MainThread
pb3skfrl3#
处理问题的最佳方法是使用
topic
消息传递。从docs:
基于发布/订阅模型,FCM主题消息传递允许您向选择了特定主题的多个设备发送消息。您可以根据需要编写主题消息,FCM负责将消息可靠地路由和传递到正确的设备。
当用户登录应用程序时,您可以订阅某个主题,例如:
字符串
然后,用户可以接收基于主题名称的通知。然后当用户单击注销按钮时,您可以调用以下命令:
型