После обновления моих проектов Firebase SDK я заметил, что мое приложение регулярно теряет связь с базой данных firebase. Время, необходимое для отключения от нескольких минут до чуть более часа. После отключения приложение не будет повторно подключаться, пока я не выйду из системы или не удалю данные приложений.
Также, прежде чем я потеряю соединение, запись в журнале указывает, что мой токен аутентификации истек:
PersistentConnection: pc_0 - Аннулированный токен: expired_token (токен аутентификации истек.)
FYI, im используя Twitter и Facebook для моей аутентификации и не испытывал таких проблем с предыдущим SDK Firebase.
Я создал новый проект (с простой базой данных auth и реального времени), чтобы узнать, сохраняется ли проблема и что происходит. Я добавил фрагменты этого нового проекта:
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, которое действительно успешно регистрирует пользователя и отправляет его в 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");
}
});
Кто-нибудь знает, что заставляет приложение потерять соединение? Пока что ошибка возникла в двух разных проектах с двумя провайдерами авторизации (twitter и facebook) и только после обновления к новой Firebase.