首页 > 其他分享 >【快应用】原生广告下载状态监听案例

【快应用】原生广告下载状态监听案例

时间:2022-12-12 16:34:16浏览次数:54  
标签:原生 adData console ad 案例 nativeAd adId 监听 native

​ 

问题背景:

快应用中下载类原生广告监听下载状态变化接口调用没生效,在上报点击接口里触发下载监听后仅第一次返回状态,之后就不返回了,该如何处理?

cke_468.png

 

问题分析:

快应用在1100版本新增了一个ad-button组件,废弃了原先的原生广告的下载类接口,改用ad-button自带的下载功能。因而在点击下载的时候开发者不知道该在何时去调用监听接口,往往都会在在nativeAd.reportAdClick()和nativeAd.reportAdShow()中调用的下载监听,这就导致出现此类似情况的时候。

 

解决方案:

ad-button在点击的时候就会跳转到广告页面并开启广告下载的,同时ab-button也是支持onclick点击事件的,可以把下载监听接口放到ad-button的点击事件中去。

代码:

      <stack class="stackstyle" onclick="reportNativeClick()">

        <image if="native.isShowImg" class="img" src="{{native.adImgSrc}}"></image>

        <ad-button class="adbtn" onclick="startButton()" valuetype="0" adunitid="{{native.adUnitId}}" adid="{{native.adData.adId}}"></ad-button>

      </stack>
    startButton(event) {

      console.error('start download result is = ', event.resultCode)

      nativeAd.onStatusChanged((data) => {

        console.log('onStatusChanged data = ', data)

        const progress = nativeAd.getDownloadProgress({

          adId: this.native.adData.adId

        })

        console.log('getDownloadProgress progress = ' + progress);

        const status = nativeAd.getAppStatus({

          adId: this.native.adData.adId

        })

        console.log('getAppStatus status = ' + status);

      })

    },

截图:

cke_3436.png

Demo:

<template>

  <div class="item-container">

    <text class="alert">This is native ad demo</text>

    <div if="native.isShow" class="container">

      <text style="margin-bottom: 8px">ad title :{{native.adData.title}}</text>

      <video id="video" if="native.isShowVideo" src="{{native.adVideoSrc}}" autoplay="true" onclick="reportNativeClick()" class="ad-video"></video>

      <stack class="stackstyle" onclick="reportNativeClick()">

        <image if="native.isShowImg" class="img" src="{{native.adImgSrc}}"></image>

        <ad-button class="adbtn" onclick="startButton()" valuetype="0" adunitid="{{native.adUnitId}}" adid="{{native.adData.adId}}"></ad-button>

      </stack>

      <div style="flex-direction: row; width: 100%">

        <text style="width: 100%">ad source:{{native.adData.source}}</text>

        <image class="closeImg" src="/Common/close.png" onclick="closeAd"></image>

      </div>

    </div>

 

    <text if="native.isShowData">{{ native.adData }}</text>

    <text if="native.errStr">{{ native.errStr }}</text>

  </div>

</template>

<style>

  .container {

    flex-direction: column;

    margin-top: 20px;

    width: 100%;

    margin-bottom: 50px;

  }

  .stackstyle {

    width: 100%;

    height: 300px;

  }

  .img {

    width: 100%;

    resize-mode: contain;

  }

  .closeImg {

    width: 48px;

    height: 48px;

    flex-shrink: 0;

  }

  .alert {

    font-size: 40px;

    margin-top: 20px;

    margin-bottom: 20px;

  }

  .item-container {

    margin-top: 50px;

    padding: 20px;

    width: 100%;

    flex-direction: column;

    align-items: center;

    align-content: center;

  }

  .ad-video {

    object-fit: contain;

    width: 100%;

    height: 415px;

  }

  .btn {

    height: 80px;

    width: 60%;

    background-color: #00bfff;

    color: #ffffff;

    border-radius: 20px;

    margin-bottom: 20px;

  }

  .btn:active {

    background-color: #058fbd;

  }

  .adbtn {

    width: 200px;

    height: 50px;

    color: #ffffff;

    background-color: #00bfff;

    border-radius: 8px;

    position: absolute;

    align-self: flex-end;

    bottom: 20px;

    right: 20px;

  }

  .adbtn:active {

    background-color: #058fbd;

  }

</style>

