更新到新SDK

时间:2016-05-26 13:20:47

标签: android firebase firebase-realtime-database firebase-authentication

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

在我失去连接之前,日志中的条目表明我的身份验证令已过期:

  

PersistentConnection:pc_0 - 撤销身份验证令牌:expired_token(身份验证令牌已过期。)

仅供参考,我使用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'

身份验证活动遵循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个不同的项目中经历过2个auth提供商(twitter和facebook),并且只有在更新到新的Firebase之后才会出现。

1 个答案:

答案 0 :(得分:6)

Firebase修复了9.0.2版本的连接问题。对于仍有问题的人,我发现this page上的答案非常有用。特别是firebase团队为更新到9.0.2后仍然遇到身份验证令牌问题的人the troubleshoot guide生成的array_intersect_key