华为HarmonyOS打造开放合规的广告生态 - Banner广告

news/2024/11/13 6:35:50/

场景介绍

Banner广告是在应用程序顶部、中部或底部占据一个位置的矩形图片,广告内容每隔一段时间会自动刷新。

接口说明

接口名

描述

AutoAdComponent(adParam: advertising.AdRequestParams, adOptions: advertising.AdOptions, displayOptions: advertising.AdDisplayOptions, interactionListener: advertising.AdInteractionListener): void

展示广告,通过AdRequestParams、AdOptions进行广告请求参数设置,通过AdDisplayOptions进行广告展示参数设置,通过AdInteractionListener监听广告状态回调。

开发步骤

  1. 获取OAID。

    如果想要为用户更精准的推送广告,可以在请求参数AdRequestParams中添加oaid属性。

    如何获取OAID参考获取OAID信息。

    说明

    使用以下示例中提供的测试广告位必须先获取OAID信息。

  2. 请求和展示广告。

    在您的页面中使用AutoAdComponent组件展示Banner广告

    请求广告关键参数如下所示:

    请求广告参数名

    类型

    必填

    说明

    adType

    number

    请求广告类型,Banner广告类型为8。

    adId

    string

    广告位ID。

    • 如果仅调测广告,可使用测试广告位ID:testw6vs28auh3。
    • 如果要接入正式广告,则需要申请正式的广告位ID。可在应用发布前进入流量变现官网,点击“开始变现”,登录鲸鸿动能媒体服务平台进行申请,具体操作详情请参见展示位创建。

    adWidth

    number

    广告位宽,单位vp。宽和高支持360*57和360*144两种尺寸。

    adHeight

    number

    广告位高,单位vp。宽和高支持360*57和360*144两种尺寸。

    oaid

    string

    开放匿名设备标识符,用于精准推送广告。不填无法获取到个性化广告。

    展示广告关键参数如下所示:

    展示广告参数名

    类型

    必填

    说明

    refreshTime

    number

    Banner广告轮播时间。单位ms,取值范围[30000, 120000]。

    如果不设置或取值为非数字或小于等于0的数字,则不轮播。设置小于30000的数字取值30000,设置大于120000的数字取值120000。

    示例代码如下所示:
     
    1. import { advertising, AutoAdComponent, identifier } from '@kit.AdsKit';
    2. import { hilog } from '@kit.PerformanceAnalysisKit';
    3. import { BusinessError } from '@kit.BasicServicesKit';
    4. @Entry
    5. @Component
    6. struct Index {
    7. @State adParam: advertising.AdRequestParams = {
    8. // 广告类型:Banner广告
    9. adType: 8,
    10. // 'testw6vs28auh3'为测试专用的广告位ID,App正式发布时需要改为正式的广告位ID
    11. adId: 'testw6vs28auh3',
    12. // 广告位宽
    13. adWidth: 360,
    14. // 广告位高
    15. adHeight: 57,
    16. // 开放匿名设备标识符
    17. oaid: ''
    18. };
    19. private adOptions: advertising.AdOptions = {
    20. // 是否允许流量下载0:不允许,1:允许,不设置以广告主设置为准
    21. allowMobileTraffic: 0,
    22. // 是否希望根据 COPPA 的规定将您的内容视为面向儿童的内容: -1默认值,不确定 0不希望 1希望
    23. tagForChildProtection: -1,
    24. // 是否希望按适合未达到法定承诺年龄的欧洲经济区 (EEA) 用户的方式处理该广告请求: -1默认值,不确定 0不希望 1希望
    25. tagForUnderAgeOfPromise: -1,
    26. // 设置广告内容分级上限: W: 3+,所有受众 PI: 7+,家长指导 J:12+,青少年 A: 16+/18+,成人受众
    27. adContentClassification: 'A'
    28. };
    29. private displayOptions: advertising.AdDisplayOptions = {
    30. // 广告轮播的时间间隔,单位ms,取值范围[30000, 120000]
    31. refreshTime: 30000
    32. }
    33. private ratio: number = 1;
    34. private adWidth: number = -1;
    35. private adHeight: number = -1;
    36. @State visibilityState: Visibility = Visibility.Visible;
    37. aboutToAppear() {
    38. try {
    39. // 使用Promise回调方式获取OAID
    40. identifier.getOAID().then((data) => {
    41. this.adParam.oaid = data;
    42. hilog.info(0x0000, 'testTag', '%{public}s', `Succeeded in getting adsIdentifierInfo by promise`);
    43. }).catch((error: BusinessError) => {
    44. hilog.error(0x0000, 'testTag', '%{public}s',
    45. `Failed to get adsIdentifierInfo, code: ${error.code}, message: ${error.message}`);
    46. })
    47. } catch (error) {
    48. hilog.error(0x0000, 'testTag', '%{public}s', `Catch err, code: ${error.code}, message: ${error.message}`);
    49. }
    50. if (this.adParam?.adWidth && typeof (this.adParam?.adWidth) === 'number' && this.adParam?.adWidth > 0) {
    51. this.adWidth = this.adParam?.adWidth;
    52. }
    53. if (this.adParam?.adHeight && typeof (this.adParam?.adHeight) === 'number' && this.adParam?.adHeight > 0) {
    54. this.adHeight = this.adParam?.adHeight;
    55. }
    56. if (this.adWidth > 0 && this.adHeight > 0) {
    57. this.ratio = this.adWidth / this.adHeight;
    58. }
    59. }
    60. build() {
    61. if (this.adParam.oaid) {
    62. Stack({ alignContent: Alignment.Bottom }) {
    63. this.buildBannerView()
    64. }
    65. }
    66. }
    67. @Builder
    68. buildBannerView() {
    69. Row() {
    70. AutoAdComponent({
    71. adParam: this.adParam,
    72. adOptions: this.adOptions,
    73. displayOptions: this.displayOptions,
    74. interactionListener: {
    75. onStatusChanged: (status: string, ad: advertising.Advertisement, data: string) => {
    76. hilog.info(0x0000, 'testTag', '%{public}s', `status is ${status}`);
    77. switch (status) {
    78. case AdStatus.AD_OPEN:
    79. hilog.info(0x0000, 'testTag', '%{public}s', 'Status is onAdOpen');
    80. break;
    81. case AdStatus.AD_CLICKED:
    82. hilog.info(0x0000, 'testTag', '%{public}s', 'Status is onAdClick');
    83. break;
    84. case AdStatus.AD_CLOSED:
    85. hilog.info(0x0000, 'testTag', '%{public}s', 'Status is onAdClose');
    86. this.visibilityState = Visibility.None;
    87. break;
    88. case AdStatus.AD_LOAD:
    89. hilog.info(0x0000, 'testTag', '%{public}s', 'Status is onAdLoad');
    90. break;
    91. case AdStatus.AD_FAIL:
    92. hilog.error(0x0000, 'testTag', '%{public}s', 'Status is onAdFail');
    93. this.visibilityState = Visibility.None;
    94. break;
    95. }
    96. }
    97. }
    98. })
    99. }
    100. .width('100%')
    101. .aspectRatio(this.ratio)
    102. .visibility(this.visibilityState)
    103. }
    104. }
    105. enum AdStatus {
    106. AD_LOAD = 'onAdLoad',
    107. AD_FAIL = 'onAdFail',
    108. AD_OPEN = 'onAdOpen',
    109. AD_CLICKED = 'onAdClick',
    110. AD_CLOSED = 'onAdClose',
    111. AD_REWARDED = 'onAdReward',
    112. AD_VIDEO_START = 'onVideoPlayBegin',
    113. AD_COMPLETED = 'onVideoPlayEnd'
    114. }

