中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
如何展示一个贴片广告
微信扫码分享
import { router, Prompt } from '@kit.ArkUI'; import { advertising, identifier } from '@kit.AdsKit'; import { abilityAccessCtrl, common } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; const TAG = 'Ads Demo-LoadAd'; /** * 流量变现服务演示页面 */ @Entry @Component export struct LoadAd { private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; private oaid: string = ''; // 广告展示参数 private adDisplayOptions: advertising.AdDisplayOptions = { // 是否静音,默认不静音 mute: false } // 贴片广告配置 private adOptionsPlacementAd: advertising.AdOptions = { totalDuration: 30, placementAdCountDownDesc: encodeURI('VIP免广告'), // 是否允许流量下载 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' } // 贴片广告请求参数 private placementAdReqParams: advertising.AdRequestParams = { adId: 'testy3cglm3pj0', adType: AdType.PLACEMENT_AD, adCount: 1 } // 贴片预加载广告请求参数 private placementAdPreloadReqParams: advertising.AdRequestParams = { adId: 'testy3cglm3pj0', adType: AdType.PLACEMENT_AD, adCount: 1, // 用于区分普通请求和素材预加载请求,默认值false,默认是普通请求 isPreload: true } aboutToAppear() { try { // 使用Promise回调方式获取OAID this.requestOAIDTrackingConsentPermissions(this.context); } catch (error) { hilog.error(0x0000, TAG, '%{public}s', `catch err, code: ${error.code}, message: ${error.message}`); } hilog.info(0x0000, TAG, '%{public}s', 'aboutToAppear'); } build() { Column() { this.actionBar($r("app.string.placement_ads_demo_title")) Column() { // 跳转到贴片广告展示页面 this.customButton( $r("app.string.request_placement_ad_btn"), () => { this.requestAd(this.placementAdReqParams, this.adOptionsPlacementAd as advertising.AdOptions); }); // 跳转到贴片广告预加载页面 this.customButton( $r("app.string.request_placement_preload_ad_btn"), () => { this.requestAd(this.placementAdPreloadReqParams, this.adOptionsPlacementAd as advertising.AdOptions); }); }.width('100%').height('80%').justifyContent(FlexAlign.Center) } .width('100%') .height('100%') } private requestAd(adReqParams: advertising.AdRequestParams, adOptions: advertising.AdOptions): void { adReqParams.oaid = this.oaid; // 广告请求回调监听 const adLoaderListener: advertising.AdLoadListener = { // 广告请求失败回调 onAdLoadFailure: (errorCode: number, errorMsg: string) => { hilog.error(0x0000, TAG, '%{public}s', `request ad errorCode is: ${errorCode}, errorMsg is: ${errorMsg}`); Prompt.showToast({ message: 'request ad failed, code is: ' + errorCode + 'message is: ' + errorMsg, duration: 1000 }); }, // 广告请求成功回调 onAdLoadSuccess: (ads: Array<advertising.Advertisement>) => { hilog.info(0x0000, TAG, '%{public}s', 'succeeded in requesting ad!'); // 如果是预加载请求,则仅提示成功状态,不展示广告 if (adReqParams.isPreload === true) { Prompt.showToast({ message: 'request preload succeeded!', duration: 3000 }); return; } // 保存请求到的广告内容用于展示 if (canIUse("SystemCapability.Advertising.Ads")) { if (ads[0].adType === AdType.PLACEMENT_AD) { // 调用贴片广告展示页面 routePage('pages/PlacementAdPage', ads, this.adDisplayOptions, this.adOptionsPlacementAd); } else { hilog.info(0x0000, TAG, '%{public}s', 'error adType'); } } } }; // 创建AdLoader广告对象 const load: advertising.AdLoader = new advertising.AdLoader(this.context); // 调用广告请求接口 hilog.info(0x0000, TAG, '%{public}s', 'request ad!'); load.loadAd(adReqParams, adOptions, adLoaderListener); } private 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, TAG, '%{public}s', 'succeeded in requesting permission'); identifier.getOAID().then((data: string) => { this.oaid = data; hilog.info(0x0000, TAG, '%{public}s', `succeeded in getting adsIdentifierInfo by promise: ${this.oaid}`); }).catch((error: BusinessError) => { hilog.error(0x0000, TAG, '%{public}s', `getAdsIdentifierInfo failed, message: ${error.message}`); }) } else { hilog.info(0x0000, TAG, '%{public}s', 'user rejected'); } }).catch((err: BusinessError) => { hilog.error(0x0000, TAG, '%{public}s', `request permission failed, error: ${err.code} ${err.message}`); }) } catch (err) { hilog.error(0x0000, TAG, '%{public}s', `catch err, code: ${err.code}, msg: ${err.message}`); } } @Builder actionBar(title: Resource | string) { Row() { if (title) { Text(title) .fontSize(24) .fontColor(Color.White) .fontWeight(FontWeight.Medium) .margin({ left: 16 }) } } .width('100%') .height('10%') .padding({ top: 16, bottom: 16, left: 24, right: 24 }) .backgroundColor(Color.Black) } @Builder customButton(mText: string | Resource, mOnClick: (event?: ClickEvent) => void) { Column() { Button(mText) .backgroundColor('#d3d4d6') .fontSize(20) .fontColor('#000') .fontWeight(FontWeight.Normal) .align(Alignment.Center) .type(ButtonType.Capsule) .width('90%') .height(40) .margin({ top: 10, bottom: 5 }) .onClick(mOnClick); } } } enum AdType { // 贴片广告的类型 PLACEMENT_AD = 60 } async function routePage(pageUri: string, ads: Array<advertising.Advertisement | null>, displayOptions: advertising.AdDisplayOptions, adOptions: advertising.AdOptions) { let options: router.RouterOptions = { url: pageUri, params: { ads: ads, displayOptions: displayOptions, adOptions: adOptions } } try { hilog.info(0x0000, TAG, '%{public}s', `routePage + ${pageUri}`); router.pushUrl(options); } catch (error) { hilog.error(0x0000, TAG, '%{public}s', `routePage fail callback, code: ${error.code}, msg: ${error.message}`); } }