1

おはようAndroidのサインインとFirebaseの認証が間違いなく

私は現在、Googleログインが必要なアプリを開発中です。私はここで利用可能なfirebaseによって提供される指示に従った:https://firebase.google.com/docs/auth/android/google-signin

しかし、私はアプリから信頼性の低いサインインを受信して​​います。それはしばらくの間うまくいっていて、その後問題を起こし始めました。残念ながら、私が描写する傾向はあまりありません。ほとんどの場合、モバイルデータの場合に発生しますが、時にはWi-Fiでもあります。ときにはサインインしたり、時にはサインインしないこともあります。これに伴い、FirebaseNetworkErrorがスローされ、時には何もしません。私はおそらく、私はいつも信頼できるインターネット接続が失敗したら(私はいつもYoutubeのビデオをチェックして、Chrome上のいくつかのページを見て)二重チェックをしていることに言及すべきである。私はまた、さまざまなモバイルおよびWi-Fiネットワーク上の約10種類のアンドロイドデバイスについてもテストしました。本質的に、時々サインインしますが、時にはサインインしません。

私は大量の研究をしましたが、何も見つかりませんでした。私が何かを逃したなら、私に知らせてください。

EDIT:ユーザーにサインインすると問題はありません。他のすべてのfirebaseサービスは完全に機能します。ここで

は私の認証活動(私はその後、私のメインに起動し、別の認証を持っている)である:ここでは

public class Authentication extends AppCompatActivity implements 
GoogleApiClient.OnConnectionFailedListener { 

    private FirebaseAuth mFirebaseAuth; 
    private GoogleApiClient apiClient; 
    private static final int RC_SIGN_IN = 9001; 
    SignInButton button; 
    Button signOut; 
    private static final String TAG = "GoogleActivity"; 



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

    ActionBar actionBar = getSupportActionBar(); 
    actionBar.hide(); 


    button = (SignInButton) findViewById(R.id.googleSignIN); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      signIn(); 

     } 


    }); 

    signOut = (Button) findViewById(R.id.bSignOut); 
    signOut.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      signOut(); 
     } 
    }); 


    // Set up Google Sign-in options 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 

    // Set up Sign-In Api Client 
    apiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 


    //mFirebaseAuth = FirebaseAuth.getInstance(); 
    mFirebaseAuth = FirebaseAuth.getInstance(); 


} 


@Override 
protected void onStart() { 
    super.onStart(); 
    // Check if current user is signed in 
    FirebaseUser currentUser = mFirebaseAuth.getCurrentUser(); 
    startMain(currentUser); 
} 

@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); 
     if (result.isSuccess()) { 
      // Google Sign In was successful, authenticate with Firebase 
      GoogleSignInAccount account = result.getSignInAccount(); 
      firebaseAuthGoogle(account); 
     } else { 

      startMain(null); 

     } 
    } 
} 

private void firebaseAuthGoogle(GoogleSignInAccount account) { 


    AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null); 

    mFirebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if (task.isSuccessful()) { 

       FirebaseUser user = mFirebaseAuth.getCurrentUser(); 
       startMain(user); 
      } else { 
       Log.w(TAG, task.getException()); 
       Toast.makeText(Authentication.this, "Authentication Failed. Please try again later", Toast.LENGTH_SHORT).show(); 
       startMain(null); 
      } 

     } 
    }); 
} 

private void signIn() { 

    Intent signIn = Auth.GoogleSignInApi.getSignInIntent(apiClient); 
    startActivityForResult(signIn, RC_SIGN_IN); 

} 

private void signOut() { 
    mFirebaseAuth.signOut(); 

    Auth.GoogleSignInApi.signOut(apiClient).setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(@NonNull Status status) { 
      startMain(null); 
     } 

    }); 
} 

private void revokeAccess() { 

    mFirebaseAuth.signOut(); 

    Auth.GoogleSignInApi.revokeAccess(apiClient).setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(@NonNull Status status) { 
      startMain(null); 
     } 
    }); 
} 

private void startMain(FirebaseUser currentUser) { 
    if (currentUser != null) { 

     Intent i = new Intent(Authentication.this, MainActivity.class); 
     startActivity(i); 
     finish(); 

    } 
} 


@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Toast.makeText(Authentication.this, "Error", Toast.LENGTH_LONG).show(); 
} 

}

は、ネットワークエラーのスタックトレースです:

07-01 15:28:19.991 30844-30844/***.*********.******** W/GoogleActivity: 
com.google.firebase.FirebaseNetworkException: A network error (such as 
timeout, interrupted connection or unreachable host) has occurred. 
                     at 
com.google.android.gms.internal.jz.zzK(Unknown Source) 
                     at 
com.google.android.gms.internal.jb.zza(Unknown Source) 
                     at 
com.google.android.gms.internal.kj.zzL(Unknown Source) 
                     at 
com.google.android.gms.internal.kl.onFailure(Unknown Source) 
                     at 
com.google.android.gms.internal.kb.onTransact(Unknown Source) 
                     at 
android.os.Binder.execTransact(Binder.java:446) 

マニフェスト許可:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

プロジェクトのGradleの依存関係:

classpath 'com.android.tools.build:gradle:2.3.3' 
classpath 'com.google.gms:google-services:3.1.0' 

モジュールのGradleの依存関係(関連するもの):私はまた、Googleは、サインイン私firebaseコンソールで有効になっているん

compile 'com.firebaseui:firebase-ui:2.0.1' 
compile 'com.google.firebase:firebase-database:11.0.2' 
compile 'com.google.firebase:firebase-core:11.0.2' 
compile 'com.google.firebase:firebase-auth:11.0.2' 
compile 'com.google.android.gms:play-services-auth-base:11.0.2' 
compile 'com.google.android.gms:play-services-auth:11.0.2' 
compile 'com.google.android.gms:play-services-identity:11.0.2' 
compile 'com.google.android.gms:play-services-location:11.0.2' 
compile 'com.google.android.gms:play-services-maps:11.0.2' 
compile 'com.google.android.gms:play-services-places:11.0.2' 
compile 'com.android.support.constraint:constraint-layout:1.0.2' 
compile 'com.google.firebase:firebase-database:11.0.2' 
compile 'com.google.firebase:firebase-messaging:11.0.2' 

、私は私のSHA-1を入力しましたgoogle-service.jsonファイルを再度firebaseからダウンロードし、署名付きapkを生成してテストしました。

この時点では、時にはうまくいきませんし、時にはそうではないので、何の示唆もありません。前もって感謝します!

答えて

1

問題を解決できました。アンドロイドモニターで

  1. のみ「firebase」ログを選択します(私はこのことを知らなかった私のnaivityを言い訳)するための便利なオプションがあります:ここでは、同じ問題に直面することができる人のための提案です。私の場合は、ネットワークに接続されていないことが明らかになりました。ただし、これは、Googleサービスが端末のモバイルデータに制限されていたためです。

  2. 問題は他のデバイスでも残っていましたが、私はリリースSHA-1キーも生成し、それを私のfirebaseプロジェクトに追加しました。私は新しいGoogleサービスをダウンロードしました。jsonファイルを作成して追加しました(これが必要かどうかわかりませんが、それは予防策に過ぎません)。私は他の何かを描くことができなかったとき、私の他のデバイスのいくつかに署名したAPKをテストしました。したがって、私はこれが他のデバイスのログイン問題を解決したと思います。

関連する問題