Аутентификация телефона Firebase Android выдает ошибку NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved

Я внедряю Firebase Google и аутентификацию по телефону в своем приложении. Войти через Google Работает нормально. Но предоставление аутентификации по телефону

Ошибка: NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved

Я использую Firebase и Firebase-UI в Android

Это файл Gradle сборки на уровне приложения

apply plugin: 'com.android.application'

android {
        compileSdkVersion 26
        defaultConfig {
        applicationId "com.dev_man_team.fiverr.predictnwin"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner 
        "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
       }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:cardview-v7:26.1.0'
    compile 'com.google.firebase:firebase-database:11.6.0'
    compile 'com.google.firebase:firebase-storage:11.6.0'
    compile 'com.google.firebase:firebase-auth:11.6.0'
    compile 'com.google.android.gms:play-services:11.6.0'

    compile 'com.firebaseui:firebase-ui-database:3.1.0'

    compile 'com.firebaseui:firebase-ui-auth:3.1.0'

    compile 'com.firebaseui:firebase-ui-storage:3.1.0'
}

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

И это код

private FirebaseAuth auth;
private static final int RC_SIGN_IN = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup_login);

    auth = FirebaseAuth.getInstance();
    if(auth.getCurrentUser() != null){
        Toast.makeText(getApplicationContext(), "User is Already Signed in", Toast.LENGTH_LONG).show();
    }
    else{

        signUp();
    }
}

private void signUp() {
    List<AuthUI.IdpConfig> providers = new ArrayList<>();
    providers.add(new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build());
    providers.add(new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build());
    startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).build(), RC_SIGN_IN);
}

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

    if(requestCode == RC_SIGN_IN){
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if(resultCode == RESULT_OK){
            startActivity(new Intent(this, MainActivity.class));
            finish();
            Toast.makeText(getApplicationContext(), "User Signed in", Toast.LENGTH_LONG).show();
        }
    }
}

И это ошибка, которую я получил

Заранее спасибо за исправление моих ошибок. Я буду признателен за Вашу помощь.

Три предложения:


person Muhammad Taimoor    schedule 15.11.2017    source источник


Ответы (2)


(1) Вы используете FirebaseUI версии 3.1.0 с более новой версией 11.6.0 библиотек Firebase и Google Play. В документации FirebaseUI поясняется, что для этого необходимо обновить транзитивные зависимости. Следуя инструкциям в документации, вы должны добавить эти зависимости:

(2) Вы включаете ВСЕ сервисы Google Play:

compile 'com.android.support:customtabs:26.1.0'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.android.support:palette-v7:26.1.0'

Это без необходимости увеличивает размер APK и время сборки, а также приведет к тому, что ваше приложение превысит эталонный предел метода в 65 КБ на старых устройствах. Лучше включать только те API, которые вам нужны, например play-services-auth. (Список API здесь)

compile 'com.google.android.gms:play-services:11.6.0'

(3) В вашем build.gradle не указан buildToolsVersion. Я не знаю, что используется по умолчанию. Безопаснее указать один, например:

Наконец-то нашел ответ на свой вопрос после долгих поисков

compileSdkVersion 26
buildToolsVersion "26.0.2"
person Bob Snyder    schedule 15.11.2017
comment
@Taimoor: обновите свой пост, чтобы показать файл build.gradle после внесения изменений. - person Muhammad Taimoor; 16.11.2017
comment
11-15 20:48:12.509 9712-9712/com.dev_man_team.fiverr.predictnwin E/UncaughtException: java.lang.NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved at com.firebase.ui.auth.ui .phone.CompletableProgressDialog.showAllowingStateLoss(CompletableProgressDialog.java:51) в com.firebase.ui.auth.ui.phone.CompletableProgressDialog.show(CompletableProgressDialog.java:41) в com.firebase.ui.auth.ui.phone.PhoneVerificationActivity .showLoadingDialog(PhoneVerificationActivity.java:390) в com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.verifyPhoneNumber(PhoneVerificationActivity.java:157) на com.firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.onNext(VerifyPhoneNumberFragment.java:200) на com.firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.onActivityResult(VerifyPhoneNumberFragment.java:184) на android.support .v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164) в android.app.Activity.dispatchActivityResult(Activity.java:5387) в android.app.ActivityThread.deliverResults(ActivityThread.java:3205) в android.app. ActivityThread.han dleSendResult(ActivityThread.java:3252) в android.app.ActivityThread.access$1200(ActivityThread.java:143) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) в android.os.Handler.dispatchMessage( Handler.java:99) на android.os. Looper.loop(Looper.java:137) в android.app.ActivityThread.main(ActivityThread.java:4960) в java.lang.reflect.Method.invokeNative(собственный метод) в java.lang.reflect.Method.invoke( Method.java:511) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) в dalvik.system .NativeStart.main(собственный метод) 11-15 20:48:12.769 9712-9712/com.dev_man_team.fiver r.predictnwin E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main java.lang.NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved at com.firebase.ui.auth.ui.phone.CompletableProgressDialog.showAllowingStateLoss(CompletableProgressDialog.java:51 ) на com.firebase.ui.auth.ui.phone.CompletableProgressDialog.show(CompletableProgressDialog.java:41) на com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.showLoadingDialog(PhoneVerificationActivity.java:390) на com. firebase.ui.auth.ui.phone.PhoneVerificationActivity.verifyPhoneNumber (PhoneVerificationAc tivity.java:157) в com.firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.onNext(VerifyPhoneNumberFragment.java:200) в com.firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.onActivityResult(VerifyPhoneNumberFragment.java: 184) на странице android.support.v4.app. FragmentActivity.onActivityResult(FragmentActivity.java:164) в android.app.Activity.dispatchActivityResult(Activity.java:5387) в android.app.ActivityThread.deliverResults(ActivityThread.java:3205) в android.app.ActivityThread.handleSendResult(ActivityThread .java:3252) в android.app.ActivityThread.access$1200(ActivityThread.java:143) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) в android.os.Handler.dispatchMessage(Handler.java :99) в android.os.Looper.loop(Looper.java:137) в android.app.ActivityThread.main(ActivityThread.java:4960) в java.lang.reflect.Method.invokeNative(собственный метод) в java.lang.reflect .Method.invoke(Method.java:511) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) ) на dalvik.system. NativeStart.main (собственный метод) - person Bob Snyder; 16.11.2017

С тремя предложениями @Bob я добавил еще одну вещь в свой Gradle App Level Build.

во избежание конфликтов. Теперь все работает нормально.

compile ('com.google.firebase:firebase-core:11.4.2'){
    exclude group: 'com.google.firebase:firebase-analytics:9.0.0'
}
compile ('com.google.firebase:firebase-auth:11.4.2'){
    exclude group: 'com.google.firebase:firebase-analytics:9.0.0'
}

Я все еще получаю ту же ошибку. Вход в Google работает нормально, но аутентификация по телефону не работает.

person Muhammad Taimoor    schedule 16.11.2017