package com.freeexile.arpg import android.content.Context import android.util.Log import com.google.android.play.core.integrity.IntegrityManager import com.google.android.play.core.integrity.IntegrityManagerFactory import com.google.android.play.core.integrity.IntegrityTokenRequest import com.google.android.play.core.integrity.IntegrityTokenResponse import kotlinx.coroutines.tasks.await /** * Google Play Integrity API 1.4.0 client manager. * Obtains hardware-attested integrity verdicts from Google Play servers * to verify device integrity, app licensing, and protect against memory tampering. */ class PlayIntegrityManager(private val context: Context) { companion object { private const val TAG = "PlayIntegrityManager" } private val integrityManager: IntegrityManager by lazy { IntegrityManagerFactory.create(context) } /** * Asynchronously requests an Integrity Token from Google Play using the server-provided nonce. */ suspend fun requestToken(nonce: String, cloudProjectNumber: Long? = null): Result { return try { val builder = IntegrityTokenRequest.builder() .setNonce(nonce) if (cloudProjectNumber != null && cloudProjectNumber > 0) { builder.setCloudProjectNumber(cloudProjectNumber) } val request = builder.build() val response: IntegrityTokenResponse = integrityManager.requestIntegrityToken(request).await() val token = response.token() Log.d(TAG, "Integrity token acquired successfully.") Result.success(token) } catch (e: Exception) { Log.e(TAG, "Integrity token request failed", e) Result.failure(e) } } }