Firebase文档未删除

时间:2019-01-08 23:44:13

标签: android google-cloud-firestore

我将用户FCM设备令牌存储在Firebase中。当用户登录时,令牌将被添加到用户的个人资料中,如下所示:

        if (FirebaseAuth.getInstance().getCurrentUser()!=null) {

            FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {

                    DeviceToken token = new DeviceToken(instanceIdResult.getToken());

                    CollectionReference deviceTokens = mUserCollection.document(mSignedInUserID).collection("device_tokens");
                    deviceTokens.document(token.getTokenID()).set(token);

                }
            });
        }

这有效。但是,我也想在用户退出时删除该文档。我正在尝试这样做:

            FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {

                    Log.d(TAG,instanceIdResult.getToken());
                    DocumentReference deactivatedToken = mUserCollection.document(mSignedInUserID).collection("device_tokens").document(instanceIdResult.getToken());
                    deactivatedToken.delete();
                    mAuth.signOut();
                    recreate();
                }
            });

除实际删除该文档外,所有其他操作都可以使用该方法,并且log语句确认用户的当前ID与要删除的文档标题相匹配。允许对登录用户写入该位置的模拟进行返回。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

请注意,使用您的代码,用户将在删除文档之前注销。这是因为delete()是异步的(以及所有数据库操作),并且在工作完成之前立即返回。如果我不得不猜测,我想说的是,在实际发送删除操作之前,您的身份验证令牌已被清除,并且删除实际上是未经身份验证的用户。因此,您应该做的是等待删除完成才能实际注销用户。使用delete()返回的任务来知道何时完成。它的工作方式与getInstanceId()返回的任务相同。