2017-01-08 105 views
1

我使用Firebase将Google和Facebook登录集成到了我的应用中。我想在用户使用他的Facebook或Google ID成功登录后自动启动另一个活动,并且下次用户打开该应用程序时,如果他没有注销,他应该自动重定向到主页。Firebase Facebook和Google登录

  1. 对于谷歌,它工作正常,但对于Facebook登录按钮的文字是越来越改为“登录”,但它不被重定向到首页。
  2. 我也想限制用户一次仅使用1个登录方法。我是 的意思是,如果他从Facebook登录,他不应该能够从谷歌登录,反之亦然。

任何人都可以帮忙吗?下面是我的代码:

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

import com.example.aamir.myapplication.R; 
import com.facebook.AccessToken; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.login.LoginManager; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 
import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthCredential; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FacebookAuthProvider; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser; 
import com.google.firebase.auth.GoogleAuthProvider; 

public class homeActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 
    // [START declare_auth] 
    private static FirebaseAuth mAuth; 
    ProgressDialog mProgressDialog; 
    private static final int RC_SIGN_IN = 9001; 
    // [END declare_auth] 
    private static final String TAG = homeActivity.class.getSimpleName(); 
    // [START declare_auth_listener] 
    private FirebaseAuth.AuthStateListener mAuthListener; 
    // [END declare_auth_listener] 
    private GoogleApiClient mGoogleApiClient; 
    private CallbackManager mCallbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_home); 
     mProgressDialog = new ProgressDialog(homeActivity.this); 
     mProgressDialog.setIndeterminate(true); 
     mProgressDialog.setTitle("Logging in"); 
     mProgressDialog.setMessage("Please Wait"); 
     mProgressDialog.setIcon(android.R.drawable.ic_dialog_email); 
     // [START initialize_auth] 
     // Initialize Firebase Auth 
     mAuth = FirebaseAuth.getInstance(); 
     // [END initialize_auth] 
     // [START initialize_fblogin] 
     // Initialize Facebook Login button 
     mCallbackManager = CallbackManager.Factory.create(); 
     LoginButton loginButton = (LoginButton) findViewById(R.id.fb_btn); 
     loginButton.setReadPermissions("email", "public_profile"); 
     // [START auth_state_listener] 
     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
        Intent intent = new Intent(homeActivity.this, StaggeredViewActivity.class); 
        startActivity(intent); 

       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       // [START_EXCLUDE] 

       // [END_EXCLUDE] 
      } 
     }; 
// [END auth_state_listener] 
     // [START config_signin] 
     // Configure Google Sign In 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 
     // [END config_signin] 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(homeActivity.this, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

     //Google Button Handle 
     findViewById(R.id.google).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
       startActivityForResult(signInIntent, RC_SIGN_IN); 
      } 
     }); 



     loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.d(TAG, "facebook:onSuccess:" + loginResult); 
       handleFacebookAccessToken(loginResult.getAccessToken()); 

      } 

      @Override 
      public void onCancel() { 
       Log.d(TAG, "facebook:onCancel"); 
       // [START_EXCLUDE] 
       Toast.makeText(homeActivity.this, "Cancelled", Toast.LENGTH_SHORT).show(); 
       // [END_EXCLUDE] 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d(TAG, "facebook:onError", error); 
       // [START_EXCLUDE] 
       Toast.makeText(homeActivity.this, "Some Error Occured", Toast.LENGTH_SHORT).show(); 
       // [END_EXCLUDE] 
      } 
     }); 
     // [END initialize_fblogin] 
    } 

    // [START on_start_add_listener] 
    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 
    // [END on_start_add_listener] 

    // [START on_stop_remove_listener] 
    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 
    // [END on_stop_remove_listener] 


    // [START on_activity_result] 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 


     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       // Google Sign In was successful, authenticate with Firebase 
       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuthWithGoogle(account); 
      } else { 
       // Google Sign In failed, update UI appropriately 
       // [START_EXCLUDE] 
       Toast.makeText(this, "Google Sign in Failed", Toast.LENGTH_SHORT).show(); 
       // [END_EXCLUDE] 
      } 



     } 
     else{ 
      // Pass the activity result back to the Facebook SDK 
      mCallbackManager.onActivityResult(requestCode, resultCode, data); 
     } 

     if(mGoogleApiClient!=null && mGoogleApiClient.isConnected()){ 
      Auth.GoogleSignInApi.signOut(mGoogleApiClient); 
     } 

    } 

    // [END on_activity_result] 
    // [START auth_with_google] 
    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
     Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); 
     // [START_EXCLUDE silent] 
     mProgressDialog.show(); 
     // [END_EXCLUDE] 

     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Log.w(TAG, "signInWithCredential", task.getException()); 
          Toast.makeText(homeActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // [START_EXCLUDE] 
         mProgressDialog.dismiss(); 
         // [END_EXCLUDE] 
        } 
       }); 
    } 

    // [END auth_with_google] 
    // [START auth_with_facebook] 
    private void handleFacebookAccessToken(AccessToken token) { 
     Log.d(TAG, "handleFacebookAccessToken:" + token); 
     // [START_EXCLUDE silent] 
     mProgressDialog.show(); 
     // [END_EXCLUDE] 

     AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 


         // [START_EXCLUDE] 
         mProgressDialog.dismiss(); 
         // [END_EXCLUDE] 
        } 
       }); 
    } 


    // [END auth_with_facebook] 
    public static void signOut() { 
     FirebaseAuth.getInstance().signOut(); 
     LoginManager.getInstance().logOut(); 
     //mAuth.signOut(); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 
} 

回答

1

我解决了问题由我自己我所做的是我残疾和火力地堡控制台中的电子邮件/密码功能,一切工作顺利重新启用..

0

保存用户凭据他们首次注册时的共享首选项,然后每当用户启动应用程序时检查它们。

相关问题