首页 > 解决方案 > Android:将匿名帐户转换为 Google 或 Facebook 帐户

问题描述

我一直在关注本教程:https ://firebase.google.com/docs/auth/android/anonymous-auth

我的应用程序允许用户以 Firebase 匿名用户的身份匿名登录。但我也有一个通过Multiple Auth Provider的登录流程。现在,我的用户根据他们的 firebase 自动生成的匿名 ID 保存了一些数据。因此,对于以前以匿名用户身份存储数据的人,我希望将其转移到新登录的数据中。

我的数据使用 dataItem 映射到 userid/uid。

这是我用来登录用户的代码:

    private void linkAnonymousAccount(AuthCredential credential) {
        mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener((Executor) this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        goToMainActivity();
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(MainActivity.getInstance(), "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
}

这是生成凭据的代码:

if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        currentUser = mAuth.getCurrentUser();
        if (response != null && response.getUser().getProviderId().equals(FacebookAuthProvider.PROVIDER_ID)) {
            if (resultCode == RESULT_OK) {
                try {
                    String scope = "oauth2:" + Scopes.EMAIL + " " + Scopes.PROFILE;
                    accessToken = AccessToken.getCurrentAccessToken().toString();
                    Log.d(TAG, "accessToken:" + accessToken);

                    AuthCredential credential = FacebookAuthProvider.getCredential(accessToken);
                    userEmail = currentUser.getEmail();
                    userName = currentUser.getDisplayName();
                    linkAnonymousAccount(credential);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else if (response != null && response.getUser().getProviderId().equals(GoogleAuthProvider.PROVIDER_ID)){
            if (resultCode == RESULT_OK) {
                try {
                        String scope = "oauth2:" + Scopes.EMAIL + " " + Scopes.PROFILE;
                        accessToken = mAuth.getAccessToken(true).toString();
                        Log.d(TAG, "accessToken:" + accessToken);
                        AuthCredential credential = GoogleAuthProvider
                                .getCredential(accessToken, null);
                        userEmail = currentUser.getEmail();
                        userName = currentUser.getDisplayName();
                        linkAnonymousAccount(credential);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
              }
        }
 }

PS Firestore 合集

Firestore 自动生成的 id -> (name, uid)

例子:

abcdelfj -> (himanshu, xcvdf)

标签: androidfirebaseandroid-studiogoogle-cloud-firestore

解决方案


推荐阅读