获取OAID会遇到以下常见的问题,应该如何解决?
OAID是一种非永久性设备标识符,基于开放匿名设备标识符,可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告,同时三方监测平台也可以向广告主提供转化归因分析。OAID的获取方式参考identifier.getOAID。
针对identifier.getOAID获取异常的问题,主要有以下几种可能的原因:
在应用的module.json5文件中添加ohos.permission.APP_TRACKING_CONSENT权限配置。确保该权限被正确声明,以便应用能够请求获取OAID的权限。该权限为user_grant权限,当申请的权限为user_grant权限时,reason,abilities标签必填,具体申请方式请参见声明权限。
可以通过在应用内提供明确的指引或说明,引导用户前往设置-隐私安全-跨应用关联,手动开启允许"跨应用关联访问权限",告知用户开启该权限的必要性和用途,以提高用户的授权意愿。比如通过代码跳转设置-隐私二级页面。
调用requestPermissionsFromUser接口弹窗,提示并引导用户允许对应权限,示例代码如下所示:
import { BusinessError } from '@kit.BasicServicesKit';
import { abilityAccessCtrl, common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { identifier } from '@kit.AdsKit';
@Entry
@Component
struct Index {
context = this.getUIContext().getHostContext() as common.UIAbilityContext;
@State oaid: string = '';
jumpToSetting() {
let want: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'privacy_settings',
parameters: {
// 传对应应用的包名
pushParams: 'com.example.myapplication'
}
};
this.context.startAbility(want);
}
requestOAIDTrackingConsentPermissions(context: common.Context): void {
// 进入页面时,向用户请求授权广告跨应用关联访问权限
const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
atManager.requestPermissionsFromUser(context, ['ohos.permission.APP_TRACKING_CONSENT']).then((data) => {
if (data.authResults[0] === 0) {
hilog.info(0x0000, 'testTag', '%{public}s', 'succeeded in requesting permission');
identifier.getOAID((err: BusinessError, data: string) => {
if (err.code) {
hilog.error(0x0000, 'testTag', '%{public}s', `get oaid failed, error: ${err.code} ${err.message}`);
} else {
this.oaid = data;
hilog.info(0x0000, 'testTag', '%{public}s', `succeeded in getting oaid by callback , oaid: ${this.oaid}`);
}
});
} else {
hilog.error(0x0000, 'testTag', '%{public}s', 'user rejected');
}
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'testTag', '%{public}s', `request permission failed, error: ${err.code} ${err.message}`);
});
} catch (err) {
hilog.error(0x0000, 'testTag', '%{public}s', `catch err->${err.code}, ${err.message}`);
}
}
build() {
Column({ space: 20 }) {
Button('跳转设置')
.onClick(() => {
this.jumpToSetting();
});
Button('获取oaid')
.onClick(() => {
this.requestOAIDTrackingConsentPermissions(this.context);
});
Text(this.oaid);
}
.height('100%')
.width('100%');
}
}