在代码中使用FirebaseUI的最新版本替换AuthUI,然后使用startActivityForResult()方法。
以下是实现解决方法的示例代码:
// 导入FirebaseUI import com.firebase.ui.auth.AuthUI; import com.firebase.ui.auth.FirebaseAuthUIActivityResultContract; import com.firebase.ui.auth.data.model.FirebaseAuthUIAuthenticationResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser;
public class MainActivity extends AppCompatActivity {
private static final int RC_SIGN_IN = 123;
// 创建FirebaseUI登录契约
private final FirebaseAuthUIActivityResultContract signInLauncher = new FirebaseAuthUIActivityResultContract(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(
Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
))
.build()) {
@NonNull
@Override
protected Intent createIntent(@NonNull Context context) {
return AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(
Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()
))
.build();
}
@Override
protected void parseResult(
int resultCode,
@Nullable Intent intent,
@NonNull FirebaseAuthUIAuthenticationResult outcome) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// 处理登录成功的情况
Toast.makeText(
this, "欢迎 " + user.getDisplayName() + "!", Toast.LENGTH_LONG)
.show();
} else {
// 处理登录失败的情况
Toast.makeText(this, "登录失败...", Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 启动FirebaseUI登录流程
ActivityResultLauncher launcher = registerForActivityResult(signInLauncher,
outcome -> {
// 在此处处理登录结果
});
launcher.launch(null);
}
}
在上面的示例代码中,我们使用了FirebaseUI的最新版本,创建了一个FirebaseUI登录契约,并使用registerForActivityResult()方法启动了登录流程。当登录完成后,我们可以在parseResult()方法中处理登录成功或失败的情况。