HarmonyOS鸿蒙Next中OAID、AAID和ODID分别是什么,如何获取?

HarmonyOS鸿蒙Next中OAID、AAID和ODID分别是什么,如何获取? OAID、AAID和ODID分别是什么,如何获取?

6 回复

背景知识:

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


【问题分析】

  1. OAID是开放匿名设备标识符,非永久性。OAID保护用户隐私,提供个性化广告,支持广告转化分析。

  2. AAID是应用匿名标识符,标识应用实例,只存在于安装期,长度32位。AAID具有更好的隐私属性。

  3. ODID:开发者匿名设备标识符,它主要用于开放给开发者的设备标识,同一设备上运行的同一个开发者的应用,ODID相同。

【解决方案】

  1. 获取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开发者

  1. 获取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开发者

  1. 获取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);
      }
    });
    

注意事项

  1. 获取OAID和ODID需在module.json5中声明ohos.permission.READ_DEVICE_IDENTIFIER权限。
  2. AAID的获取需集成HMS Core广告服务Kit,并遵循相关配置流程。
  3. 这些标识符均基于用户授权和隐私规范,禁止用于非法规用途。
回到顶部