• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 广告标识服务
2
3## 获取OAID信息
4
5
6### 场景介绍
7
8开放匿名设备标识符(Open Anonymous Device Identifier, OAID,以下简称OAID):是一种非永久性设备标识符,基于开放匿名设备标识符,可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析。
9
10媒体App、广告平台、三方监测平台等开发者,可获取设备上的OAID,您可基于OAID进行个性化广告推荐或广告转化归因分析。
11
12OAID是基于华为自有算法生成的32位类UUID(Universally Unique Identifier)标识符,格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
13
14OAID的特性:
15- OAID是设备级标识符,同一台设备上不同的App获取到的OAID值一样。
16- OAID的获取受应用的跟踪开关影响:当应用的跟踪开关开启时,该应用可获取到OAID;当应用的跟踪开关关闭时,该应用仅能获取到全0的OAID。
17- 同一台设备上首个应用开启应用跟踪开关时,会首次生成OAID。
18
19OAID会在下述场景中发生变化:
20- 用户恢复手机出厂设置。
21
22### 接口说明
23
24| 接口名 | 描述 |
25| -------- | -------- |
26| [getOAID()](../../reference/apis-ads-kit/js-apis-oaid.md#identifiergetoaid):Promise<string> | 获取OAID,通过Promise异步返回结果。 |
27| [getOAID(callback: AsyncCallback<string>)](../../reference/apis-ads-kit/js-apis-oaid.md#identifiergetoaid-1): void | 获取OAID,通过Callback回调返回值。 |
28
29
30### 开发步骤
31
321. 在模块的module.json5文件中,申请广告跟踪权限[ohos.permission.APP_TRACKING_CONSENT](../../security/AccessToken/permissions-for-all.md#ohospermissionapp_tracking_consent),该权限为user_grant权限,当申请的权限为user_grant权限时,reason,abilities标签必填,配置方式参见[requestPermissions标签说明](../../quick-start/module-configuration-file.md#requestpermissions标签),示例代码如下所示:
33   ```ts
34   {
35     "module": {
36       "requestPermissions": [
37         {
38           "name": "ohos.permission.APP_TRACKING_CONSENT",
39           "reason": "$string:reason",
40           "usedScene": {
41             "abilities": [
42               "EntryFormAbility"
43             ],
44             "when": "inuse"
45           }
46         }
47       ]
48     }
49   }
50   ```
51
522. 在应用启动时触发动态授权弹框,向用户请求授权,用户授权成功后,调用getOAID方法获取OAID信息。其中context的获取方式参见[各类Context的获取方式](../../application-models/application-context-stage.md)。示例代码如下所示:
53   ```ts
54   import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
55   import { BusinessError } from '@ohos.base';
56   import identifier from '@ohos.identifier.oaid';
57   import hilog from '@ohos.hilog';
58   import common from '@ohos.app.ability.common';
59
60   function requestOAIDTrackingConsentPermissions(context: common.Context): void {
61     // 进入页面时触发动态授权弹框,向用户请求授权广告跟踪权限
62     const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
63     try {
64       atManager.requestPermissionsFromUser(context, ["ohos.permission.APP_TRACKING_CONSENT"]).then((data) => {
65         if (data.authResults[0] == 0) {
66           hilog.info(0x0000, 'testTag', '%{public}s', 'request permission success');
67           identifier.getOAID((err: BusinessError, data: string) => {
68			 if (err.code) {
69			   hilog.error(0x0000, 'testTag', '%{public}s', `get oaid failed, error: ${err.code} ${err.message}`);
70			 } else {
71			   const oaid: string = data;
72			   hilog.info(0x0000, 'testTag', '%{public}s', `get oaid by callback success, oaid: ${oaid}`);
73			 }
74           });
75         } else {
76           hilog.info(0x0000, 'testTag', '%{public}s', 'user rejected');
77         }
78       }).catch((err: BusinessError) => {
79         hilog.error(0x0000, 'testTag', '%{public}s', `request permission failed, error: ${err.code} ${err.message}`);
80       })
81     } catch(err) {
82       hilog.error(0x0000, 'testTag', '%{public}s', `catch err->${err.code}, ${err.message}`);
83     }
84   }
85   ```
86