Аутентификация телефона Firebase Android выдает ошибку NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved
Я использую Firebase Google и Phone Authentication в своем приложении. Войти через 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();
}
}
}
И это ошибка, которую я получил
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..phone.CompletableProgressDialog.showAllowingStateLoss(CompletableProgressDialog.java:51) в com.firebase.ui.auth.ui.phone.CompletableProgressDialog.show(CompletableProgressDialog.java:41) в com.firebase.ui.auth.er.phone..showLoadingDialog(PhoneVerificationActivity.java:390) на com.firebase.ui.auth.ui.phone.PhoneVerificationActivity.verifyPhoneNumber(PhoneVerificationActivity.java:157) на com.firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.honeFumberFragment.phone.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(собственный метод) 11-15 20:48:12.769 9712-9712 /com.dev_man_team.fiverr.predictnwin E/AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной java.lang.NoSuchMethodError: android.support.v4.app.FragmentManager.isStateSaved в com.firebase.ui.auth.ui.phone.CompletingSawDl eProgressDialog.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 at).firebase.ui.auth.ui.phone.VerifyPhoneNumberFragment.onActivityResult (VerifyPhoneNumberFragment.java:184) в android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164) в android.app.Activity.isp.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. refle.Method.invokeNative (собственный метод) по адресу java.lang.reflect.Method.invoke(Method.java:511) по адресу com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) по тел. android.internal.os.ZygoteInit.main (ZygoteInit.java:805) в dalvik.system.NativeStart.main(собственный метод)
Заранее спасибо за исправление моих ошибок. Я буду признателен за вашу помощь.
2 ответа
Три предложения:
(1) Вы используете FirebaseUI версии 3.1.0 с более новой версией 11.6.0 библиотек Firebase и Google Play. Документация FirebaseUI объясняет, что это требует обновления транзитивных зависимостей. Следуя инструкциям в документации, вы должны добавить эти зависимости:
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'
(2) Вы включаете ВСЕ службы Google Play:
compile 'com.google.android.gms:play-services:11.6.0'
Это излишне увеличивает размер вашего APK и время сборки и приведет к тому, что ваше приложение превысит эталонный лимит метода 65К на старых устройствах. Лучше включать только определенные API, которые вам нужны, такие как play-services-auth
, (Список API здесь)
(3) Ваш build.gradle не указывает buildToolsVersion
, Я не знаю, какой используется по умолчанию. Безопаснее указать один, например:
compileSdkVersion 26
buildToolsVersion "26.0.2"
Наконец-то нашел ответ на свой вопрос после долгих поисков
Благодаря трем предложениям @Bob я добавил еще одну вещь в Gradle сборки уровня приложения.
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'
}
чтобы избежать конфликтов. Теперь все работает отлично.