Почему Firebase перестает синхронизироваться при явном изменении локальной даты устройства?

Когда я изменяю настройку локальной даты своего телефона на 1 или более месяцев, а затем после перезапуска своего приложения для Android, которое использует базу данных Firebase в реальном времени, оно не загружает данные из базы данных и продолжает загружать навсегда. Почему это происходит? Проверяет ли Firebase локальное время устройства перед получением данных?

Это onCreate() MainActivity приложения для Android

После изменения даты (на 10 или более дней) в настройках, а затем закрытия и повторного открытия приложения индикатор выполнения никогда не становится невидимым. Даже функция onCancelled не вызывается.

    final ProgressBar progressBar = findViewById(R.id.progress_bar);
    final TextView textView = findViewById(R.id.textView);
    progressBar.setVisibility(View.VISIBLE);

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("message");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String value = dataSnapshot.getValue(String.class);
            textView.setText(value);
            progressBar.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            progressBar.setVisibility(View.INVISIBLE);
        }
    });`

Уровень приложения

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.akzarma.testapplication"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.google.firebase:firebase-database:11.8.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

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

Ниже приведена ссылка на репозиторий Github для этого проекта, это всего лишь пример приложения, которое извлекает данные из базы данных Firebase в реальном времени: https://github.com/akzarma/testApp


person akzarma    schedule 28.07.2018    source источник
comment
Пожалуйста, поделитесь кодом, который вы используете для получения данных из базы данных.   -  person Alex Mamo    schedule 29.07.2018
comment
@AlexMamo Я создал совершенно новое приложение для тестирования (также поделился кодом). Та же проблема.   -  person akzarma    schedule 29.07.2018
comment
очаровательный! это в отладочных сборках или что-то в этом роде, есть ли разница?   -  person Fattie    schedule 30.07.2018
comment
@Fattie Я пробовал обе сборки. ведет себя точно так же. (также добавил ссылку на проект в вопросе)   -  person akzarma    schedule 30.07.2018
comment
Не уверен, как обойти это, но одна из возможных причин - SSLHandshakeException, вызванная CertificateExpiredException.   -  person    schedule 03.08.2018
comment
только что пробовал на девайсе 4.4.2. используя предоставленную ссылку проекта. Он синхронизировался без каких-либо проблем (после изменения дат). Есть ли конкретное устройство, на котором вы видите эту проблему?   -  person Amod Gokhale    schedule 06.08.2018
comment
@AmodGokhale Прочитав ваш комментарий, я попробовал его на устройстве 4.4.2. если я меняю месяцы, он синхронизируется без проблем. но если я изменю год на 2019 или более, то он перестанет синхронизироваться. (не забудьте очистить приложение из памяти после изменения дат, а затем открыть его)   -  person akzarma    schedule 09.08.2018


Ответы (1)


Как упоминалось в комментариях, наиболее вероятная причина связана с SSL. SSL не работает с неправильными датами, поэтому он не может безопасно подключиться к Firebase. Один из возможных способов обойти это — подключиться к Firebase через http, но 1) это небезопасно 2) я не уверен, что он все еще поддерживается.

person James    schedule 05.08.2018