HarmonyOS鸿蒙Next中OAID、AAID和ODID分别是什么,如何获取?
HarmonyOS鸿蒙Next中OAID、AAID和ODID分别是什么,如何获取? OAID、AAID和ODID分别是什么,如何获取?
背景知识:
1. OAID(开放匿名设备标识符)
定义:非永久性设备级标识符,用于保护用户隐私的广告跟踪和转化分析。
特性:
- 同一设备上不同应用获取的OAID相同123。
- 受用户“跨应用关联访问权限”开关控制:开启时获取有效值,关闭时返回全。
- 重置场景:设备恢复出厂设置或用户手动重置跟踪权限。
- 使用场景:广告转化归因、跨应用行为分析。
2. AAID(应用匿名标识符)
定义:应用实例级标识符,仅存在于应用安装周期内,用于匿名统计和推送。
特性:
- 每个应用实例唯一,与设备无关。
- 重置场景:应用卸载、清除数据或设备恢复出厂设置。
- 使用场景:消息推送、应用实例跟踪。
3. ODID(开发者匿名设备标识符)
定义:开发者级设备标识符,用于同一开发者多应用间的设备识别。
特性:
- 同一设备上同一开发者的不同应用获取的ODID相同135。
- 重置场景:设备恢复出厂设置或该开发者所有应用被卸载。
- 使用场景:跨应用用户行为分析、开发者级数据聚合。
问题解决:
1. OAID(开放匿名设备标识符)
获取方法:
import { identifier } from '@kit.AdsKit';
identifier.getOAID().then((data: string) => {
const oaid: string = data;
});
参考地址:获取OAID
2. AAID(应用匿名标识符)
获取方法:
import { AAID } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
AAID.getAAID().then((data: string) => {
hilog.info(0x0000, 'testTag', 'Succeeded in getting AAID');
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', err.code, err.message);
});
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', e.code, e.message);
}
参考地址:获取AAID
3. ODID(开发者匿名设备标识符)
获取方法:
import { deviceInfo } from '@kit.BasicServicesKit';
const odid: string = deviceInfo.ODID;
console.info(`ODID: ${odid}`);
参考地址:获取OOID
更多关于HarmonyOS鸿蒙Next中OAID、AAID和ODID分别是什么,如何获取?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
【问题分析】
-
OAID是开放匿名设备标识符,非永久性。OAID保护用户隐私,提供个性化广告,支持广告转化分析。
-
AAID是应用匿名标识符,标识应用实例,只存在于安装期,长度32位。AAID具有更好的隐私属性。
-
ODID:开发者匿名设备标识符,它主要用于开放给开发者的设备标识,同一设备上运行的同一个开发者的应用,ODID相同。
【解决方案】
- 获取OAID
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;
}
【参考文档】
开放匿名设备标识服务-Ads Kit(广告服务)-应用服务 - 华为HarmonyOS开发者
- 获取AAID
export default class EntryAbility extends UIAbility {
// 入参want与launchParam并未使用,为初始化项目时自带参数
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
// 获取AAID
try {
const aaid: string = await AAID.getAAID();
hilog.info(0x0000, 'testTag', 'Succeeded in getting AAID.');
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', e.code, e.message);
}
}
}
【参考文档】
获取AAID-Push Kit(推送服务)-应用服务 - 华为HarmonyOS开发者
- 获取ODID
let odid: string = deviceInfo.ODID;
// 输出结果:the value of the ODID is :1234a567-XXXX-XXXX-XXXX-XXXXXXXXXXXX
console.info('the value of the deviceInfo odid is :' + odid);
【参考文档】
[@ohos.deviceInfo (设备信息)-设备管理-ArkTS API-Basic Services Kit(基础服务)-基础功能-系统 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-device-info#常量)
【总结】
楼主可以参考一下上面整理的内容。
您好,
OAID(Open Anonymous Device Identifier):是一种非永久性设备标识符,基于开放匿名设备标识符,可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析。
OAID的获取:
应用在需要获取OAID信息时,应通过调用requestPermissionsFromUser接口获取对应权限。注意:其中context的获取方式参见https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-context-stage#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;
}
AAID(Anonymous Application Identifier):应用匿名标识符,标识运行在移动智能终端设备上的应用实例,只有该应用实例才能访问该标识符,它只存在于应用的安装期,总长度36位。与无法重置的设备级硬件ID相比,AAID具有更好的隐私权属性。
AAID的获取:
1.导入AAID模块及相关公共模块。
import { AAID } from '@kit.PushKit';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
2.调用AAID.getAAID()方法获取AAID信息。
export default class EntryAbility extends UIAbility {
// 入参want与launchParam并未使用,为初始化项目时自带参数
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
// 获取AAID
try {
const aaid: string = await AAID.getAAID();
hilog.info(0x0000, 'testTag', 'Succeeded in getting AAID.');
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', e.code, e.message);
}
}
}
ODID(Open Developer Identifier):开发者匿名设备标识符,它主要用于开放给开发者的设备标识,同一设备上运行的同一个开发者的应用,ODID相同。帮助开发者更好地理解用户在不同应用间的行为,从而提供更个性化的服务和推荐。
ODID的获取:
通过 deviceInfo.ODID 接口直接获取
import { deviceInfo } from '@kit.BasicServicesKit';
let odid: string = deviceInfo.ODID; // 返回当前设备的ODID字符串
总结:
通过deviceInfo获取ODID
通过identifier.getOAID获取OAID
通过AAID.getAAID获取AAID
可以看看 OAID、AAID和ODID分别是什么,如何获取设备的唯一标识- 华为HarmonyOS开发者
1、OAID 获取:
import { identifier } from '@kit.AdsKit';
// Promise方式
identifier.getOAID().then((oaid) => {
console.log(`OAID: ${oaid}`);
}).catch((err) => {
console.error(`获取失败: ${err.code}, ${err.message}`);
});
2、AAID 获取:
import { AAID } from '@kit.PushKit';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class EntryAbility extends UIAbility {
// 入参want与launchParam并未使用,为初始化项目时自带参数
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
// 获取AAID
try {
const aaid: string = await AAID.getAAID();
hilog.info(0x0000, 'testTag', 'Succeeded in getting AAID.');
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', e.code, e.message);
}
}
}
3、ODID 获取:
import { deviceInfo } from '@kit.BasicServicesKit';
let odid: string = deviceInfo.ODID;
// 输出结果:the value of the ODID is :1234a567-XXXX-XXXX-XXXX-XXXXXXXXXXXX
console.info('the value of the deviceInfo odid is :' + odid);
OAID是匿名设备标识符,用于广告追踪,AAID是应用匿名标识符,ODID是开放设备标识符。在HarmonyOS Next中,可通过系统接口获取。OAID和AAID通过@ohos.device.attestation模块的getOaid()和getAaid()方法获取。ODID通过@ohos.device.deviceInfo模块的getOdId()方法获取。需在应用配置文件中声明相应权限。
在HarmonyOS Next中,OAID、AAID和ODID是用于设备标识和广告追踪的标识符,具体说明如下:
OAID(Open Anonymous Identifier,开放匿名标识符)
- 用于替代传统设备标识(如IMEI),保护用户隐私。
- 获取方式:通过
[@ohos](/user/ohos).device.deviceInfo模块的getOAID()方法异步获取。 - 示例代码:
import deviceInfo from '[@ohos](/user/ohos).device.deviceInfo'; deviceInfo.getOAID((err, data) => { if (err) { console.error('获取OAID失败'); } else { console.log('OAID: ' + data); } });
AAID(Application Anonymous Identifier,应用匿名标识符)
- 基于OAID生成,同一设备上不同应用具有不同的AAID,用于应用级广告追踪。
- 获取方式:通过广告服务SDK(如HMS Core)提供的接口获取,具体依赖华为移动服务集成。
ODID(Open Device Identifier,开放设备标识符)
- 用于设备管理和服务标识,系统级唯一标识。
- 获取方式:通过
[@ohos](/user/ohos).device.deviceInfo模块的getODID()方法异步获取。 - 示例代码:
deviceInfo.getODID((err, data) => { if (err) { console.error('获取ODID失败'); } else { console.log('ODID: ' + data); } });
注意事项:
- 获取OAID和ODID需在
module.json5中声明ohos.permission.READ_DEVICE_IDENTIFIER权限。 - AAID的获取需集成HMS Core广告服务Kit,并遵循相关配置流程。
- 这些标识符均基于用户授权和隐私规范,禁止用于非法规用途。

