export interface DeviceIdentity { model: string brand: string manufacturer: string product: string device: string platform: string } let cachedDeviceIdentity: DeviceIdentity | null = null function safeText (value: unknown): string { return String(value || '').trim() } export function getDeviceIdentity (): DeviceIdentity { if (cachedDeviceIdentity) return cachedDeviceIdentity const info = (() => { try { return uni.getSystemInfoSync() } catch (_) { return {} as UniApp.GetSystemInfoResult } })() const identity: DeviceIdentity = { model: safeText((info as any).model), brand: safeText((info as any).brand), manufacturer: '', product: '', device: '', platform: safeText((info as any).platform), } // #ifdef APP-PLUS try { const Build = plus.android.importClass('android.os.Build') identity.model = safeText((Build as any).MODEL) || identity.model identity.brand = safeText((Build as any).BRAND) || identity.brand identity.manufacturer = safeText((Build as any).MANUFACTURER) identity.product = safeText((Build as any).PRODUCT) identity.device = safeText((Build as any).DEVICE) } catch (_) {} // #endif cachedDeviceIdentity = identity return identity } export function getDeviceFingerprint (): string { const identity = getDeviceIdentity() return [ identity.brand, identity.manufacturer, identity.model, identity.product, identity.device, ] .filter(Boolean) .join(' | ') .toLowerCase() }