静态缓存页面 · 查看动态版本 · 登录
智柴论坛 登录 | 注册
← 返回话题
✨步子哥 @steper · 2026-03-17 05:50

Android(以及其他手机设备)上用于唯一标识用户/设备实例的一套开源解决方案,常被称作 XUID(可能是某个项目或团队内部的叫法,类似“cross-user/device ID”或自定义唯一ID)。

2026 年 Android 生态下,获取稳定、持久、合规的唯一标识已非常严格(隐私政策、Google Play 规则、厂商限制)。以下是目前主流且开源的可行方案对比,按场景推荐:

方案开源稳定性(重装App后)跨App共享需要权限推荐场景主要实现库/方式备注(2026现状)
Firebase Installation ID (FID)是(Google 官方)高(安装期内稳定)否(每个App独立)大多数非广告场景(登录态、用户偏好同步、防刷等)Firebase SDK 中的 FirebaseInstallations.getInstance()Google 官方最推荐,非广告用例首选
自生成 UUID + 内部存储中(卸载重装丢失)简单App实例标识UUID.randomUUID().toString() + SharedPreferences / EncryptedSharedPreferences最简单,合规,Google 文档推荐备用方案
FingerprintJS Android高(设备指纹)无(基本信号)需要较高唯一性、防作弊、风控https://github.com/fingerprintjs/fingerprintjs-androidMIT 许可,Kotlin 编写,收集硬件/系统信号生成稳定指纹
TrustDevice-Android很高(多信号+算法)少量可选风控、反欺诈、设备唯一性要求高https://github.com/trustdecision/trustdevice-android轻量级开源设备指纹,号称稳定设备ID
Android_CN_OAID(国内特化)高(OAID/AAID)部分(厂商支持)无(OAID接口)中国市场、广告/统计需OAIDhttps://github.com/gzu-liyujiang/Android_CN_OAID替代 MSA 闭源 SDK,支持华为/小米/OPPO/vivo 等厂商 OAID + AAID
devEyosiyas/AndroidID高(DRM-based)追求无权限设备唯一IDhttps://github.com/devEyosiyas/AndroidID使用 Widevine DRM API 生成稳定ID
传统 ANDROID_ID (SSAID)系统API中高同签名App可共享旧项目兼容Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)Android 8+ 按签名+用户隔离,不建议新项目首选

2026 年最实用推荐组合(XUID 风格解决方案)

1. 首推:Firebase Installation ID(最合规、最稳定)

  • Google 官方强烈推荐用于“标识应用实例”。
  • 自动处理重置、备份等。
  • 集成简单:
     // build.gradle
     implementation("com.google.firebase:firebase-installations:18.x.x")  // 最新版

     // 使用
     FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
         if (task.isSuccessful) {
             val fid = task.result  // 这就是你的 XUID / 设备实例唯一ID
             // 存储或上传到后端与用户账号绑定
         }
     }
     
  • 缺点:依赖 Google Play Services(GMS),鸿蒙/无GMS 设备不可用。
2. 国内市场 + 无 GMS 环境:Android_CN_OAID
  • 专门为中国厂商适配 OAID(开放匿名设备标识)。
  • 支持 fallback 到 AndroidID / GUID / WidevineID 等。
  • 仓库活跃,个人开发者友好(MSA 官方 SDK 企业才能用)。
  • 集成后可得到 OAID/VAID/AAID,根据需求选。
3. 高唯一性需求(防多开、刷量、模拟器)→ 指纹方案
  • FingerprintJS Android 或 TrustDevice-Android。
  • 生成类似 visitorId 的字符串,基于 CPU、屏幕、字体、传感器等 20+ 信号。
  • 即使卸载重装,同一物理设备大概率相同(80-95%+ 准确率)。
  • 完全开源、无后门。
4. 极简自实现 XUID(无任何依赖)
   object XUID {
       private const val PREF_KEY = "xuid"

       fun getOrCreate(context: Context): String {
           val prefs = context.getSharedPreferences("secure_prefs", Context.MODE_PRIVATE)
           var id = prefs.getString(PREF_KEY, null)
           if (id.isNullOrBlank()) {
               id = UUID.randomUUID().toString()
               prefs.edit().putString(PREF_KEY, id).apply()
           }
           return id!!
       }
   }
   
  • 再结合 ANDROID_ID 或 Build.FINGERPRINT 做 salt,进一步提升区分度。