← 资料库索引 ← 官方文档 原始链接 ↗ 🔍
官方文档

华为 开放匿名设备标识符(OAID)服务 原文标题:文档中心

发表时间:(页面未标注)采集时间:2026-10-09 10:49:21来源:developer.huawei.com原文语言:zh状态:抽取受限

内容概要总结

华为 HarmonyOS 开发者文档「获取OAID信息」。核心定义:开放匿名设备标识符(Open Anonymous Device Identifier, OAID)是一种非永久性设备标识符,可在保护用户个人数据隐私安全的前提下向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析;OAID 是基于华为自有算法生成的 32 位类 UUID 标识符,格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。特性:设备级标识符,同一台设备上不同 App 获取到的 OAID 值一样;其获取受应用「跨应用关联访问权限」开关影响(开启得非全 0 的有效 OAID,关闭仅得全 0);同一设备上首个开启该权限的应用会首次生成 OAID;恢复出厂设置或用户重置 OAID 会使其变化。文档还给出 getOAID 接口说明、ohos.permission.APP_TRACKING_CONSENT 权限申请及开发步骤代码示例。

原文内容(原文即中文)

⚠ 说明:原引用链接 developer.huawei.com/consumer/cn/doc/harmonyos-guides/oaid-service 直连抽取 0 文本块(JS 渲染),改用 browser_exec 独立会话渲染后取正文;页面实际重定向至 /consumer/cn/doc/doccenter-capabilities/oaid-service。

获取OAID信息
场景介绍

开放匿名设备标识符(Open Anonymous Device Identifier, OAID,以下简称OAID):是一种非永久性设备标识符,基于开放匿名设备标识符,可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析。

媒体App、广告平台、三方监测平台等开发者,可获取设备上的OAID,您可基于OAID进行个性化广告推荐或广告转化归因分析。

OAID是基于华为自有算法生成的32位类UUID(Universally Unique Identifier)标识符,格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。

OAID的特性:

OAID是设备级标识符,同一台设备上不同的App获取到的OAID值一样。

OAID的获取受应用的“跨应用关联访问权限”开关影响:当应用的“跨应用关联访问权限”开关开启时,该应用可获取到非全0的有效OAID;当应用的“跨应用关联访问权限”开关关闭时,该应用仅能获取到全0的OAID。

同一台设备上首个应用开启应用“跨应用关联访问权限”开关时,会首次生成OAID。

说明

设置项“跨应用关联访问权限”在HarmonyOS NEXT Developer Beta5及更早版本名称为“应用跟踪访问权限”。

OAID会在下述场景中发生变化:

用户将设备恢复出厂设置。

用户操作重置OAID。

约束和限制

开放匿名设备标识服务能力支持Phone、Tablet、PC/2in1设备,并且从API version 20开始,新增支持TV设备。

使用PC/2in1设备时,需要确保设备上智慧营销服务或广告服务的版本在8.4.80.300及以上,版本号可通过选择“设置> 应用和元服务 > 更多应用”查看。

获取OAID信息前,请确保已充分告知用户相关信息并取得用户授权同意。请务必先弹出隐私协议窗口,获得用户的明确同意后再获取OAID。未经用户同意,获取 OAID 将涉嫌违反数据采集相关规定,可能会面临隐私合规风险。

接口说明
接口名 描述
getOAID(): Promise<string> 获取OAID,通过Promise异步返回结果。
getOAID(callback: AsyncCallback<string>): void 获取OAID,通过Callback异步回调返回值。
说明

如调用getOAID接口需要申请ohos.permission.APP_TRACKING_CONSENT权限,且“要求应用请求关联”保持关闭状态。存在如下三种情况:

1.如应用已配置ohos.permission.APP_TRACKING_CONSENT权限,且“跨应用关联访问权限”为“允许”,则返回OAID。

2.如应用已配置ohos.permission.APP_TRACKING_CONSENT权限,且“跨应用关联访问权限”为“禁止”,则返回00000000-0000-0000-0000-000000000000。

3.如应用未配置ohos.permission.APP_TRACKING_CONSENT权限,则返回00000000-0000-0000-0000-000000000000。

开发步骤

在模块的module.json5文件中,申请跨应用关联权限ohos.permission.APP_TRACKING_CONSENT,该权限为user_grant权限,当申请的权限为user_grant权限时,reason,abilities标签必填,配置方式参见requestPermissions标签说明,示例代码如下所示:

{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.APP_TRACKING_CONSENT",
"reason": "$string:reason",
"usedScene": {
"abilities": [
"EntryFormAbility"
],
"when": "inuse"
}
}
]
}
}

应用在需要获取OAID信息时,应通过调用requestPermissionsFromUser接口获取对应权限。

说明

其中context的获取方式参见各类Context的获取方式。示例代码如下所示:

import { abilityAccessCtrl, PermissionRequestResult } from '@kit.AbilityKit';
import { identifier } from '@kit.AdsKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

async function requestOAID(context: Context): Promise<string | 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', Failed to request permission. Code is ${err.code}, message is ${err.message});
}
if (isPermissionGranted) {
hilog.info(0x0000, 'testTag', 'Succeeded in requesting permission');
try {
const oaid = await identifier.getOAID();
hilog.info(0x0000, 'testTag', 'Succeeded in getting OAID');
return oaid;
} catch (err) {
hilog.error(0x0000, 'testTag', Failed to get OAID. Code is ${err.code}, message is ${err.message});
}
} else {
hilog.error(0x0000, 'testTag', 'Failed to request permission. User rejected');
}
return undefined;
}