更新我的项目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之后才会出现。
答案 0 :(得分:6)
Firebase修复了9.0.2版本的连接问题。对于仍有问题的人,我发现this page上的答案非常有用。特别是firebase团队为更新到9.0.2后仍然遇到身份验证令牌问题的人the troubleshoot guide生成的array_intersect_key。