【HarmonyOS NEXT】鸿蒙应用OAID广告标识ID设置设备唯一标识 📅 2026/7/15 5:05:09 在 HarmonyOS NEXT 中OAID开放匿名设备标识符是实现个性化广告和转化归因分析的核心标识符也是保护用户隐私前提下替代 IMEI 等永久性设备标识的关键方案。本文将从概念、权限、开发实现到进阶方案为你完整梳理 OAID 的接入与使用。1. OAID 是什么核心特性与业务场景OAID 是一种非永久性设备级标识符格式为 32 位类 UUID如xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。它的核心特性使其成为广告业务场景下的首选标识设备级统一同一台设备上不同应用获取到的 OAID 值相同便于跨应用的数据打通与广告归因。用户可控与重置OAID 并非一成不变。当用户恢复出厂设置或手动重置 OAID通常在“设置 隐私 广告”路径下操作时OAID 会发生改变这保障了用户对隐私的控制权。权限严格管控获取有效 OAID 必须获得用户明确的授权体现了对个人信息保护的重视。基于这些特性OAID 主要服务于以下业务场景个性化广告推荐帮助广告平台向用户推送更相关、干扰更少的广告。广告转化归因帮助广告主和第三方监测平台分析广告点击、安装、激活等转化数据评估广告效果。2. 核心权限ohos.permission.APP_TRACKING_CONSENT要获取 OAID应用必须声明并动态申请ohos.permission.APP_TRACKING_CONSENT权限。这是整个流程中的关键一环。此权限属于user_grant类型意味着应用必须在运行时通过弹窗向用户请求授权。在旧版系统中该权限曾被称为“应用跟踪访问权限”。⚠️ 重要合规提醒在调用获取 OAID 的接口之前应用必须先弹出隐私政策或用户协议窗口清晰告知用户OAID的用途并获得用户的明确同意。未经用户同意直接获取 OAID 的行为涉嫌违反数据采集相关规定。获取 OAID 的返回值与权限状态直接相关具体有以下三种情况权限配置与用户授权状态返回值已配置权限且用户授权“允许”返回有效的OAID(32位UUID格式)已配置权限但用户授权“禁止”返回全零OAID(00000000-0000-0000-0000-000000000000)未配置权限返回全零OAID(00000000-0000-0000-0000-000000000000)3. 开发实战一步步获取OAID以下是接入 OAID 的完整开发步骤直接基于 HarmonyOS NEXT 官方 API。3.1 在module.json5中声明权限首先需要在应用模块的module.json5文件中声明该权限。注意reason字段用于向用户解释申请权限的原因和usedScene字段描述权限使用的场景是必填的。json{ module: { requestPermissions: [ { name: ohos.permission.APP_TRACKING_CONSENT, reason: $string:tracking_reason, // 需在资源文件中定义 usedScene: { abilities: [ EntryAbility // 填写你的Ability名称 ], when: inuse // 仅在前台使用时授权 } } ] } }同时你需要在resources/base/element/string.json文件中定义tracking_reason的内容例如json{ string: [ { name: tracking_reason, value: 为了向您提供更个性化的广告推荐我们需要获取您的广告标识符。 } ] }3.2 动态请求权限并获取OAID在代码中你需要先请求用户授权在授权回调中再调用identifier.getOAID()方法获取标识符。代码示例基于Promisetypescriptimport { abilityAccessCtrl, PermissionRequestResult } from kit.AbilityKit; import { identifier } from kit.AdsKit; import { hilog } from kit.PerformanceAnalysisKit; async function requestOAID(context: Context): Promisestring | undefined { let isPermissionGranted: boolean false; try { const atManager: abilityAccessCtrl.AtManager abilityAccessCtrl.createAtManager(); const result: PermissionRequestResult await atManager.requestPermissionsFromUser(context, [ohos.permission.APP_TRACKING_CONSENT]); isPermissionGranted result.authResults[0] abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; } catch (err) { hilog.error(0x0000, testTag, 请求权限失败。错误码: ${err.code}, 信息: ${err.message}); } if (isPermissionGranted) { hilog.info(0x0000, testTag, 权限授权成功); try { const oaid await identifier.getOAID(); hilog.info(0x0000, testTag, 获取OAID成功: ${oaid}); return oaid; } catch (err) { hilog.error(0x0000, testTag, 获取OAID失败。错误码: ${err.code}, 信息: ${err.message}); } } else { hilog.error(0x0000, testTag, 用户拒绝了权限请求); // 此处可处理用户拒绝权限后的降级逻辑如获取全零OAID或引导用户开启 } return undefined; }代码示例基于Callbacktypescriptimport { abilityAccessCtrl, common } from kit.AbilityKit; import { identifier } from kit.AdsKit; import { BusinessError } from kit.BasicServicesKit; function getOAIDWithCallback(context: common.Context) { const atManager: abilityAccessCtrl.AtManager abilityAccessCtrl.createAtManager(); atManager.requestPermissionsFromUser(context, [ohos.permission.APP_TRACKING_CONSENT]) .then((data) { if (data.authResults[0] 0) { identifier.getOAID((err: BusinessError, data: string) { if (err.code) { console.error(获取OAID失败错误码: ${err.code}); } else { console.info(获取OAID成功: ${data}); } }); } else { console.error(用户拒绝授权); } }).catch((err: BusinessError) { console.error(请求权限失败错误码: ${err.code}); }); }4. 深入理解其他设备标识符对比在HarmonyOS NEXT中除了OAID还有其他几种设备标识符了解它们的区别有助于你在不同场景下做出正确的选择。标识符全称核心特性适用场景权限要求OAID开放匿名设备标识符设备级用户可重置需用户授权广告业务个性化推荐、归因分析ohos.permission.APP_TRACKING_CONSENT(需用户授权)AAID应用匿名标识符应用级卸载或恢复出厂设置后变化应用内推送、应用自身数据分析无需特殊权限但getAAID()接口可用ODID开发者匿名设备标识符同一开发者应用间通用全部卸载重装后变化同一开发者旗下多应用间的用户行为分析无需特殊权限UDID设备唯一标识符永久不变的设备级标识仅限系统应用或特殊授权的企业应用使用ohos.permission.sec.ACCESS_UDID(普通应用无法获取)5. 进阶方案如何实现“卸载后不变”的设备ID在许多业务场景下开发者希望获得一个在应用卸载重装后仍能保持不变的用户或设备标识用于用户身份关联或防止刷单等。官方建议为了贯彻隐私保护理念HarmonyOS NEXT不向三方应用提供卸载后不变的设备级唯一标识符。系统旨在避免应用在用户重置或关闭跟踪后仍能长期追踪同一设备。可行方案通过Asset Store Kit社区和官方论坛中广泛讨论的推荐做法是利用ohos.security.asset(关键资产存储服务)来实现类似iOS的Keychain效果。实现思路生成UUID应用首次启动时使用util.randomUUID()生成一个随机UUID。存储为关键资产通过AssetStoreKit将该UUID存入关键资产并设置IS_PERSISTENT属性为true。此属性可确保在应用卸载时该关键资产仍保留在系统中。读取标识应用每次启动时首先从关键资产中尝试读取该UUID。如果读取成功则作为设备的“持久化”标识如果读取失败如首次安装则重新生成并存储。注意事项使用此方案需要申请ohos.permission.STORE_PERSISTENT_DATA权限该权限同样需要用户授权。此方案生成的标识符是应用自己创建的并非系统级设备标识。它的持久性依赖于系统服务但依然受用户重置、系统升级等因素潜在影响。这只是一个更稳妥的本地持久化方案而非获取“永久设备ID”的通道。总结OAID是鸿蒙应用在广告业务场景下的首选且合规的设备标识方案其核心在于权限管控与用户授权。对于“卸载不变”的需求官方推荐使用Asset Store Kit存储自定义UUID的方案但需明确这并非永久的设备标识。开发者应根据业务合规需求和场景选择最合适的标识方式。