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