http://www.ppmy.cn/news/1545750.html

相关文章

spark的学习-03

RDD的创建的两种方式: 方式一:并行化一个已存在的集合 方法:parallelize 并行的意思 将一个集合转换为RDD 方式二:读取外部共享存储系统 方法:textFile、wholeTextFile、newAPIHadoopRDD等 读取外部存储系统的数…

【求职】个人介绍

写这个主要原因想让别人了解你吧,工作跟恋爱一样喜欢才能好好去做,不然都是痛苦。最后可能钱没挣到还有一身病。我也面试很多人,面试最大痛点就是无法短时间内了解对方,面试者自己不说,我如果问不到对方优势&#xff0…

Python调用苏信通接口发送短信

毫无征兆的情况下,业务经理通知我,融合云信下架了,当时心里就是一段五味陈杂啊,关键咱也没得选啊,看来接口是要重新开发了。好在业务经理又推荐了苏信通,登录了UI之后,返现功能对比融合云信少了…

【go从零单排】泛型(Generics)、链表

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,泛型(Generics)允许你编写可以处理…

WiFi一直获取不到IP地址是怎么回事?

在当今这个信息化时代,WiFi已成为我们日常生活中不可或缺的一部分。无论是家庭、办公室还是公共场所,WiFi都为我们提供了便捷的无线互联网接入。然而,有时我们可能会遇到WiFi连接后无法获取IP地址的问题,这不仅影响了我们的网络使…

UE5.4 PCG 获取地形Layer

使用AttributeFilter:属性过滤器 节点 设置地形Layer名称和权重 效果:

基于汇编语言实现的彩色黑白棋游戏

一、软件背景介绍 1.1 背景介绍 黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。 黑白棋是 19 世纪…

我自己nodejs练手时常用的一些库基础用法

我自己在使用nodejs以及前端实战练习时常用的一些库的基本使用 1.bcrypt //注册账号时,给密码加密 password是前端传过来的密码,hashPassword是存到数据库中的密码 const bcrypt require(bcrypt) const hashPassword bcrypt.hash(password,10) //登…