android - 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)
解决方案
推荐阅读
- python - 为什么protobuf的内存比python中的普通dict+list小?
- json - 无法在 swift 中向 API 添加参数
- angular - 在动态 Angular 组件中导入模块和调用方法
- python - 如何使用python测试txt文件中的特定行
- python-3.x - Python Pandas:支持 25 小时的日期时间索引
- javascript - 如何处理 mapWith TransformationType 中的承诺?[@nartc/automapper]
- arrays - 第二个数组中的任何事件发生后 w 分钟内一个数组中的事件数
- python - 检查用户是否登录了firebase python
- wordpress - Wordpress wp.media 在对象中返回错误的图像大小
- c# - 如何使用 VS Code 在我的 .Net Core 项目中手动安装包/引用