Java 登录成功后如何返回MainActivity?
登录成功后,将返回Main2Activity,我可以反复登录。但在关闭并从最近的列表中删除应用程序后,将再次启动该应用程序。它将在MainActivity中启动。如果条件为true,则如何在之后直接将Main2Activity导航到MainActivity Main2活动代码Java 登录成功后如何返回MainActivity?,java,android,firebase,android-intent,firebase-authentication,Java,Android,Firebase,Android Intent,Firebase Authentication,登录成功后,将返回Main2Activity,我可以反复登录。但在关闭并从最近的列表中删除应用程序后,将再次启动该应用程序。它将在MainActivity中启动。如果条件为true,则如何在之后直接将Main2Activity导航到MainActivity Main2活动代码 public class Main2Activity extends AppCompatActivity { private static final String TAG = "Main2Activity";
public class Main2Activity extends AppCompatActivity {
private static final String TAG = "Main2Activity";
int AUTHUI_REQUEST_CODE = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
startActivity(new Intent(this, MainActivity.class));
this.finish();
}
}
public void loginRegister(View view) {
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build(),
new AuthUI.IdpConfig.PhoneBuilder().build()
);
Intent intent = AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setTosAndPrivacyPolicyUrls("https://example.com","https://example.com")
.setLogo(R.drawable.i789)
.build();
startActivityForResult(intent, AUTHUI_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AUTHUI_REQUEST_CODE){
if (requestCode == RESULT_OK){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Log.d(TAG, "onActivityResult: "+ user.getEmail());
if (user.getMetadata().getCreationTimestamp() == user.getMetadata().getLastSignInTimestamp()){
Toast.makeText(this, "Welcome", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Welcome back again", Toast.LENGTH_SHORT).show();
}
Intent t = new Intent(this,MainActivity.class);
startActivity(t);
this.finish();
}else{
IdpResponse response =IdpResponse.fromResultIntent(data);
if (response == null){
Log.d(TAG, "onActivityResult: the user has cancelled the sign in request");
}else {
Log.e(TAG, "onActivityResult: ",response.getError() );
}
}
}
}
}
公共类Main2活动扩展了AppCompative活动{
私有静态最终字符串TAG=“Main2Activity”;
int AUTHUI_请求_代码=1001;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
如果(FirebaseAuth.getInstance().getCurrentUser()!=null){
startActivity(新意图(this,MainActivity.class));
这个;
}
}
公共无效登录注册表(视图){
列表提供程序=Arrays.asList(
新建AuthUI.IdpConfig.EmailBuilder().build(),
新建AuthUI.IdpConfig.GoogleBuilder().build(),
新建AuthUI.IdpConfig.PhoneBuilder().build()
);
Intent=AuthUI.getInstance()
.CreateSignInEntBuilder()
.setAvailableProviders(提供程序)
.setTosAndPrivacyPolicyUrls(“https://example.com","https://example.com")
.setLogo(R.drawable.i789)
.build();
startActivityForResult(意图、授权请求代码);
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==AUTHUI\u请求\u代码){
if(requestCode==结果_确定){
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
Log.d(标记为“onActivityResult:+user.getEmail());
if(user.getMetadata().getCreationTimestamp()==user.getMetadata().getLastSignInTimestamp()){
Toast.makeText(这是“欢迎”,Toast.LENGTH_SHORT).show();
}否则{
Toast.makeText(这是“欢迎再次光临”,Toast.LENGTH_SHORT).show();
}
Intent t=新Intent(此,MainActivity.class);
星触觉(t);
这个;
}否则{
IdResponse-response=IdResponse.fromResultIntent(数据);
如果(响应==null){
Log.d(标记“onActivityResult:用户已取消登录请求”);
}否则{
Log.e(标记“onActivityResult:”,response.getError());
}
}
}
}
}
代码-主要活动
public class MainActivity extends AppCompatActivity implements FirebaseAuth.AuthStateListener {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void startLogin(){
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);
finish();
}
public void signout(View view){
AuthUI.getInstance().signOut(this);
}
@Override
protected void onStart() {
super.onStart();
FirebaseAuth.getInstance().addAuthStateListener(this);
}
@Override
protected void onStop() {
super.onStop();
FirebaseAuth.getInstance().removeAuthStateListener(this);
}
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() == null){
startLogin();
return;
}
firebaseAuth.getCurrentUser().getIdToken(true)
.addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
@Override
public void onSuccess(GetTokenResult getTokenResult) {
Log.d(TAG, "onSuccess: "+getTokenResult.getToken());
}
});
}
}
公共类MainActivity扩展AppCompatActivity实现FirebaseAuth.AuthStateListener{
私有静态最终字符串TAG=“MainActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
私有void-ogin(){
意向意向=新意向(此,Main2Activity.class);
星触觉(意向);
完成();
}
公共作废注销(视图){
AuthUI.getInstance();
}
@凌驾
受保护的void onStart(){
super.onStart();
FirebaseAuth.getInstance().addAuthStateListener(此);
}
@凌驾
受保护的void onStop(){
super.onStop();
FirebaseAuth.getInstance().removeAuthStateListener(此);
}
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
如果(firebaseAuth.getCurrentUser()==null){
startogin();
返回;
}
firebaseAuth.getCurrentUser().getIdToken(true)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(GetTokenResult GetTokenResult){
Log.d(标记“onSuccess:+getTokenResult.getToken());
}
});
}
}
我建议您创建一个启动屏幕(启动屏幕),该屏幕将在启动时首先检查用户是否从服务器登录进行身份验证。所有这些都将在后台线程中处理,ui线程将执行启动屏幕动画(如果您愿意的话)。因此,如果用户已登录,则导航到mainActivity,否则导航到loginActivity。希望这对你有帮助