Разница в метках времени Firebase между текущей меткой времени и ошибкой метки времени базы данных - PullRequest
1 голос
/ 25 января 2020

Я написал TimeValidityCheckUtil, который определяет, находится ли моментальный снимок от конкретного слушателя в заданный период времени текущего времени устройства. Это имеет следующий метод: checkIfTImeValid

  public static boolean checkIfTimeValid(Timestamp dbTimestamp)
    {    
        Timestamp currentTimestamp = Timestamp.now();    
        Long seconds = currentTimestamp.getSeconds() - dbTimestamp.getSeconds();  
        if(seconds> 10)
        {
            return false;
        }    
        return true;    
    }

Структура базы данных находится в Firestore и выглядит следующим образом:

"ABC"-|
      |
      |-"documentId"-|
                     |
                     |-"some_key" - "string"
                     |-"timestamp" - timestamp

Вот что происходит, устройство A создает documentId и объект с отметкой времени.

Устройство B прослушивает этот documentId и вызывает checkIfTimeValid, чтобы проверить, находилась ли операция по документу A в пределах 10 с текущей отметки времени (чтобы проверить, является ли она последней)

Даже если этот процесс происходит мгновенно, устройство показывает разницу между временными метками как ~ 57-62 с, которая, по моему мнению, не должна превышать 1-5 с.

Почему это происходит?

1 Ответ

1 голос
/ 25 января 2020

Timestamp.now() рассчитывается с использованием времени местного устройства. Если часы устройства не синхронизированы c с Firebase, эта разница будет отражена здесь.

Мне неизвестен эквивалент Firestore, но в RTDB вы можете использовать специальное местоположение /.info/serverTimeOffset для оцените разницу между часами в миллисекундах.

firebase.database().ref('/.info/serverTimeOffset').once('value')
  .then((snap) => {
    var offset = snap.val();
    console.log('Server time delta in ms: ', offset);
    // var estimatedServerTimeMs = new Date().getTime() + offset;
  })
  .catch(console.error)

Документы RTDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...