请输入
菜单

6. 新原生(模板自渲染)广告接入及API说明

原生(模板\自渲染)广告集成说明

复制代码
原生广告(模板\自渲染)包含模板和自渲染两种形式的广告,开发者集成的时候根据业务需求决定用模板还是自渲染形式广告,多用于新闻信息流中,位于app顶部、中部、底部任意一处,横向贯穿整个app页面。

1、原生(模板\自渲染)广告接口说明

1.1 AMPSUnifiedNativeAd 接口说明

复制代码
/**
 * 原生(模板\自渲染)广告构造方法
 * @param mContext 必须传入Activity的上下文
 * @param parameters 请求参数配置
 * @param listener 原生(模板\自渲染)广告请求回调
 */
public AMPSUnifiedNativeAd(Context context, AMPSRequestParameters parameters, AMPSUnifiedNativeLoadEventListener listener)

/**
 * 请求原生(模板\自渲染)广告
 */
public void loadAd()

/**
 * 获取价格
 * @return 原生(模板\自渲染)广告价格
 */
 public int getEcpm()

/**
 * 获取额外的信息
 * @return 返回渠道额外的信息
 */
 public Map<String, Object> getMediaExtraInfo()

 /**
 * 宿主Activity.onResume()时调用,恢复广告状态
 */
 public void resume()

 /**
 * 广告进入后台,activity不可见时调用
 */
 public void pause()

/**
 * 销毁广告
 */
 public void destroy()

1.2 AMPSUnifiedNativeLoadEventListener 接口说明

复制代码
/**
 * 原生(模板\自渲染)广告请求监听器
 */
AMPSUnifiedNativeLoadEventListener {

    /**
     * 广告加载成功
     * @param nativeItems  原生广告list列表
     */
    public abstract void onAmpsAdLoad(List<AMPSUnifiedNativeItem> nativeItems);

    /**
     * 广告加载失败
     * @param error 失败错误信息
     */
    public abstract void onAmpsAdFailed(AMPSError error);

}

1.3 AMPSUnifiedNativeItem 接口说明

复制代码
/**
 * 原生(模板\自渲染)广告对象
 */
AMPSUnifiedNativeItem {

  /**
   * 广告是否有效
   * @return
   */
  boolean isValid();

  /**
   * 是否模板广告
   * @return true 模板广告 false 自渲染广告
   */
  boolean isExpressAd();

  /**
   * 渲染模板广告
   */
  void render();

  /**
   * 获取模板广告view
   * @return
   */
  View getNativeExpressAdView();

  /**
   * 设置模板广告监听回调
   * @param ampsNativeAdExpressListener
   */
  void setNativeAdExpressListener(AMPSNativeAdExpressListener ampsNativeAdExpressListener);

  /**
   * 获取广告标题,可能为空
   * @return
   */
  String getTitle();

  /**
   * 广告描述,可能为空
   * @return
   */
  String getDesc();

  /**
   * 获取操作按钮,可能为文字或图片地址,可能为空
   * @return
   */
  String getActionButtonText();

  /**
   * 获取扩展信息,可能为空
   * @return
   */
  Map<String, Object> getExtras();

  /**
   * 获取广告来源文案
   * @return
   */
  String getAdSource();

  /**
   * 广告来源角标地址,可能为空,(百度、快手、趣盟)
   * @return
   */
  String getAdSourceLogoUrl();

  /**
   * 获取广告来源角标,可能为空,(倍孜、穿山甲、GM、华为、京东、Sigmob)
   * @return
   */
  View getAdSourceLogo();

  /**
   * 获取APPIcon地址,可能为空
   * @return
   */
  String getIconUrl();

  /**
   * 是否返回的是view对象,(华为渠道)
   * @return false 返回的图片地址 true 返回的是view对象
   */
  boolean isViewObject();

  /**
   * 获取广告主图,可能为空
   * @return
   */
  String getMainImageUrl();

  /**
   * 获取广告主图,可能为空,(华为渠道)
   * @return
   */
  AMPSUnifiedView getMainImageView();

  /**
   * 获取广告样式 AD_PATTERN_TEXT_IMAGE 图文 AD_PATTERN_3_IMAGES 三图 AD_PATTERN_VIDEO 视频
   * AD_PATTERN_HTML 网页 AD_PATTERN_UNKNOWN 未知
   * @return
   */
  AMPSUnifiedPattern getAdPattern();

  /**
   * 获取广告图片集合,可能为空
   * @return
   */
  List<String> getImagesUrl();

  /**
   * 获取广告图片集合,可能为空,(华为渠道)
   * @return
   */
  List<AMPSUnifiedView> getMainImageViews();

  /**
   * 获取广告单价
   * @return
   */
  int getECPM();

  /**
   * 获取图片宽度,可能为0
   * @return
   */
  int getImageWidth();

  /**
   * 获取图片高度,可能为0
   * @return
   */
  int getImageHeight();

  /**
   * 获取下载类广告app信息,可能为空
   * @return
   */
  AMPSAppDetail getAppDetail();

  /**
   * 获取自渲染摇一摇、滑动交互view内容,可能为空,(百度、京东、趣盟、Sigmob渠道)
   * @return
   */
  AMPSUnifiedOptimizeController getOptimizeController();

  /**
   * 设置自渲染广告交互事件
   * @param listener
   */
  void setNativeAdEventListener(AMPSUnifiedAdEventListener listener);

  /**
   * 设置自渲染广告app下载监听事件,可根据需要设置下载监听器,非下载类设置无效
   * @param listener
   * @return
   */
  void setDownloadListener(AMPSUnifiedDownloadListener listener);

  /**
   * 设置反馈监听事件,可根据需要设置(优量汇)
   * @param listener
   * @return
   */
  void setNegativeFeedbackListener(AMPSUnifiedNegativeFeedbackListener listener);

  /**
   * 绑定广告到容器
   * @param context 上下文
   * @param rootView root容器View
   * @param clickViews 可点击的view列表
   * @param actionView 操作按钮view
   */
  void bindAdToRootContainer(Activity context, AMPSUnifiedRootContainer rootView, List<View> clickViews, List<View> actionView);

  /**
   * 绑定广告到视频容器
   * @param context
   * @param stub
   * @param listener
   */
  void bindAdToMediaView(Activity context, AMPSUnifiedMediaViewStub stub, AMPSUnifiedVideoListener listener);

  /**
   * 宿主Activity.onResume()时调用,恢复广告状态
   */
  void resume();

  /**
   * 广告进入后台,activity不可见时调用
   */
  void pause();

  /**
   * 广告销毁
   */
  void destroy();

}

