2017-04-20 2 views
1

と呼ばれることはありません後、私は、Google +でFirebase認証を使用しているサインインし、一度私は、ボタンでページの更新を記号をクリックして、onActivityResultがあります(?)私のSHA-1を加えて正確である、と私のGoogle-services.jsonが追加され、最新の状態にされ、誰もが尋ねる前にFirebaseたGoogle+サインイン - ボタンで記号は、ページが更新をクリックし、onActivityResultが

、Firebase Googleログインが有効になっている...と呼ばれることはありません。

いくつかのより多くの奇妙な行動:それを私のアプリをアンインストールしてから再実行した後、ユーザーを選択するダイアログがログインボタンをクリックした後に思い付きました。それは約2秒後に消えて、決して元に戻ることはなかった。

関連のGradleライン:

compile 'com.google.firebase:firebase-core:10.2.1' 
compile 'com.google.firebase:firebase-auth:10.2.1' 
compile 'com.google.firebase:firebase-database:10.2.1' 
compile 'com.google.firebase:firebase-crash:10.2.1' 
compile 'com.google.android.gms:play-services-auth:10.2.1' 

ここに私のLoginActivity.javaコードです:私のようにコードを維持しようとした

<LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:layout_gravity="center" 
      android:gravity="center" 
      android:layout_marginBottom="30dp" 
      android:layout_marginEnd="50dp" 
      android:layout_marginTop="40dp" 
      android:layout_marginStart="50dp" 
      android:background="@color/transDarkGrey" 
    > 
     <com.google.android.gms.common.SignInButton 
       android:id="@+id/sign_in_button" 
       android:layout_width="200dp" 
       android:layout_height="40dp" 
       android:layout_centerInParent="true" 
       android:visibility="visible" 
       android:layout_marginBottom="20dp" 
       android:layout_marginTop="50dp" 
     /> 

     <View 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@color/Gold1" 
       android:layout_marginStart="10dp" 
       android:layout_marginEnd="10dp" 
       android:layout_marginBottom="20dp" 
     /> 



    </LinearLayout> 

public class LoginActivity extends BaseActivity implements 
    GoogleApiClient.OnConnectionFailedListener, 
    View.OnClickListener { 


private static final String TAG = "GoogleActivity"; 
private static final int RC_SIGN_IN = 9001; 

// [START declare_auth] 
private FirebaseAuth mAuth; 
// [END declare_auth] 

// [START declare_auth_listener] 
private FirebaseAuth.AuthStateListener mAuthListener; 
// [END declare_auth_listener] 

private GoogleApiClient mGoogleApiClient; 
private TextView mStatusTextView; 
private TextView mDetailTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    // Button listeners 
    findViewById(R.id.sign_in_button).setOnClickListener(this); 

    // [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(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

    // [START initialize_auth] 
    mAuth = FirebaseAuth.getInstance(); 
    // [END initialize_auth] 

    // [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(LoginActivity.this, MainActivity.class); 
       startActivity(intent); 
      } else { 
       // User is signed out 
       Log.d(TAG, "onAuthStateChanged:signed_out"); 
      } 
      // [START_EXCLUDE] 

      // [END_EXCLUDE] 
     } 
    }; 
    // [END auth_state_listener] 
} 


// [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 onactivityresult] 
@Override 
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] 
      Log.d("auth", "in activity result - failed"); 
      // [END_EXCLUDE] 
     } 
    } 
} 
// [END onactivityresult] 

// [START auth_with_google] 
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); 
    // [START_EXCLUDE silent] 
    showProgressDialog(); 
    // [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(LoginActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 
        // [START_EXCLUDE] 
        hideProgressDialog(); 
        // [END_EXCLUDE] 
       } 
      }); 
} 
// [END auth_with_google] 


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


private void revokeAccess() { 
    // Firebase sign out 
    mAuth.signOut(); 

    // Google revoke access 
    Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(@NonNull Status status) { 

       } 
      }); 
} 

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

@Override 
public void onClick(View v) { 
    int i = v.getId(); 
    if (i == R.id.sign_in_button) { 
     signIn(); 
    } 
} 
} 

し、関連するXMLできるだけ問題を避けるためにFirebase/Google Authの例に近いので、ここで間違っていることについてはかなり失われています。ここでは、単に問題を引き起こしている場合には、私の看板アウトコードです:

// [START configure_signin] 
    // Configure sign-in to request the user's ID, email address, and basic 
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
    GoogleSignInOptions gso = new 
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 
    // [END configure_signin] 

    // [START build_client] 
    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
    // [END build_client] 

    signOutButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      mAuth.signOut(); 
      Auth.GoogleSignInApi.signOut(mGoogleApiClient); 
      Intent intent = new Intent(v.getContext(), LoginActivity.class); 
      startActivity(intent); 
     } 
    }); 

くらい

編集感謝すべてのヘルプ:ほんの少しより多くの情報、私は以上

をやっている理由を追加します
mAuth.signOut(); 

ログアウトするには、後でログインするダイアログが必要なので、どのユーザーにログインするかを尋ねる必要があります。繰り返しますが、そのコードが関連しているかどうかは分かりませんが、うまくいけば役立ちます。固定

+0

をそのを把握でしょうか? –

+1

現在、クイックスタートを取得しようとしていますが、重複した指紋があるという問題が発生しました...その問題を解決しようとしています。 – theRealOne

+1

クイックスタートでデバッグしているときに、少なくとも私のアプリでは起こらないonActivityResultに達していることに気付きました。うまくいけばそれは手がかりを与える。私はそれらを行ごとに比較し、私が見つけることができるものを見てみるでしょう。 – theRealOne

答えて

1

!私は、クイックスタートコードを正確にコピーし、現在ログインしています。私はなぜ、まだわかりませんが、あなたがダウンロードして実行Firebaseクイックスタートアプリを無修正で、同じデバイスを使用して、それが動作しない場合、私は

関連する問題