Я использую /.info/serverTimeOffset для получения приблизительного времени сервера из firebase.
Long clockSkew = null;
...
void registerForClockSkew() {
DatabaseReference offsetRef =
FirebaseDatabase.getInstance().getReference(".info/serverTimeOffset");
offsetRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
clockSkew = (long) offset;
}
@Override
public void onCancelled(DatabaseError error) {
clockSkew = null;
}
});
}
Однако, как уже упоминалось здесь - https://github.com/firebase/firebase-ios-sdk/issues/363 - смещение не обновляется при изменении времени устройства. Я попытался закрыть и повторно подключить экземпляр firebase, чтобы обновить значение перекоса, но, похоже, оно не работает. В моем коде я просто вставляю следующее при изменении времени устройства -
FirebaseDatabase.getInstance().goOffline();
FirebaseDatabase.getInstance().goOnline();
но это не вызывает обратный вызов value-event-listener. Что мне здесь не хватает? Это потому, что goOffline и goOnline являются последовательными утверждениями, это никак не влияет?