API
Google запустил TrustedTime API
Google представил TrustedTime API, который использует инфраструктуру Google для получения надежной временной метки, не зависящей от потенциально манипулируемых настроек локального времени устройства.
Точное время имеет решающее значение для широкого спектра функций приложений, от планирования и управления событиями до регистрации транзакций и протоколов безопасности. Однако пользователь может изменить время на устройстве, поэтому может потребоваться более точный источник времени, чем локальное системное время устройства. Именно поэтому Google представил TrustedTime API, который использует инфраструктуру Google для получения надежной временной метки, не зависящей от потенциально манипулируемых настроек локального времени устройства.
Как работает TrustedTime?
Новый API использует безопасную инфраструктуру Google для обеспечения надежного источника времени для вашего приложения. TrustedTime периодически синхронизирует свои часы с серверами Google, которые имеют доступ к высокоточному источнику времени, поэтому вам не нужно делать запрос на сервер каждый раз, когда вы хотите узнать текущее сетевое время. Кроме того, разработчики интегрировали уникальную модель, которая рассчитывает дрейф часов устройства. Это позволит вам узнать, когда время может быть неточным между сетевыми синхронизациями.
Примеры использования TrustedTime
TrustedTime API дает множество преимуществ для повышения надежности и безопасности ваших приложений:
- Точность временных меток транзакций, даже когда устройство находится в автономном режиме, для предотвращения мошенничества и споров
- Честные игры, без манипуляции игровыми часами, чтобы получить несправедливое преимущество
- Ограниченные по времени предложения с гарантией, что срок действия акций и предложений истекает в нужное время, независимо от настроек устройства пользователя
- Точное отслеживание времени обработки и доставки заказов
- Ограничения по времени на цифровой контент, например, на аренду или подписку
- Синхронизация часов на нескольких устройствах для последовательной регистрации данных и управления в IoT
- Точная регистрация времени любых изменений, внесенных в облачные документы в автономном режиме.
Начало работы с TrustedTime API
TrustedTime API построен на базе сервисов Google Play, что делает интеграцию простой для большинства разработчиков Android.
Самый простой способ интеграции — инициализировать TrustedTimeClient на ранней стадии жизненного цикла приложения, например в методе onCreate()
класса Application. В следующем примере используется инъекция зависимостей с Hilt, чтобы сделать клиент времени доступным для компонентов во всем приложении.
[Опционально] Настройка инъекции зависимостей
// TrustedTimeClientAccessor.kt
import com.google.android.gms.tasks.Task
import com.google.android.gms.time.TrustedTimeClient
interface TrustedTimeClientAccessor {
fun createClient(): Task<TrustedTimeClient>
}
// TrustedTimeModule.kt
SingletonComponent::class) (
class TrustedTimeModule {
fun provideTrustedTimeClientAccessor(
context: Context
): TrustedTimeClientAccessor {
return object : TrustedTimeClientAccessor {
override fun createClient(): Task<TrustedTimeClient> {
return TrustedTime.createClient(context)
}
}
}
}
Инициализация
xxxxxxxxxx
// TrustedTimeDemoApplication.kt
class TrustedTimeDemoApplication : Application() {
lateinit var trustedTimeClientAccessor: TrustedTimeClientAccessor
var trustedTimeClient: TrustedTimeClient? = null
private set
override fun onCreate() {
super.onCreate()
trustedTimeClientAccessor.createClient().addOnCompleteListener { task ->
if (task.isSuccessful) {
// Stash the client
trustedTimeClient = task.result
} else {
// Handle error, maybe retry later
val exception = task.exception
}
}
// To use Kotlin Coroutine, you can use the await() method,
// see https://developers.google.com/android/guides/tasks#kotlin_coroutine for more info.
}
}
Использование TrustedTimeClient
xxxxxxxxxx
// Retrieve the TrustedTimeClient from your application class
val myApp = applicationContext as TrustedTimeDemoApplication
// In this example, System.currentTimeMillis() is used as a fallback if the
// client is null (i.e. client creation task failed) or when there is no time
// signal available. You may not want to do this if using the system clock is
// not suitable for your use case.
val currentTimeMillis =
myApp.trustedTimeClient?.computeCurrentUnixEpochMillis()
?: System.currentTimeMillis()
// trustedTimeClient.computeCurrentInstant() can be used if Instant is
// preferred to long for Unix epoch times and you are able to use the APIs.
Использование в таких недолговечных компонентах, как активити
xxxxxxxxxx
class MainActivity : AppCompatActivity() {
lateinit var trustedTimeAccessor: TrustedTimeAccessor
private var trustedTimeClient: TrustedTimeClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
trustedTimeAccessor.createClient().addOnCompleteListener { task ->
if (task.isSuccessful) {
// Stash the client
trustedTimeClient = task.result
} else {
// Handle error, maybe retry later or use another time source.
val exception = task.exception
}
}
}
private fun getCurrentTimeInMillis() : Long? {
return trustedTimeClient?.computeCurrentUnixEpochMillis()
}
}
Доступность и ограничения TrustedTime API
TrustedTime API доступен на всех устройствах с сервисами Google Play на Android 5 (Lollipop) и выше. Чтобы получить доступ к новому API, необходимо добавить зависимость com.google.android.gms:play-services-time:16.0.1
(или выше). Для использования этого API не требуется никаких дополнительных разрешений. Однако TrustedTime необходимо подключение к интернету после запуска устройства, чтобы предоставлять временные метки. Если устройство не подключалось к интернету с момента загрузки, API TrustedTime не вернет правильное время.
Важно отметить, что внутренние часы устройства могут смещаться под воздействием таких факторов, как температура, режим сна и уровень заряда батареи. TrustedTime не предотвращает этот дрейф, но его API предоставляют оценку ошибки для каждой временной метки. Используйте эту оценку, чтобы определить, соответствует ли точность временной метки требованиям вашего приложения. Хотя TrustedTime усложняет манипуляции пользователей со временем, к которому обращается ваше приложение, он не гарантирует полной безопасности. Для подмены времени на устройстве по-прежнему можно использовать передовые методы.
Ссылки
-
Видео и подкасты для разработчиков3 недели назад
Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.10
-
Новости2 недели назад
Видео и подкасты о мобильной разработке 2025.11
-
Видео и подкасты для разработчиков1 неделя назад
Javascript для бэкенда – отличная идея: Node.js, NPM, Typescript