更新到新 SDK 后与 Firebase 数据库失去连接

Losing connection with Firebase database after updating to new SDK

更新我的项目 Firebase SDK 后,我注意到我的应用程序经常失去与 firebase 数据库的连接。断开连接所需的时间从几分钟到一个多小时不等。一旦断开连接,应用程序将不会重新连接,直到我注销或清除应用程序数据。

同样在我失去连接之前,日志中的一个条目指出我的授权令牌已过期:

PersistentConnection: pc_0 - Auth token revoked: expired_token (Auth token is expired.)

仅供参考,我使用 Twitter 和 Facebook 进行身份验证,使用以前的 Firebase SDK 时没有遇到此类问题。

我创建了一个新项目(具有简单的身份验证和实时数据库)以查看问题是否仍然存在并且确实如此。我附上了那个新项目的片段:

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.sample.gideon.test"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:support-v4:23.4.0'
    compile 'com.facebook.android:facebook-android-sdk:4.12.0'
    compile 'com.google.firebase:firebase-database:9.0.0'
    compile 'com.google.firebase:firebase-auth:9.0.0'
    compile 'com.android.support:design:23.4.0'
}

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

身份验证 activity 遵循 firebase facebook 登录指南,它确实成功地让用户登录并将他们发送到 MainActivity,然后使用以下代码监视数据库连接:

MainActivity

    DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            boolean connected = snapshot.getValue(Boolean.class);
            if (connected) {
                System.out.println("connected");
            } else {
                System.out.println("not connected");
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            System.err.println("Listener was cancelled");
        }
    });

有人知道是什么导致应用程序失去连接吗?到目前为止,在具有 2 个身份验证提供程序(推特和 Facebook)的 2 个不同项目中都遇到了错误,并且仅在更新到新的 Firebase 之后才出现。

Firebase 在 9.0.2 版本中修复了连接问题。此外,对于仍然遇到问题的任何人,我在 firebase 团队为更新到 9.0.2 后仍然遇到身份验证令牌问题的人提供的 very useful. Especially the troubleshoot guide 上找到了答案。