おはよう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を生成してテストしました。
この時点では、時にはうまくいきませんし、時にはそうではないので、何の示唆もありません。前もって感謝します!