API زمان سرویس‌های بازی

رابط برنامه‌نویسی کاربردی زمان (Time API) دسترسی به سیگنال‌های زمانی پشتیبانی‌شده توسط سرویس زمان‌سنجی دقیق سرویس‌های گوگل پلی را فراهم می‌کند.

این قابلیت در صورتی مفید است که بخواهید زمان UTC صحیح را بدانید، زیرا اگر کاربر ساعت سیستم اندروید را به صورت دستی تنظیم کرده باشد، ممکن است نادرست باشد.

پیش از این، ممکن بود برای دریافت زمان خارجی از یک سرور زمان، نیاز به افزودن یک کلاینت NTP به برنامه خود داشته باشید. API زمان به توسعه‌دهندگان کمک می‌کند تا اطلاعات زمانی قابل اعتمادتری را دریافت کنند.

APIهای پلتفرم اندروید، SystemClock.currentNetworkTimeClock() را ارائه می‌دهند، اما این فقط در سطح API 33 و بالاتر در دسترس است. TrustedTimeClient جایگزین‌ها و اطلاعاتی در مورد محدوده‌های دقت برای زمان بازگشتی ارائه می‌دهد.

پیش‌نیازهای برنامه

  • مطمئن شوید که فایل ساخت برنامه شما از مقادیر زیر استفاده می‌کند:
    • حداقل نسخه SDK 21 یا بالاتر.
    • نسخه SDK 21 یا بالاتر را کامپایل کنید.

برنامه خود را پیکربندی کنید

  1. در فایل build.gradle در سطح پروژه، مخزن Maven گوگل و مخزن مرکزی Maven را هم در بخش‌های buildscript و هم allprojects خود وارد کنید:
      buildscript {
          repositories {
              google()
              mavenCentral()
          }
      }
    
      allprojects {
          repositories {
              google()
              mavenCentral()
          }
      }
      
  2. وابستگی‌های مربوط به API زمان را به فایل Gradle سطح برنامه ماژول خود، که معمولاً app/build.gradle ، اضافه کنید:
      dependencies {
        implementation 'com.google.android.gms:play-services-time:16.0.1'
      }
      

مقداردهی اولیه کلاینت TrustedTime

ساده‌ترین راه برای ادغام، مقداردهی اولیه TrustedTimeClient در اوایل چرخه حیات برنامه شماست. می‌توانید این کار را در کلاس onCreate() برنامه خود انجام دهید و کلاینت را در Singleton 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.