1.4 AMPSNativeAdExpressListener 接口说明

复制代码
/**
 * 原生模板广告的回调对象
 */
AMPSNativeAdExpressListener  {

    /**
     * 广告曝光
     */
    void onAdShow();

    /**
     * 广告点击
     */
    void onAdClicked();

    /**
     * 广告关闭
     * @param view 关闭的单个广告view
     */
    void onAdClosed(View view);

    /**
     * 广告渲染失败
     * @param view 渲染失败的单个广告view
     * @param msg 渲染失败的错误信息
     * @param code 渲染失败的错误码
     */
    void onRenderFail(View view, String msg, int code);

    /**
     * 广告渲染成功
     * @param view 渲染成功的单个广告view
     * @param width 单个广告view的宽,可能为0
     * @param height 单个广告view的高,可能为0
     */
    void onRenderSuccess(View view,float width, float height) ;

}

1.5 AMPSUnifiedOptimizeController 接口说明

复制代码
  /**
   * 原生自渲染广告扩展交互优化控制器
   */
  AMPSUnifiedOptimizeController {

    /**
     * 获取滑一滑交互,(百度、京东渠道支持)
     * @param width 宽度
     * @param height 高度
     * @param repeatCount 重复次数
     * @return
     */
    View getOptimizeSlideView(int width, int height, int repeatCount);

    /**
     * 获取摇一摇交互,(百度、京东、趣盟、Sigmob渠道支持)
     * @param width 宽度
     * @param height 高度
     * @return
     */
    View getOptimizeShakeView(int width, int height);

  }

1.6 AMPSUnifiedAdEventListener 接口说明

复制代码
/**
 * 原生(自渲染)交互监听对象
 */
AMPSUnifiedAdEventListener {
    /**
     * 广告曝光
     */
    void onADExposed();

    /**
     * 广告点击
     */
    void onADClicked();

    /**
     * 广告曝光失败
     * @param errorCode 错误码
     * @param errorMsg 错误信息
     */
    void onADExposeError(int errorCode, String errorMsg);

}

1.7 AMPSUnifiedPattern 枚举值说明

复制代码
enum AMPSUnifiedPattern {
    //图文
    AD_PATTERN_TEXT_IMAGE,
    //组图
    AD_PATTERN_3_IMAGES,
    //视频
    AD_PATTERN_VIDEO,
    //未知
    AD_PATTERN_UNKNOWN;
}

2、原生(模板\自渲染)广告请求示例

