Ist dies der richtige Weg, um mithilfe des Ktor-Client-Plugins in Android einen dauerhaften Geräte-UUID-Header hinzuzufüAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Ist dies der richtige Weg, um mithilfe des Ktor-Client-Plugins in Android einen dauerhaften Geräte-UUID-Header hinzuzufü

Post by Anonymous »

Ich erstelle eine Android-App mit KOIN für die Abhängigkeitsinjektion und möchte jeder Anfrage von meinem HttpClient eine dauerhafte eindeutige Geräte-ID (UUID) hinzufügen. Die UUID sollte sicher gespeichert werden, damit sie bei App-Neustarts gleich bleibt.
Ich habe ein benutzerdefiniertes Ktor-Plugin erstellt, das die UUID aus dem sicheren Speicher lädt oder eine neue generiert und speichert, falls sie noch nicht existiert.

Code: Select all

@OptIn(ExperimentalUuidApi::class)
val DeviceIdPlugin = createClientPlugin("DeviceIdPlugin", ::DeviceIdConfig) {
val secureStorage = pluginConfig.secureStorage

val deviceIdProvider = Mutex()
var cachedDeviceId: String? = null

suspend fun getDeviceId(): String {
return cachedDeviceId ?: deviceIdProvider.withLock {
cachedDeviceId ?: secureStorage.load(SecureStorageKeys.DEVICE_UUID)?.also {
cachedDeviceId = it
} ?: Uuid.random().toString().also { newId ->
secureStorage.save(SecureStorageKeys.DEVICE_UUID, newId)
cachedDeviceId = newId
}
}
}

onRequest { request, _ ->
val deviceId = getDeviceId()
request.headers.append("X-Device-ID", deviceId)
}
}

class DeviceIdConfig {
lateinit var secureStorage: SecureStorage
}

interface SecureStorage {
suspend fun save(key: String, value: String): Boolean
suspend fun load(key: String): String?
}
Und ich installiere es in meinem HttpClient wie folgt:

Code: Select all

val httpModule = module {
single {

// Cache device info at HttpClient creation time (these don't change during app lifecycle)
val deviceModel = getDeviceModel()
val appVersion = getAppVersion()
val osVersion = getOsVersion()

HttpClient(CIO) {

install(DeviceIdPlugin) {
this.secureStorage = get()
}

install(DefaultRequest) {
contentType(ContentType.Application.Json)
header("X-Phone-Model", getDeviceModel())
header("X-App-Version", getAppVersion())
header("X-OS-Version", getOsVersion())
header("X-Timestamp", Clock.System.now().toEpochMilliseconds().toString())
}
}
}
}
Meine Fragen
  • Ist dies eine korrekte und sichere Methode zum Generieren und Zwischenspeichern einer dauerhaften
    Gerätekennung mithilfe eines Ktor-Plugins?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post