Авария Firebase на Android во время анонимного входа
Я получаю этот крах примерно в 70% устройств на рынке. Однако при тестировании он никогда не появлялся.
public class MyApp extends Application{
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
FirebaseAuth.getInstance().signInAnonymously();
}
}
Это ошибка.
Fatal Exception: java.lang.RuntimeException: Unable to create application com.mycompany.myapp.activities.MyApp: java.lang.ClassCastException: com.google.android.gms.internal.hc cannot be cast to com.google.firebase.auth.c
com.google.android.gms.internal.hc cannot be cast to com.google.firebase.auth.c
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4927)
at android.app.ActivityThread.access$1500(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.google.android.gms.internal.hc cannot be cast to com.google.firebase.auth.c
at com.google.android.gms.internal.aa.a(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.a(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.d(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
at com.google.android.gms.internal.z.<init>(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.c(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
at com.tesseractmobile.solitairesdk.activities.SolitaireApp.onCreate(SolitaireApp.java:123)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4924)
Я использую firebase 9.2.1
compile "com.google.firebase:firebase-core:${firebaseVersion}"
compile "com.google.firebase:firebase-database:${firebaseVersion}"
//For dynamic links
compile "com.google.firebase:firebase-invites:${firebaseVersion}"
//Authentication - for logging winning games
compile "com.google.firebase:firebase-auth:${firebaseVersion}"
Сейчас я просто отключил firebase в нашем приложении. Мы просто тестировали его, чтобы увидеть, насколько он стабилен. Я не знаю, почему он работал на всех наших тестовых устройствах, а затем разбил это плохо в дикой природе.
Update:
Я смог получить видео с проблемой, используя Firebase Test Lab. Это произошло, когда роботист нажал на объявление (приложение, поддерживающее рекламу), а затем вернулся в приложение. Возможно, это имеет какое-то отношение к FirebaseAuth.getInstance(). SignInAnonymously(); вызывается дважды? Однако Application.onCreate() следует вызывать только один раз. Я знаю, что есть известная ошибка с отчетами об аварийных ситуациях Firebase, которые приведут к созданию двух экземпляров приложения, но мы не используем эту утилиту sdk, они исправляют проблему.
Ответы
Ответ 1
Я использовал Firebase Test Lab, чтобы найти проблему. Он разбился на одном из своих устройств, и я просмотрел видео о том, что произошло. Наше приложение поддерживает рекламу. Мы не нажимаем наши собственные объявления во время тестирования, чтобы этого не возникало. Сбой происходит после того, как пользователь нажимает на объявление, а затем снова запускает приложение. Решение, которое я нашел, было таким же, как и эта проблема. FirebaseApp с именем [DEFAULT] не существует
if (!FirebaseApp.getApps(this).isEmpty()){
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
FirebaseAuth.getInstance().signInAnonymously();
}
Я думаю, Application.onCreate() вызывается более одного раза. Хотя этого никогда не должно быть.
РЕДАКТИРОВАТЬ: ЭТО ОТВЕТ НЕ РАБОТАЕТ
После полной недели тестирования командой QA 4 человека. Запуск 58 единиц и связанных тестов с эспрессо на 7 тестовых устройствах. Затем выполняется несколько тестов на десятках облачных устройств с помощью Google Test Lab. Проблема никогда не происходила. Затем в день выпуска 500 сбоев за первые полчаса!? 70% крушения. Итак, вернемся к квадрату.
ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ: проблема Proguard
Я добавил эти две строки в свой proguard-rules.pro
#Firebase Authentication
-keepattributes Signature
-keepattributes *Annotation*
Проблема решена.
Ответ 2
Привет У меня есть аналогичная проблема, после нескольких дней без решения, я нашел, что это проблема с версией appcompat, поэтому я изменил это:
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
:
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:support-v4:23.3.0'
в графе приложения, и моя проблема решена, извините за мой английский
Ответ 3
Обновите файл build.gradle:
// Firebase Gradle
compile "com.google.firebase:firebase-auth:9.4.0"
compile 'com.google.firebase:firebase-storage:9.4.0'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
compile 'com.google.firebase:firebase-core:9.4.0'