匿名登录期间,Firebase在Android上崩溃

时间:2016-07-22 19:50:07

标签: android firebase firebase-authentication

我在市场上约有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。我们只是测试它,看看它有多稳定。我不知道为什么它在我们所有的测试设备上工作,然后在野外崩溃。

更新 我能够使用Firebase测试实验室获取该问题的视频。它发生在robotest点击广告(广告支持的应用程序)然后回到应用程序时。所以它可能与FirebaseAuth.getInstance()有关.igninInnonymously();被叫两次?但是应该只调用一次Application.onCreate()。我知道Firebase崩溃报告存在一个已知错误,它将导致创建两个Application实例,但我们没有使用该sdk util来解决问题。

3 个答案:

答案 0 :(得分:3)

我使用Firebase测试实验室来查找问题。它在他们的一台设备上崩溃了,我看了发生了什么的视频。我们的应用广告支持。我们不会在测试期间点击我们自己的广告,所以这从未出现过。在用户点击广告然后重新进入应用后,就会发生崩溃。我发现的解决方案与此问题相同。 FirebaseApp with name [DEFAULT] doesn't exist

        if (!FirebaseApp.getApps(this).isEmpty()){ 
            FirebaseDatabase.getInstance().setPersistenceEnabled(true);
            FirebaseAuth.getInstance().signInAnonymously();
        }

我认为Application.onCreate()不止一次被调用。虽然这不应该发生。

编辑:此答案不起作用

由4人QA团队进行为期一周的测试。在7个测试设备上运行58个单元并使用浓缩咖啡连接测试。然后使用Google Test Lab在数十个云设备上运行多项测试。问题从未发生过。然后在发布日,前半个小时500次崩溃!? 70%的崩溃率。所以回到原点。

最终答案:Proguard问题

我将这两行添加到我的proguard-rules.pro

#Firebase Authentication
-keepattributes Signature
-keepattributes *Annotation*

问题解决了。

答案 1 :(得分:-1)

嗨我有一个类似的问题,经过几天没有解决方案,我发现这是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'

在app graddle中我的问题解决了,抱歉我的英文

答案 2 :(得分:-1)

更新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'