更新到新 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 上找到了答案。
更新我的项目 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 后仍然遇到身份验证令牌问题的人提供的