iOS 模拟器时间戳或 Date() 问题?
iOS simulator timestamp or Date() issue?
进入正题-
- 有一个运行良好的聊天应用程序。
- 当用户发送消息时,我将本地时间戳转换为 GMT
保持国际同步的时间戳,我将 GMT 存储在 firebase 中
服务器。
- 侦听器侦听新消息,接收此消息,转换
它回到本地时间戳并刷新 table 视图。
一切正常,直到最近我注意到一个有趣的问题
- 我在模拟器和真实设备之间聊天
- 当真实设备收到来自模拟器的聊天时,我很快
马上回复说,聊天已发送,一切都已完成
根据消息时间戳正确排序
- 但是当模拟器收到真实设备的聊天消息时,我
模拟器秒速响应,聊天插入
在上一条聊天消息之前而不是在上一条聊天消息之后插入
我注意到我的代码和一切都很好。问题是当我在我的模拟器上使用当前时间戳 Date() 时,它似乎 滞后了 11 - 15 秒(这有时甚至会与在真实设备上使用 Date() 相差 30 秒)。因此,当我立即从模拟器发送一条消息时,firebase 服务器上记录的时间戳平均滞后 20 秒,并且由于我的消息是根据时间戳排序的,它会将这条消息放在最后一条收到的消息之前,而实际上它应该在最后一条消息之后。
这是一个已知的模拟器问题吗?我无法在另一台真实设备上测试它,因为我只有一个
func sendChatMessage() {
let localDate = Date()
let GMTTimestamp = getGMTTimestamp(localDate: localDate.timeintervalsince1970)
let GMTTimestampFinal = Int64(GMTTimestamp)
//perform server write operation
}
我认为这里的最佳做法是,如果您的应用对时间戳敏感,则使用固定且稳定的时间戳源,这将使用 Firebase Timestamp。
本地生成的日期或时间戳可能不稳定且不可预测;如果设备在任何地方都没有更新为当地时间,或者他们关闭了该功能,或者他们只是出于其他原因更改了时间。这可能会导致您的数据和排序顺序不准确。
Real Time Database Timestamp and has a different implementation than the Cloud Firestore,但这里有许多帖子和示例用于实现基于服务器的时间戳。
进入正题-
- 有一个运行良好的聊天应用程序。
- 当用户发送消息时,我将本地时间戳转换为 GMT 保持国际同步的时间戳,我将 GMT 存储在 firebase 中 服务器。
- 侦听器侦听新消息,接收此消息,转换 它回到本地时间戳并刷新 table 视图。
一切正常,直到最近我注意到一个有趣的问题
- 我在模拟器和真实设备之间聊天
- 当真实设备收到来自模拟器的聊天时,我很快 马上回复说,聊天已发送,一切都已完成 根据消息时间戳正确排序
- 但是当模拟器收到真实设备的聊天消息时,我 模拟器秒速响应,聊天插入 在上一条聊天消息之前而不是在上一条聊天消息之后插入
我注意到我的代码和一切都很好。问题是当我在我的模拟器上使用当前时间戳 Date() 时,它似乎 滞后了 11 - 15 秒(这有时甚至会与在真实设备上使用 Date() 相差 30 秒)。因此,当我立即从模拟器发送一条消息时,firebase 服务器上记录的时间戳平均滞后 20 秒,并且由于我的消息是根据时间戳排序的,它会将这条消息放在最后一条收到的消息之前,而实际上它应该在最后一条消息之后。
这是一个已知的模拟器问题吗?我无法在另一台真实设备上测试它,因为我只有一个
func sendChatMessage() {
let localDate = Date()
let GMTTimestamp = getGMTTimestamp(localDate: localDate.timeintervalsince1970)
let GMTTimestampFinal = Int64(GMTTimestamp)
//perform server write operation
}
我认为这里的最佳做法是,如果您的应用对时间戳敏感,则使用固定且稳定的时间戳源,这将使用 Firebase Timestamp。
本地生成的日期或时间戳可能不稳定且不可预测;如果设备在任何地方都没有更新为当地时间,或者他们关闭了该功能,或者他们只是出于其他原因更改了时间。这可能会导致您的数据和排序顺序不准确。
Real Time Database Timestamp and