API времени Play Services
API времени предоставляет доступ к сигналам времени, поддерживаемым точным сервисом учета времени Google Play Services .
Это полезно, если вам нужно узнать точное время UTC, поскольку системные часы Android могут показывать неверное время, если пользователь установил их вручную.
Ранее для получения внешнего времени с сервера времени вам, возможно, приходилось включать в приложение NTP-клиент. API времени помогает разработчикам получать более надежную информацию о времени.
API платформы Android предоставляют метод SystemClock.currentNetworkTimeClock() , но он доступен только в API уровня 33 и выше. TrustedTimeClient предоставляет альтернативные методы и информацию о пределах точности возвращаемого времени.
Предварительные требования к приложению
- Убедитесь, что в файле сборки вашего приложения используются следующие значения:
- Минимальная версия SDK —
21или выше. - Скомпилируйте SDK версии
21или выше.
- Минимальная версия SDK —
Настройте свое приложение
- В файле
build.gradleна уровне проекта укажите репозиторий Maven от Google и центральный репозиторий Maven как в разделеbuildscript, так и в разделеallprojects:buildscript { repositories { google() mavenCentral() } } allprojects { repositories { google() mavenCentral() } }
- Добавьте зависимости для Time API в файл Gradle на уровне приложения вашего модуля, обычно это
app/build.gradle:dependencies { implementation 'com.google.android.gms:play-services-time:16.0.1' }
Инициализация клиента TrustTime
Простейший способ интеграции — инициализировать TrustedTimeClient на раннем этапе жизненного цикла приложения. Это можно сделать в методе onCreate() класса Application и хранить клиент в синглтоне Application . Это позволит использовать клиент на протяжении всего приложения.
class MyApplication : Application() { var trustedTimeClient: TrustedTimeClient? = null private set override fun onCreate() { super.onCreate() val initializeTrustedTimeClientTask = TrustedTime.createClient(this) initializeTrustedTimeClientTask.addOnCompleteListener { task -> if (task.isSuccessful) { // Stash the client trustedTimeClient = task.result } else { // Handle error, maybe retry later val exception = initializeTrustedTimeClientTask.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 в любом месте вашего приложения.
// Retrieve the TrustedTimeClient from your application class val myApp = applicationContext as MyApplication // 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 you'd rather use // Instant instead of long for Unix epoch times and you are able to use the APIs.