<script>

  import ad from "@service.ad";

  import prompt from "@system.prompt";

  let nativeAd;

  export default {

    data: {

      componentName: "ad",

      provider: "",

      native: {

        adUnitId: "testb65czjivt9",

        isShow: false,

        adData: {},

        isShowImg: true,

        isShowVideo: true,

        isShowData: true,

        errStr: "",

        btnTxt: "",

        adImgSrc: "https://cs02-pps-drcn.dbankcdn.com/cc/creative/upload/20191226/b750592e-04be-4132-9971-52494b1e5b43.jpg",

        adVideoSrc: ""

      }

    },

    onInit() {

      this.$page.setTitleBar({ text: "Native Ad" });

    },

    onReady(options) {

      console.info("native ad onReady");

      this.showNativeAd();

    },

    onShow(options) {

      if (this.native.isShow) {

        this.reportNativeShow();

      }

    },

    getAdProvider: function () {

      this.provider = ad.getProvider();

      prompt.showToast({

        message: "getProvider : " + this.provider,

        duration: 2000,

        gravity: "center"

      });

    },

    isDownloadAd(creativeType) {

      let downloadTypes = [103, 106, 107, 108, 101, 102, 110];

      return downloadTypes.includes(creativeType);

    },

    showNativeAd() {

      var that = this;

      this.getAdProvider();

      if (this.provider !== "huawei") {

        console.info("the device  does not support ad.");

        return;

      }

      nativeAd = ad.createNativeAd({ adUnitId: this.native.adUnitId });

      nativeAd.onLoad(data => {

        console.info("ad data loaded: " + JSON.stringify(data));

        this.native.adData = data.adList[0];

        if (this.native.adData) {

          if (this.native.adData.imgUrlList) {

            this.native.adImgSrc = this.native.adData.imgUrlList[0];

            console.info(" this.native.adImgSrc =" + this.native.adImgSrc);

            this.native.isShowImg = true;

          } else {

            this.native.isShowImg = false;

            this.native.adImgSrc = "";

          }

          if (this.native.adData.clickBtnTxt) {

            this.native.btnTxt = this.native.adData.clickBtnTxt;

          } else {

            this.native.btnTxt = "";

          }

          if (this.native.adData.videoUrlList && this.native.adData.videoUrlList[0]) {

            this.native.adVideoSrc = this.native.adData.videoUrlList[0];

            this.native.isShowVideo = true;

          } else {

            this.native.isShowVideo = false;

            this.native.adVideoSrc = "";

          }

          this.native.isShow = true;

          this.native.errStr = "";

          this.reportNativeShow();

        }

      });

      nativeAd.onError(e => {

        console.error("load ad error:" + JSON.stringify(e));

        this.native.isShowImg = false;

        this.native.isShowVideo = false;

        this.native.isShow = false;

        this.native.errStr = JSON.stringify(e);

      });

      nativeAd.load();

 

    },

    reportNativeShow() {

      if (nativeAd) {

        nativeAd.reportAdShow({ adId: this.native.adData.adId });

      }

    },

    reportNativeClick() {

      nativeAd.reportAdClick({

        adId: this.native.adData.adId

      });

 

    },

    listenNativeAdDownloadStatus(downloadstatus) {

      if (downloadstatus === "INSTALLED") {

        this.native.btnTxt = "OPEN";

      }

    },

    startButton(event) {

      console.error('start download result is = ', event.resultCode)

      nativeAd.onStatusChanged((data) => {

        console.log('onStatusChanged data = ', data)

        const progress = nativeAd.getDownloadProgress({

          adId: this.native.adData.adId

        })

        console.log('getDownloadProgress progress = ' + progress);

        const status = nativeAd.getAppStatus({

          adId: this.native.adData.adId

        })

        console.log('getAppStatus status = ' + status);

      })

    },

    removeAdListen: function () {

      if (nativeAd) {

        nativeAd.offDownloadProgress();

        nativeAd.offError(() => {

          console.log("nativeAd offError");

        });

        nativeAd.offLoad(() => {

          console.log("nativeAd offLoad");

        });

        nativeAd.offStatusChanged();

      }

    },

    onDestroy() {

      if (nativeAd) {

        nativeAd.destroy();

      }

    },

    closeAd: function () {

      this.native.isShow = false;

    }

  };

</script>

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:原生,adData,console,ad,案例,nativeAd,adId,监听,native
From: https://www.cnblogs.com/developer-huawei/p/16976416.html

相关文章