1c7afe287Sopenharmony_ci# OAID Service Component
2c7afe287Sopenharmony_ci
3c7afe287Sopenharmony_ci## Introduction
4c7afe287Sopenharmony_ci
5c7afe287Sopenharmony_ciThe Open Anonymous Device Identifier (OAID) service facilitates personalized ad placement based on OAIDs, each of which is a non-permanent device identifier. The service provides personalized ads for users while protecting their personal data privacy. It can also interact with third-party tracking platforms to provide conversion attribution analysis for advertisers.
6c7afe287Sopenharmony_ci
7c7afe287Sopenharmony_ci## Directory Structure
8c7afe287Sopenharmony_ci
9c7afe287Sopenharmony_ci```
10c7afe287Sopenharmony_ci/domains/advertising/oaid # Service code of the OAID service component
11c7afe287Sopenharmony_ci├── interfaces                         # API code
12c7afe287Sopenharmony_ci├── profile                            # Service configuration profile
13c7afe287Sopenharmony_ci├── services                           # Service code
14c7afe287Sopenharmony_ci├── test                               # Test cases
15c7afe287Sopenharmony_ci├── LICENSE                            # License file
16c7afe287Sopenharmony_ci└── bundle.json                        # Build file
17c7afe287Sopenharmony_ci```
18c7afe287Sopenharmony_ci
19c7afe287Sopenharmony_ci## How to Use
20c7afe287Sopenharmony_ci
21c7afe287Sopenharmony_ci### Obtaining an OAID
22c7afe287Sopenharmony_ci
23c7afe287Sopenharmony_ciYou can use the APIs provided in this repository to obtain OAIDs.  
24c7afe287Sopenharmony_ci
25c7afe287Sopenharmony_ci1. Request the ad tracking permission.
26c7afe287Sopenharmony_ci
27c7afe287Sopenharmony_ci   Configure the [ohos.permission.APP_TRACKING_CONSENT](https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/security/permission-list.md/) permission in the **module.json5** file of the module.
28c7afe287Sopenharmony_ci
29c7afe287Sopenharmony_ci   ```javascript
30c7afe287Sopenharmony_ci   {
31c7afe287Sopenharmony_ci     "module": {
32c7afe287Sopenharmony_ci       "requestPermissions": [
33c7afe287Sopenharmony_ci         {
34c7afe287Sopenharmony_ci           "name": "ohos.permission.APP_TRACKING_CONSENT" // Request the ad tracking permission.
35c7afe287Sopenharmony_ci         }
36c7afe287Sopenharmony_ci       ]
37c7afe287Sopenharmony_ci     }
38c7afe287Sopenharmony_ci   }
39c7afe287Sopenharmony_ci   ```
40c7afe287Sopenharmony_ci
41c7afe287Sopenharmony_ci2. Request authorization from the user by displaying a dialog box when the application is started.
42c7afe287Sopenharmony_ci
43c7afe287Sopenharmony_ci   ```javascript
44c7afe287Sopenharmony_ci   import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
45c7afe287Sopenharmony_ci   
46c7afe287Sopenharmony_ci   private requestOAIDTrackingConsentPermissions(context: any): void {
47c7afe287Sopenharmony_ci     // Display a dialog box when the page is displayed to request the user to grant the ad tracking permission.
48c7afe287Sopenharmony_ci     const atManager = abilityAccessCtrl.createAtManager();
49c7afe287Sopenharmony_ci     try {
50c7afe287Sopenharmony_ci       atManager.requestPermissionsFromUser(context, ["ohos.permission.APP_TRACKING_CONSENT"]).then((data) => {
51c7afe287Sopenharmony_ci         if (data.authResults[0] == 0) {
52c7afe287Sopenharmony_ci           console.info(`request permission success`);
53c7afe287Sopenharmony_ci         } else {
54c7afe287Sopenharmony_ci           console.info(`user rejected`);
55c7afe287Sopenharmony_ci         }
56c7afe287Sopenharmony_ci       }).catch((err) => {
57c7afe287Sopenharmony_ci         console.error(`request permission failed, error message: ${err.message}`);
58c7afe287Sopenharmony_ci       })
59c7afe287Sopenharmony_ci     } catch(err) {
60c7afe287Sopenharmony_ci       console.error(`catch err->${JSON.stringify(err)}`);
61c7afe287Sopenharmony_ci     }
62c7afe287Sopenharmony_ci   }
63c7afe287Sopenharmony_ci   ```
64c7afe287Sopenharmony_ci
65c7afe287Sopenharmony_ci3. Obtain an OAID.
66c7afe287Sopenharmony_ci
67c7afe287Sopenharmony_ci- Obtain an OAID through the callback function.
68c7afe287Sopenharmony_ci
69c7afe287Sopenharmony_ci  ```javascript
70c7afe287Sopenharmony_ci  import identifier from '@ohos.identifier.oaid';
71c7afe287Sopenharmony_ci  
72c7afe287Sopenharmony_ci  private getOaidByCallback() {
73c7afe287Sopenharmony_ci    try {
74c7afe287Sopenharmony_ci      identifier.getOAID((err, data) => {
75c7afe287Sopenharmony_ci        if (err.code) {
76c7afe287Sopenharmony_ci          console.info(`getAdsIdentifierInfo failed, message: ${err.message}`);
77c7afe287Sopenharmony_ci  	  } else {
78c7afe287Sopenharmony_ci  		const oaid = data;
79c7afe287Sopenharmony_ci  		console.error(`getOaidFromOaidSaAPi by callback success`);
80c7afe287Sopenharmony_ci  	  }
81c7afe287Sopenharmony_ci  	});
82c7afe287Sopenharmony_ci    } catch (err) {
83c7afe287Sopenharmony_ci      console.error(`catch err->${JSON.stringify(err)}`);
84c7afe287Sopenharmony_ci    }
85c7afe287Sopenharmony_ci  }
86c7afe287Sopenharmony_ci  ```
87c7afe287Sopenharmony_ci
88c7afe287Sopenharmony_ci- Obtain an OAID through the promise.
89c7afe287Sopenharmony_ci
90c7afe287Sopenharmony_ci  ```javascript
91c7afe287Sopenharmony_ci  import identifier from '@ohos.identifier.oaid';
92c7afe287Sopenharmony_ci  
93c7afe287Sopenharmony_ci  private getOaidByPromise() {
94c7afe287Sopenharmony_ci    try {
95c7afe287Sopenharmony_ci      // Obtain an OAID.
96c7afe287Sopenharmony_ci      identifier.getOAID().then((data) => {
97c7afe287Sopenharmony_ci        const oaid = data;
98c7afe287Sopenharmony_ci        console.info(`getAdsIdentifierInfo by promise success`);
99c7afe287Sopenharmony_ci      }).catch((err) => {
100c7afe287Sopenharmony_ci        console.error(`getAdsIdentifierInfo failed, message: ${err.message}`);
101c7afe287Sopenharmony_ci      })
102c7afe287Sopenharmony_ci    } catch (err) {
103c7afe287Sopenharmony_ci      console.error(`catch err->${JSON.stringify(err)}`);
104c7afe287Sopenharmony_ci    }
105c7afe287Sopenharmony_ci  }
106c7afe287Sopenharmony_ci  ```
107c7afe287Sopenharmony_ci
108c7afe287Sopenharmony_ci### Resetting the OAID
109c7afe287Sopenharmony_ci
110c7afe287Sopenharmony_ciYou can use the API provided in this repository to reset OAIDs.  The API is a system API.
111c7afe287Sopenharmony_ci
112c7afe287Sopenharmony_ci```javascript
113c7afe287Sopenharmony_ciimport identifier from '@ohos.identifier.oaid';
114c7afe287Sopenharmony_ci 
115c7afe287Sopenharmony_ciprivate resetOaid() {
116c7afe287Sopenharmony_ci  try {
117c7afe287Sopenharmony_ci    identifier.resetOAID();
118c7afe287Sopenharmony_ci  } catch (err) {
119c7afe287Sopenharmony_ci    console.error(`reset oaid catch error: ${err.code} ${err.message}`);
120c7afe287Sopenharmony_ci  }
121c7afe287Sopenharmony_ci}
122c7afe287Sopenharmony_ci```
123c7afe287Sopenharmony_ci
124c7afe287Sopenharmony_ci## Repositories Involved
125