Android app 解决客户端与服务器端时间戳不同步问题 时间: 2021-01-27 14:31 分类: Kotlin 在`app`中有时候经常用到时间戳作为请求参数进行`签名校验`来限制链接的时效性。 但是如果在`app`内直接使用`Date().time`来获取时间戳的话,服务器端就很可能校验失败:用户手动修改了系统时间 因此就需要解决客户端与服务器端时间戳不同步问题。 网上搜了一下相关问题,就是使用`NTP协议`来进行时间同步,在`app`中我们可以这样做: ``` class NTPUtil { companion object { @Volatile private var INSTANCE: NTPUtil? = null @Volatile private var deltaTime = 0L fun getInstance() = INSTANCE ?: synchronized(this) { INSTANCE ?: NTPUtil().also { val timeClient = NTPUDPClient() val timeServerUrl = "ntp.sjtu.edu.cn" val timeServerAddress: InetAddress = InetAddress.getByName(timeServerUrl) val timeInfo = timeClient.getTime(timeServerAddress) val timeStamp = timeInfo.message.transmitTimeStamp deltaTime = Date().time - timeStamp.time INSTANCE = it } } } fun getTime() = Date().time - deltaTime } ``` 以上就是同步获取`中国时区`的时间戳,想获取其他时区的时间戳,网上搜索相关`NTP`服务器替换`timeServerUrl`即可。 标签: 无