每个用户帐户的唯一Firebase示例ID

ao218c7q  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(146)

我不确定如何正确处理同一设备上的不同用户帐户,因为Firebase只为每个设备创建一个Instance-Id。
因此,我认为可以在用户注销时删除Instance-Id,并在新用户登录时创建一个新的Instance-Id。
登录时:

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> System.out.println(task.getResult().getToken()));

字符串
注销时:

FirebaseInstanceId.getInstance().deleteInstanceId()


Firebase是否确保Instance-Id是唯一的,即使它在同一设备上多次生成?我喜欢这种方法的原因是,它很容易取消订阅用户从所有的主题一次,此外,推送通知可以解决到一个特定的用户。

q3aa0525

q3aa05251#

Firebase是否确保Instance-Id是唯一的,即使它在同一设备上多次生成?
重新生成一个示例ID确实总是会得到一个唯一的值。只要您确保在用户注销时删除了示例ID,下次您将获得一个新的令牌。
为了确保令牌注册表(存储令牌的地方)不会累积太多过期令牌,请确保在用户注销时删除令牌,或者在发送消息时发现令牌不再有效时删除令牌。请参阅my answer to this question

8zzbczxx

8zzbczxx2#

如果您希望设备上的每个用户都有唯一的FCM示例ID,则应在每次注销帐户时调用FirebaseInstanceId.getInstance().deleteInstanceId()。然后在下一次FirebaseInstanceId.getInstance().instanceId调用中,您将获得一个新的唯一中介ID
但有一点你需要知道。在新线程上调用deleteInstanceId(),而不是MainThread

pb3skfrl

pb3skfrl3#

处理问题的最佳方法是使用topic消息传递。
docs
基于发布/订阅模型,FCM主题消息传递允许您向选择了特定主题的多个设备发送消息。您可以根据需要编写主题消息,FCM负责将消息可靠地路由和传递到正确的设备。
当用户登录应用程序时,您可以订阅某个主题,例如:

FirebaseMessaging.getInstance().subscribeToTopic("weather")
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            String msg = getString(R.string.msg_subscribed);
            if (!task.isSuccessful()) {
                msg = getString(R.string.msg_subscribe_failed);
            }
            Log.d(TAG, msg);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

字符串
然后,用户可以接收基于主题名称的通知。然后当用户单击注销按钮时,您可以调用以下命令:

FirebaseMessaging.getInstance().unsubscribeFromTopic("weather");

相关问题