复制代码
    1)构建原生(模板\自渲染广告请求参数
     AMPSRequestParameters parameter = new AMPSRequestParameters.Builder()
            .setSpaceId(Constants.AMPS_SPACE_ID_NATIVE)//原生广告位id
            .setTimeOut(5000)//设置超时时间
            .setWidth(AMPSScreenUtil.getScreenWidth(this))//设置广告的宽,单位px
            .setHeight(0)//设置广告的高,单位px,0代表自适应高度
            .setAdCount(1)//设置请求原生广告的条数
            .build();
    2)实例化原生(模板\自渲染)广告
    AMPSUnifiedNativeAd mUnifiedNativeAd = new AMPSUnifiedNativeAd(this, parameter, new AMPSUnifiedNativeLoadEventListener() {

        @Override
        public void onAmpsAdLoad(List<AMPSUnifiedNativeItem> nativeItems) {
            Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAmpsAdLoad");
           if (nativeItems != null && !nativeItems.isEmpty()) {
                for (AMPSUnifiedNativeItem unifiedItem : nativeItems) {
                      if(!unifiedItem.isValid()) {
                          continue;
                      }
                      if (unifiedItem.isExpressAd()) {
                          //渲染模板广告
                          renderNativeExpressAd(unifiedItem);
                      } else {
                          //自渲染广告
                          renderUnifiedNativeAd(unifiedItem);
                      }
                }
            }
        }

        @Override
        public void onAmpsAdFailed(AMPSError ampsError) {
            Log.e(AMPSConstants.AMPS_LOG_TAG,
                    TAG + " onAdError code:" + ampsError.getCode() + ";" +
                            " message:" + ampsError.getMessage());
        }

    });

   3) 加载原生(模板\自渲染)广告
      mUnifiedNativeAd.loadAd();

   4) 渲染模板广告
      renderNativeExpressAd(AMPSUnifiedNativeItem unifiedItem) {
          //设置广告交互监听
          unifiedItem.setNativeAdExpressListener(new AMPSNativeAdExpressListener() {
              @Override
              public void onAdShow() {
                  Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdShow");
              }

              @Override
              public void onAdClicked() {
                  Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdClicked");
              }

              @Override
              public void onAdClosed(View view) {
                  Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdClosed");
                  containerFl.removeView(view);
                  showView.setVisibility(View.GONE);
              }

              @Override
              public void onRenderFail(View view, String msg, int code) {
                  Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onRenderFail");
                  showView.setVisibility(View.GONE);
              }

              @Override
              public void onRenderSuccess(View view, float width, float height) {
                  Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onRenderSuccess ");
                  containerFl.removeAllViews();
                  containerFl.addView(view);
              }
          });
          //渲染广告
          unifiedItem.render();
      }

   5)渲染自渲染广告
      renderUnifiedNativeAd(AMPSUnifiedNativeItem unifiedItem) {
       //获取广告类型
        AMPSUnifiedPattern pattern = unifiedItem.getAdPattern();
        if (AMPSUnifiedPattern.AD_PATTERN_UNKNOWN.equals(pattern)) {
            return;
        }
        Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + "show unified " + pattern);
        View itemView = null;
        if (AMPSUnifiedPattern.AD_PATTERN_TEXT_IMAGE.equals(pattern)) {
            //渲染图文广告
            itemView = inflateImageText(unifiedItem);
        } else if (AMPSUnifiedPattern.AD_PATTERN_3_IMAGES.equals(pattern)) {
            //渲染组图广告
            itemView = inflateGroupImage(unifiedItem);
        } else if (AMPSUnifiedPattern.AD_PATTERN_VIDEO.equals(pattern)) {
            //渲染视频广告
            itemView = inflateVideoView(unifiedItem);
        }
        containerFl.removeAllViews();
        containerFl.addView(itemView);
     }

   6) 在页面的onResume、onPause、onDestroy方法中调用广告实例对象的和广告item对象的resume、pause、destroy方法
      @Override
      protected void onResume() {
          super.onResume();
          if (mAMPSUnifiedNativeAd != null) {
              mAMPSUnifiedNativeAd.resume();
          }
          //已经使用的广告需要调用resume方法
          if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
              for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
                  item.resume();
              }
          }
      }


      @Override
      protected void onPause() {
          super.onPause();
          if (mAMPSUnifiedNativeAd != null) {
              mAMPSUnifiedNativeAd.pause();
          }
          //已经使用的广告需要调用pause方法
          if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
              for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
                  item.pause();
              }
          }
      }

      @Override
      protected void onDestroy() {
          super.onDestroy();
          if (mAMPSUnifiedNativeAd != null) {
              mAMPSUnifiedNativeAd.destroy();
          }
          //已经使用的广告需要调用destroy方法
          if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
              for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
                  item.destroy();
              }
          }
          //未使用的广告需要调用destroy方法
          if (unifiedNativeItems != null && unifiedNativeItems.size() > 0) {
              for (AMPSUnifiedNativeItem item : unifiedNativeItems) {
                  item.destroy();
              }
          }
      }
上一个
5. 原生(模板)广告接入及API说明
下一个
7. RTB实时竞价广告
最近修改: 2025-04-10