2016-06-17 12 views
1

firebase認証を使用しようとしています。コードはうまくいきましたが、突然onActivityResult()のインテントデータがnull値を返すようになりました。onActivityResultがインテントデータを返すFirebase Auth

SignInButton signInButton; 
GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     //Default codes 

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this,this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
} 

public void signInBtn(){ 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == RC_SIGN_IN){ 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 
} 

答えて

1
Button signInButton; 
private static final int RC_SIGN_IN = 9001; 
private GoogleApiClient mGoogleApiClient; 
private FirebaseAuth mAuth; 
private FirebaseAuth.AuthStateListener mAuthStateListener; 


mAuth = FirebaseAuth.getInstance(); 

    mAuthStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      updateUI(user); 
     } 
    }; 


GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 

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


@Override 
protected void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthStateListener); 
    mGoogleApiClient.connect(); 
} 


@Override 
protected void onStop() { 
    super.onStop(); 
    if(mAuthStateListener != null) { 
     mAuth.removeAuthStateListener(mAuthStateListener); 
    } 
    mGoogleApiClient.disconnect(); 
} 


public 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] 
      updateUI(null); 
      // [END_EXCLUDE] 
     } 
    } 

// [START auth_with_google] 
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
    mAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 

        // 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()) { 
         Toast.makeText(LoginActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
} 
// [END auth_with_google] 

// [START signin] 
private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 
// [END signin] 


private void updateUI(FirebaseUser user) { 
    if (user != null) { 
     Intent intent = new Intent(LoginActivity.this, HomeActivty.class); 
     startActivity(intent); 
     finish(); 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
    // be available. 
    Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
} 

このFirebaseコードと私の完全作業Googleの認証です。

このコードで問題が解決しない場合は、handleSignInResult()メソッド

+0

で書き込んだコードをアップロードしてくださいありがとうございます!それは完璧に働いた。あなたはfirebaseのストレージで私を助けることができますか?それでも問題があります。 –

+0

Firebase Storageで作業する機会はありませんでしたが、確かに努力していきます。あなたはそれに直面している問題を教えてください。 –

関連する問題