当前位置: 首页 > news >正文

20、鸿蒙学习——OAID、AAID、ODID

1、OAID

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

  • OAID是设备级标识符,同一台设备上不同的App获取到的OAID值一致
  • OAID的获取受应用的跟踪开关影响:当应用的跟踪开关开启时,该应用可获取到非全0的有效OAID;当应用的跟踪开关关闭时,该应用仅能获取到全0的OAID。
  • 同一台设备上首个应用开启应用跟踪开关时,会首次生成OAID。

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

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

  • 用户恢复手机出厂设置
  • 用户操作重置OAID。

接口说明

(1)获取OAID,通过Promise异步返回结果。
 

getOAID(): Promise<string>

(2)获取OAID,通过Callback回调返回值。

getOAID(callback: AsyncCallback<string>): void

说明:
如调用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。

获取OAID

(1)在模块的module.json5文件中,申请广告跟踪权限 ohos.permission.APP_TRACKING_CONSENT,该权限为user_grant权限,当申请的权限为user_grant时,reason,abilities标签必填,示例代码如下:

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

(2)应用在需要获取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;
}

2、AAID

应用匿名标识符,标识运行在移动智能终端设备上的应用实例,只有该应用实例才能访问该标识,它只存在于应用的安装期,总长度32位。与无法重置的设备级硬件ID相比,AAID具有更好的隐私权属性。AAID具有以下特性:

  • 匿名化、无隐私风险:AAID和已有的任何标识符都不关联,并且每个应用只能访问自己的AAID。
  • 同一个设备上,同一个开发者的多个应用,AAID取值不同。
  • 同一个设备上,不同开发者的应用,AAID取值不同。
  • 不同设备上,同一个开发者的应用,AAID取值不同。
  • 不同设备上,不同开发者的应用,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> {// 获取AAIDtry {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

开发者匿名设备标识符,它主要用于开放给开发者的设备标识,同一个设备上运行的同一个开发者的应用,ODID相同。帮助开发者更好地理解用户在不同应用间的行为,从而提供更个性化的服务和推荐。ODID具有以下特性:

  • 同一设备上运行的同一个开发者的应用,ODID相同。
  • 同一设备上不同开发者的应用,ODID不同。
  • 不同设备上同一个开发者的应用,ODID不同。
  • 不同设备上不同开发者的应用,ODID不同。

注意:ODID会在以下场景重新生成:

  • 手机恢复出厂设置。
  • 同一设备上同一个开发者(developerId相同)的应用全部卸载后重新安装时。

ODID生成规则:根据签名信息里developerId解析出的groupId生成,developerId规则为groupId.developerId,若无groupId则取整个develperId作为groupId。

同一个设备上运行的同一个开发者(developerId相同)的应用,ODID相同。

同一个设备上不同开发者(developerId不同)的应用,ODID不同。

不同设备上同一个开发者(developerId相同)的应用,ODID不同。

不同设备上不同开发者(developerId不同)的应用,ODID不同。

说明:数据长度为37字节。示例:1234a567-XXXX-XXXX-XXXX-XXXXXXXXXXXX

import { deviceInfo } from '@kit.BasicServicesKit';
  static getODID(): string {return deviceInfo.ODID}

4、UDID

设备Udid

说明:数据长度为65字节。可作为设备唯一识别码。

需要权限:ohos.permission.sec.ACCESS_UDID(该权限只允许系统应用及企业定制应用申请)

示例:9D6AABD147XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXE5536412

参考:文档中心

http://www.xdnf.cn/news/464995.html

相关文章:

  • openEuler24.03 LTS下安装MySQL8.0.42
  • 气动排渣煤粉炉专用V型球阀——法兰连接耐磨阀门生产厂家解析-耀圣
  • 详解 Zephyr RTOS:架构、功能与开发指南
  • Function Calling
  • 106. 从中序与后序遍历序列构造二叉树
  • 【206】VS2022 C++ 实现无符号32位整数和IP地址字符串互相转换
  • element-ui的el-cascader增加全选按钮实现(附源码)
  • DB-GPT扩展自定义app配置说明
  • 【网络编程】九、详解 HTTPS 加密原理
  • 鸿蒙 ArkUI - ArkTS 组件 官方 UI组件 合集
  • AEO认证的好处 ,如何快速获取AEO认证?
  • Java应用OOM排查:面试通关“三部曲”心法
  • android display 笔记(十四)VAU 和GSP 分别代表什么
  • fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请
  • 企业级Javaweb开发常用注解
  • macOS中5000端口被控制中心占用问题
  • 洛谷P4907题解
  • Milvus(23):过滤
  • 《Python星球日记》 第81天:回看图像生成与风格迁移
  • Python机器学习笔记(二十三 模型评估与改进-网格搜索)
  • AcroForm 文档(打开时)级脚本对比 Excel VBA 参考
  • 关于多线程的Redis模型
  • 数据科学和机器学习的“看家兵器”——pandas模块 之二
  • c++从入门到精通(四)--动态内存,模板与泛型编程
  • python克洛伊婚纱摄影预约管理系统
  • P2679 [NOIP 2015 提高组] 子串
  • Linux之Yum源与Nginx服务篇
  • Node.js 安装 + React Flow 快速入门:环境安装与项目搭建
  • Spring Boot 和 Jedis版本搭配的建议
  • 【言语】刷题5