iOS проблема с меткой времени симулятора или датой ()? - PullRequest
0 голосов
/ 20 июня 2020

Переходя к сути -

  • Иметь приложение чата, которое работало нормально.
  • Когда пользователь отправляет сообщение, я конвертирую местную метку времени в метку времени по Гринвичу, чтобы поддерживать международную syn c и я сохраняю GMT на сервере firebase.
  • Слушатель прослушивает новое сообщение, принимает это сообщение, преобразует его обратно в локальную метку времени и обновляет представление таблицы.

Все работало безупречно, до недавнего времени я заметил забавную проблему

  • Я разговаривал между симулятором и реальным устройством
  • Когда реальное устройство получает чат от симулятора, я быстро отвечаю скажем, за секунду, чат отправляется, и все отсортировано правильно в соответствии с отметкой времени сообщения
  • Но когда симулятор получает чат от реального устройства, и я быстро отвечаю через секунду из симулятора, чат вставляется перед предыдущим сообщением чата вместо вставки после предыдущего сообщения чата

Я заметил , что мой код и все в порядке. Проблема заключалась в том, что, когда я использую текущую метку времени Date () на моем симуляторе , кажется, что отстает на хорошие 11-15 секунд (а иногда это бывает даже 30 секунд) от использования Date () на реальном устройстве . Следовательно, когда я немедленно отправляю сообщение из симулятора, регистрируемая временная метка на сервере firebase отстает в среднем на 20 секунд, и, поскольку мои сообщения сортируются в соответствии с временной меткой, он помещает это сообщение перед последним полученным сообщением, когда на самом деле оно должно приходить после.

Это известная проблема симулятора? Я не могу протестировать его на другом реальном устройстве, потому что у меня всего одно

func sendChatMessage() {
       let localDate = Date()
       let GMTTimestamp = getGMTTimestamp(localDate: localDate.timeintervalsince1970)
       let GMTTimestampFinal = Int64(GMTTimestamp)

       //perform server write operation
}

1 Ответ

1 голос
/ 20 июня 2020
• 1000 если устройство не обновилось на местное время, где бы оно ни находилось, или у них эта функция была отключена, или, может быть, они просто изменили время по какой-либо другой причине. Это может привести к неточностям в ваших данных и последовательности сортировки.

Метка времени базы данных в реальном времени и Метка времени имеет другую реализацию, чем Cloud Firestore один, но здесь есть несколько сообщений и примеров реализации серверной отметки времени.

...