0

我試圖通過Firebase登錄並面臨一個奇怪的問題。除了一些三星設備外,我可以在所有設備上成功登錄。在調試時,我發現問題在:Firebase,數字身份驗證錯誤,活動遭到破壞的問題

package com.apponative.committeeapp.ui; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 

import com.apponative.committeeapp.R; 
import com.apponative.committeeapp.datamodles.User; 
import com.apponative.committeeapp.firebase.FireBaseDbHandler; 
import com.apponative.committeeapp.utils.CommitteeCallBack; 
import com.bumptech.glide.Glide; 
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; 
import com.digits.sdk.android.AuthCallback; 
import com.digits.sdk.android.AuthConfig; 
import com.digits.sdk.android.Digits; 
import com.digits.sdk.android.DigitsException; 
import com.digits.sdk.android.DigitsSession; 
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.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 

public class SplashActivity extends Activity 
     implements CommitteeCallBack.FireBaseAuthCallBack, GoogleApiClient.OnConnectionFailedListener, AuthCallback { 


    private int screenTag; 
    private User user; 
    private ImageView progressBar; 

    // Firebase 

    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 
    AuthConfig.Builder builder = new AuthConfig.Builder(); 
    AuthConfig authConfig; 

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

     fireBaseDigitsAuth(); 
    } 


    void fireBaseDigitsAuth() { 

     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

       if (firebaseAuth.getCurrentUser() != null) { 

       } 
      } 
     }; 

     mAuth = FirebaseAuth.getInstance(); 
     builder.withAuthCallBack(this); 
     authConfig = builder.build(); 

     if (mAuth.getCurrentUser() != null) { 
      FireBaseDbHandler.getDbHandler(this).userProfileCheck(mAuth.getCurrentUser().getEmail().split("@")[0]); 
     } else { 
      Digits.authenticate(authConfig); 
     } 
    } 

    public void signUpNewUser(final String email, String password) { 
     mAuth.createUserWithEmailAndPassword(email + getString(R.string.firebase_domain), password) 
       .addOnCompleteListener(SplashActivity.this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         if (task.isSuccessful()) { 
          FireBaseDbHandler.getDbHandler(SplashActivity.this).userProfileCheck(email); 
         } 
        } 
       }); 
    } 

    public void signInExistingUser(final String email, final String password) { 
     mAuth.signInWithEmailAndPassword(email + getString(R.string.firebase_domain), password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         if (!task.isSuccessful()) { 
          signUpNewUser(email, password); 
         } else { 
          FireBaseDbHandler.getDbHandler(SplashActivity.this).userProfileCheck(email); 
         } 
        } 
       }); 
    } 

    void startMainActivity(int itemId, User user) { 
//  Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
//  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
//  if (user != null) { 
//   intent.putExtra("userId", user.getUserId()); 
//   intent.putExtra("userName", user.getUsername()); 
//  } 
//  intent.putExtra("itemId", itemId); 
//  startActivity(intent); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     // finish(); 
    } 

    @Override 
    public void SignInSuccess(User user) { 
     progressBar.setVisibility(View.GONE); 
     this.user = user; 
     this.screenTag = R.string.tag_home; 
     startMainActivity(screenTag, user); 
    } 

    @Override 
    public void NewUserRegisteration() { 
     progressBar.setVisibility(View.GONE); 
     this.user = null; 
     this.screenTag = R.string.tag_setprofile; 
     startMainActivity(screenTag, user); 
    } 

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

    } 


    @Override 
    public void success(DigitsSession session, String phoneNumber) { 
     signInExistingUser(phoneNumber, phoneNumber); 
    } 

    @Override 
    public void failure(DigitsException error) { 
     error.printStackTrace(); 
    } 
} 

它拋出如下錯誤:

Process: com.apponative.committeeapp, PID: 28641 
                      java.lang.IllegalStateException: Activity has been destroyed 
                       at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1455) 
                       at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687) 
                       at android.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:667) 
                       at com.google.android.gms.internal.zzaay.zzt(Unknown Source) 
                       at com.google.android.gms.internal.zzaaw.zzc(Unknown Source) 
                       at com.google.android.gms.internal.zzaaw.zzs(Unknown Source) 
                       at com.google.android.gms.tasks.zzh$zza.zzw(Unknown Source) 
                       at com.google.android.gms.tasks.zzh.addOnCompleteListener(Unknown Source) 
                       at com.apponative.committeeapp.ui.SplashActivity.signInExistingUser(SplashActivity.java:115) 
                       at com.apponative.committeeapp.ui.SplashActivity.success(SplashActivity.java:209) 
                       at com.digits.sdk.android.WeakAuthCallback.success(WeakAuthCallback.java:32) 
                       at com.digits.sdk.android.LoginResultReceiver.onReceiveResult(LoginResultReceiver.java:64) 
                       at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:59) 
                       at android.os.ResultReceiver.send(ResultReceiver.java:93) 
                       at com.digits.sdk.android.DigitsControllerImpl$1.run(DigitsControllerImpl.java:178) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:7325) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

我不切換任何片段,這是一個簡單的活動。我在登錄前確認通過Twitter數字sdk的手機號碼。它工作正常。通過Digits確認後,我只會碰撞一次。重新啓動不發送數字的應用程序確認運行順利。

我不知道Digits是否在做這個問題。在調試過程中,我發現Twitter數字startPhoneNumberActivity ,標誌Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP。我認爲這些標誌正在破壞以前的活動。

我已經嘗試過這種活動,但沒有使用下列內容:

android:persistent="true" 
android:noHistory="false" 

的build.gradle:

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
    maven { url "https://jitpack.io" } 
} 


android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.---------" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

     configurations.all { 
      resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' 
     } 

     dexOptions { 
      javaMaxHeapSize "4g" 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     targetCompatibility JavaVersion.VERSION_1_7 
     sourceCompatibility JavaVersion.VERSION_1_7 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile('com.digits.sdk.android:digits:[email protected]') { 
     transitive = true; 
    } 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    compile 'com.google.firebase:firebase-auth:10.0.1' 
    compile 'com.google.firebase:firebase-database:10.0.1' 
    compile 'com.android.support:design:25.3.1' 

    compile 'com.google.firebase:firebase-storage:10.0.1' 

    compile 'com.firebaseui:firebase-ui-storage:1.1.1' 
    compile 'com.google.firebase:firebase-messaging:10.0.1' 
    testCompile 'junit:junit:4.12' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
    compile 'com.android.support:multidex:1.0.1' 
} 


apply plugin: 'com.google.gms.google-services' 
+0

後ur完整活動 –

+0

@AvinashRoy調試時我發現Twitter數字startPhoneNumber活動與標誌'Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP'。我認爲這些標誌正在破壞以前的活動。 –

+0

添加UR的build.gradle文件@ SairaNawaz –

回答

0

FLAG_ACTIVITY_CLEAR_TOP是這裏的問題,殺死活動。調用Fabric.with(this,new TwitterCore(authConfig),new Digits());在onCreate()活動方法中可以爲你解決問題。

+0

我無法刪除它,因爲它是在Twiiter Digits的課程中。數字通過生成器啓動其活動。 –

+0

intent.set標誌,不能在這裏刪除它? –

+0

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); –