细解鸿蒙之元服务UX上架标准-启动无开屏、无扑脸广告
是否必须遵守:必须
标准项描述:
通过元服务图标、服务卡片、场景调用等方式打开元服务时,无开屏或弹窗界面干扰。进入首页后,非用户主动操作,不允许出现扑脸广告弹框干扰用户。若有广告运营诉求,可在设备屏幕底部 1/4 区域配置少量弹窗。
测试方法:启动元服务,元服务系统加载完后,直接进入首页。
判定标准:元服务加载完后,直接进入首页,无其他开屏、弹窗等广告信息干扰。
综合意义
提升用户体验:启动无开屏、无扑脸广告能够让用户在打开应用时更加顺畅、高效,避免被广告干扰,从而提升用户对应用的满意度和忠诚度。
保护用户隐私:减少广告的直接推送,降低了用户个人信息被收集和滥用的风险,保护了用户的隐私。
优化应用环境:营造一个更加友好、纯净的应用环境,有助于提升应用的整体质量和形象,促进应用的健康发展。--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
import { advertising } from '@kit.AdsKit';
import { router } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
// 标记为入口组件
@Entry
// 声明为组件
@Component
export struct LoadAd {
// 获取 UI 能力上下文
private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
build() {
Column() {
Column() {
// 创建一个按钮,点击后请求原生广告
Button('请求原生广告', { type: ButtonType.Normal, stateEffect: true }).onClick(() => {
this.requestAd();
})
}
.width('100%')
.height('80%')
.justifyContent(FlexAlign.Center)
}
.width('100%')
.height('100%')
}
private requestAd(): void {
// 广告展示选项,包括是否静音等
const adDisplayOptions: advertising.AdDisplayOptions = {
// 是否静音,默认不静音
mute: false
};
// 原生广告配置
const adOptions: advertising.AdOptions = {
// 设置是否请求非个性化广告
nonPersonalizedAd: 1,
// 是否允许流量下载 0:不允许,1:允许,不设置以广告主设置为准
allowMobileTraffic: 0,
// 是否希望根据 COPPA 的规定将您的内容视为面向儿童的内容: -1 默认值,不确定 0 不希望 1 希望
tagForChildProtection: -1,
// 是否希望按适合未达到法定承诺年龄的欧洲经济区 (EEA) 用户的方式处理该广告请求: -1 默认值,不确定 0 不希望 1 希望
tagForUnderAgeOfPromise: -1,
// 设置广告内容分级上限: W: 3+, 所有受众 PI: 7+, 家长指导 J:12+, 青少年 A: 16+/18+,成人受众
adContentClassification: 'A'
};
// 原生广告请求参数
const nativeVideoAdReqParams: advertising.AdRequestParams = {
// 'testu7m3hc4gvm'为测试专用的广告位 ID,应用正式发布时需要改为正式的广告位 ID
adId: 'testu7m3hc4gvm',
adType: 3,
adCount: 1,
// 原生广告自定义扩展参数。等所有广告素材下载完后再回调
enableDirectReturnVideoAd: true
};
// 广告请求回调监听器
const adLoaderListener: advertising.AdLoadListener = {
// 广告请求失败回调
onAdLoadFailure: (errorCode: number, errorMsg: string) => {
hilog.error(0x0000, 'testTag', '%{public}s',
`Failed to request ad, message: ${errorMsg}, error code: ${errorCode}`);
},
// 广告请求成功回调
onAdLoadSuccess: (ads: Array<advertising.Advertisement>) => {
hilog.info(0x0000, 'testTag', '%{public}s', `Succeeded in requesting ad`);
// 调用原生广告展示页面
routePage('pages/NativeAdPage', ads, adDisplayOptions);
}
};
// 创建 AdLoader 广告对象
const load: advertising.AdLoader = new advertising.AdLoader(this.context);
// 调用广告请求接口
load.loadAd(nativeVideoAdReqParams, adOptions, adLoaderListener);
}
}
// 异步函数,用于路由到页面
async function routePage(pageUri: string, ads: Array<advertising.Advertisement | null>,
displayOptions: advertising.AdDisplayOptions) {
let options: router.RouterOptions = {
url: pageUri,
params: {
ads: ads,
displayOptions: displayOptions
}
};
try {
// 推送 URL 进行页面路由
router.pushUrl(options);
} catch (error) {
hilog.error(0x0000, 'testTag', '%{public}s',
`Failed to routePage callback, code: ${error.code}, msg: ${error.message}`);
}
}
PS:实际项目中如有出入,请告知博主,博主会第一时间修改得哇~