原生 Native 广告样式

优质
小牛编辑
140浏览
2023-12-01

原生(Native)

1. 确定SDK文件已经全部拷贝到工程文件的libs子目录下参考

2. 添加广告代码,添加广告代码前请确定已初始化SDK

  • 原生广告和原生信息流广告请务必参考Demo中NativeActivity和NativeListActivity类:
  • 例如:

      private NativeAd nativeAd;
      private List<? extends View> mAdViewList;
    
       /**
       * adCount(默认为3,取值可写1、2、3) 决定返回view类型广告的个数。
       * 具体返回的size以服务器返回为标准,请开发者自行判断,以防数组*下标越界。
       */
    
      nativeAd = new NativeAd(this, mAdUnitId, 3, new NativeAdListener() {
    
          @Override
          public void onAdFailed(int errorcode) {
              Log.d("lance", "onAdFailed:" + errorCode);
          }
    
          @Override
          public void onAdLoaded(NativeAdResponse response) {
               /**
               * 因为该sdk接入了其他平台的sdk,所以native会返回两种类型
               * 一种是直接返回渲染好的类型,另一种是返回数据(1条)
               * 根据 response.getNativeInfoListView()是否为null判断选择广告类型
               * 两种情况只能选一个
               * 写法请务必参考以下代码:
               */
              if (response.getNativeInfoListView() != null) {
                  mAdViewList = response.getNativeInfoListView();
                  Log.i("lance", "getNativeInfoList:" + mAdViewList.size());
                  mLyContainer.removeAllViews();
                   for (int i = 0; i < mAdViewList.size(); i++) {
                      View lyAdView = mAdViewList.get(i);
                      mLyContainer.addView(lyAdView);
                      nativeAd.nativeRender(lyAdView);//这个方法需要广告真正显示到屏幕上的时候再去调用
                  }
              } else {
                  //返回设置的广告的多个图片的URL,SDK并未处理加载urls里面的图片,需要集成者自己去加载展示
                  ArrayList<String> imageUrls = response.getImageUrls();
                  //返回设置的广告的多个文本信息
                  ArrayList<String> texts = response.getTexts();
                  //根据广告法新规定,必须加入广告标识和广告来源。需要开发者分别放置于广告左下和右下角
                  ServerResponse.AdLogoInfo adUrl = response.getAdUrl();//广告字样
                  ServerResponse.AdLogoInfo adLogoInfo = response.getlogoUrl();//广告来源标识
    
                  // 一个广告只允许展现一次,多次展现、点击只会计入一次
                  updateView(response);(此方法将返回的数据渲染成View,详情见Demo)
    
          //此方法用于注册素材显示的view,集成者必须在onAdLoaded调用此方法注册此次广告,这样才能统计广告素材的展示。
          NativeAdUtil.registerTracking(nativeResponse, findViewById(R.id.appinstall_layout), new NativeAdEventListener() {
              @Override
              //显示素材的view被点击时回调
              public void onAdWasClicked() {
                  Toast.makeText(NativeActivity.this, "onAdWasClicked", Toast.LENGTH_SHORT).show();
              }
              @Override
              public void onAdWillLeaveApplication() {
                  Toast.makeText(NativeActivity.this, "onAdWillLeaveApplication", Toast.LENGTH_SHORT).show();
              }
          });
            }
        }
      });
      //加载广告
      nativeAd.loadAd();
    
  • 在广告页面onResume的时候参照:

      @Override
      protected void onResume() {
          super.onResume();
      if (mAdViewList != null) {
          for (View view : mAdViewList) {
              Log.e("lance", "view.onResume()");
              nativeAd.nativeResume(view);
              }
          }
      }
    
  • 在销毁的时候参照:

      @Override
      protected void onDestroy() {
          super.onDestroy();
           nativeAd.cancel();
          // 使用完了每一个LyAdView之后都要释放掉资源。
          if (mAdViewList != null) {
              for (View view : mAdViewList) {
              nativeAd.nativeDestroy(view);
              Log.e("lance", "nativeDestroy()");
              }
          }
      }
    

PS:更多设置请参考Demo中的com.hubcloud.adhubsdkdemo.NativeActivity的代码.