Android穿山甲SDK接入,已封装直接使用

已经历过适配过程中踩过的坑。直接使用方法即可调用广告显示

如插屏广告使用:loadExpressAd(TTAdManagerHolder.intersCodeId,300, 300)

信息流广告请看其它篇,直接使用即可

//是否显示广告
public static boolean showGG = false;


private boolean mIsExpress = false; //是否请求模板广告
private boolean mIsLoaded = false; //视频是否加载完成
private TTRewardVideoAd mttRewardVideoAd;

// 是否开放进阶奖励功能
private boolean isEnableAdvancedReward = false;
private RewardAdvancedInfo mRewardAdvancedInfo;

/**激励视频*/
public void loadAd(final String codeId, int orientation) {
    if(!showGG){
        return;
    }
    //step4:创建广告请求参数AdSlot,具体参数含义参考文档
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);

    }
    AdSlot adSlot;
    if (mIsExpress) {
        //个性化模板广告需要传入期望广告view的宽、高,单位dp,

        adSlot = new AdSlot.Builder()
                .setCodeId(codeId)
                //此次加载广告的用途是实时加载,当用来作为缓存时,请使用:TTAdLoadType.LOAD
                .setAdLoadType(TTAdLoadType.LOAD)
                //模板广告需要设置期望个性化模板广告的大小,单位dp,激励视频场景,只要设置的值大于0即可
                .setExpressViewAcceptedSize(500,500)
                .build();
    } else {
        //模板广告需要设置期望个性化模板广告的大小,单位dp,代码位是否属于个性化模板广告,请在穿山甲平台查看

        adSlot = new AdSlot.Builder()
                //此次加载广告的用途是实时加载,当用来作为缓存时,请使用:TTAdLoadType.LOAD
                .setAdLoadType(TTAdLoadType.LOAD)
                .setCodeId(codeId)
                .build();
    }
    //step5:请求广告

    mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
        @Override
        public void onError(int code, String message) {
            Log.e(TAG, "Callback --> onError: " + code + ", " + String.valueOf(message));
            //TToast.show(activity, message);
        }

        //视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。
        @Override
        public void onRewardVideoCached() {
            Log.e(TAG, "Callback --> onRewardVideoCached");
            mIsLoaded = true;
            TToast.show(activity, "Callback --> rewardVideoAd video cached");
        }

        @Override

        public void onRewardVideoCached(TTRewardVideoAd ad) {
            Log.e(TAG, "Callback --> onRewardVideoCached");
            mIsLoaded = true;
            TToast.show(activity, "Callback --> rewardVideoAd video cached");
            // ad.showRewardVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");

        }

        //视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
        @Override

        public void onRewardVideoAdLoad(TTRewardVideoAd ad) {

            Log.e(TAG, "Callback --> onRewardVideoAdLoad");


            TToast.show(activity, "rewardVideoAd loaded 广告类型:" + getAdType(ad.getRewardVideoAdType()));
            mIsLoaded = false;
            mttRewardVideoAd = ad;
            mRewardAdvancedInfo = new RewardAdvancedInfo();
            mttRewardVideoAd.showRewardVideoAd(activity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");
            mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
                /*@Override
                public void onRewardArrived(boolean b, int i, Bundle bundle) {

                }*/

                @Override

                public void onAdShow() {
                    Log.d(TAG, "Callback --> rewardVideoAd show");
                    TToast.show(activity, "rewardVideoAd show");
                }

                @Override

                public void onAdVideoBarClick() {
                    Log.d(TAG, "Callback --> rewardVideoAd bar click");
                    TToast.show(activity, "rewardVideoAd bar click");
                }

                @Override

                public void onAdClose() {
                    Log.d(TAG, "Callback --> rewardVideoAd close");
                    TToast.show(activity, "rewardVideoAd close");
                    if (isEnableAdvancedReward && mRewardAdvancedInfo != null) {
                        Log.d(TAG, "本次奖励共发放:" + mRewardAdvancedInfo.getRewardAdvancedAmount());
                    }
                }

                //视频播放完成回调
                @Override
                public void onVideoComplete() {
                    Log.d(TAG, "Callback --> rewardVideoAd complete");
                    TToast.show(activity, "rewardVideoAd complete");
                }

                @Override
                public void onVideoError() {
                    Log.e(TAG, "Callback --> rewardVideoAd error");
                    TToast.show(activity, "rewardVideoAd error");
                }

                //视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称
                @Override

                public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {
                    String logString = "verify:" + rewardVerify + " amount:" + rewardAmount +
                            " name:" + rewardName + " errorCode:" + errorCode + " errorMsg:" + errorMsg;
                    Log.e(TAG, "Callback --> " + logString);
                    TToast.show(activity, logString);
                }

               /* @Override
                public void onRewardArrived(boolean isRewardValid, int rewardType, Bundle extraInfo) {
                    RewardBundleModel rewardBundleModel = new RewardBundleModel(extraInfo);
                    Log.e(TAG, "Callback --> rewardVideoAd has onRewardArrived " +
                            "\n奖励是否有效:" + isRewardValid +
                            "\n奖励类型:" + rewardType +
                            "\n奖励名称:" + rewardBundleModel.getRewardName() +
                            "\n奖励数量:" + rewardBundleModel.getRewardAmount() +
                            "\n建议奖励百分比:" + rewardBundleModel.getRewardPropose());
                    if (!isRewardValid) {
                        Log.d(TAG, "发送奖励失败 code:" + rewardBundleModel.getServerErrorCode() +
                                "\n msg:" + rewardBundleModel.getServerErrorMsg());
                        return;
                    }

                    if (!isEnableAdvancedReward) {
                        // 未使用进阶奖励功能
                        if (rewardType == TTRewardVideoAd.REWARD_TYPE_DEFAULT) {
                            Log.d(TAG, "普通奖励发放,name:" + rewardBundleModel.getRewardName() +
                                    "\namount:" + rewardBundleModel.getRewardAmount());
                        }
                    } else {
                        // 使用了进阶奖励功能
                        if (mRewardAdvancedInfo != null) {
                            mRewardAdvancedInfo.proxyRewardModel(rewardBundleModel, false);
                        }
                    }
                }*/

                @Override
                public void onSkippedVideo() {
                    Log.e(TAG, "Callback --> rewardVideoAd has onSkippedVideo");
                    TToast.show(activity, "rewardVideoAd has onSkippedVideo");
                }
            });

            mttRewardVideoAd.setRewardPlayAgainInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
                /*@Override
                public void onRewardArrived(boolean b, int i, Bundle bundle) {

                }*/

                @Override

                public void onAdShow() {
                    Log.d(TAG, "Callback --> rewardPlayAgain show");
                    TToast.show(activity, "rewardVideoAd show");
                }

                @Override

                public void onAdVideoBarClick() {
                    Log.d(TAG, "Callback --> rewardPlayAgain bar click");
                    TToast.show(activity, "rewardVideoAd bar click");
                }

                @Override

                public void onAdClose() {
                    Log.d(TAG, "Callback --> rewardPlayAgain close");
                    TToast.show(activity, "rewardVideoAd close");
                }

                //视频播放完成回调
                @Override
                public void onVideoComplete() {
                    Log.d(TAG, "Callback --> rewardPlayAgain complete");
                    TToast.show(activity, "rewardVideoAd complete");
                }

                @Override
                public void onVideoError() {
                    Log.e(TAG, "Callback --> rewardPlayAgain error");
                    TToast.show(activity, "rewardVideoAd error");
                }

                //视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称
                @Override

                public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {
                    String logString = "rewardPlayAgain verify:" + rewardVerify + " amount:" + rewardAmount +
                            " name:" + rewardName + " errorCode:" + errorCode + " errorMsg:" + errorMsg;
                    Log.e(TAG, "Callback --> " + logString);
                    TToast.show(activity, logString);
                }

               /* @Override
                public void onRewardArrived(boolean isRewardValid, int rewardType, Bundle extraInfo) {
                    RewardBundleModel rewardBundleModel = new RewardBundleModel(extraInfo);
                    Log.e(TAG, "Callback --> rewardPlayAgain has onRewardArrived " +
                            "\n奖励是否有效:" + isRewardValid +
                            "\n奖励类型:" + rewardType +
                            "\n奖励名称:" + rewardBundleModel.getRewardName() +
                            "\n奖励数量:" + rewardBundleModel.getRewardAmount() +
                            "\n建议奖励百分比:" + rewardBundleModel.getRewardPropose());

                    if (!isEnableAdvancedReward) {
                        // 再看一个未使用进阶奖励功能
                        if (rewardType == TTRewardVideoAd.REWARD_TYPE_DEFAULT) {
                            Log.d(TAG, "再看一个普通奖励发放,name:" + rewardBundleModel.getRewardName() +
                                    "\namount:" + rewardBundleModel.getRewardAmount());
                        }
                    } else {
                        // 再看一个使用了进阶奖励功能
                        if (mRewardAdvancedInfo != null) {
                            mRewardAdvancedInfo.proxyRewardModel(rewardBundleModel, true);
                        }
                    }
                }*/

                @Override
                public void onSkippedVideo() {
                    Log.e(TAG, "Callback --> rewardPlayAgain has onSkippedVideo");
                    TToast.show(activity, "rewardVideoAd has onSkippedVideo");
                }
            });
            mttRewardVideoAd.setDownloadListener(new TTAppDownloadListener() {
                @Override
                public void onIdle() {
                    mHasShowDownloadActive = false;
                }

                @Override
                public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
                    Log.d("DML", "onDownloadActive==totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);

                    if (!mHasShowDownloadActive) {
                        mHasShowDownloadActive = true;
                        TToast.show(activity, "下载中,点击下载区域暂停", Toast.LENGTH_LONG);
                    }
                }

                @Override
                public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
                    Log.d("DML", "onDownloadPaused===totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);
                    TToast.show(activity, "下载暂停,点击下载区域继续", Toast.LENGTH_LONG);
                }

                @Override
                public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
                    Log.d("DML", "onDownloadFailed==totalBytes=" + totalBytes + ",currBytes=" + currBytes + ",fileName=" + fileName + ",appName=" + appName);
                    TToast.show(activity, "下载失败,点击下载区域重新下载", Toast.LENGTH_LONG);
                }

                @Override
                public void onDownloadFinished(long totalBytes, String fileName, String appName) {
                    Log.d("DML", "onDownloadFinished==totalBytes=" + totalBytes + ",fileName=" + fileName + ",appName=" + appName);
                    TToast.show(activity, "下载完成,点击下载区域重新下载", Toast.LENGTH_LONG);
                }

                @Override
                public void onInstalled(String fileName, String appName) {
                    Log.d("DML", "onInstalled==" + ",fileName=" + fileName + ",appName=" + appName);
                    TToast.show(activity, "安装完成,点击下载区域打开", Toast.LENGTH_LONG);
                }
            });
        }
    });
}
private String getAdType(int type) {
    switch (type) {

        case TTAdConstant.AD_TYPE_COMMON_VIDEO:
            return "普通激励视频,type=" + type;

        case TTAdConstant.AD_TYPE_PLAYABLE_VIDEO:
            return "Playable激励视频,type=" + type;

        case TTAdConstant.AD_TYPE_PLAYABLE:
            return "纯Playable,type=" + type;

        case TTAdConstant.AD_TYPE_LIVE:
            return "直播流,type=" + type;
    }

    return "未知类型+type=" + type;
}

/**插屏广告*/
public void loadExpressAd(String codeId, int expressViewWidth, int expressViewHeight) {
    if(!showGG){
        return;
    }
    //step4:创建广告请求参数AdSlot,具体参数含义参考文档
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);
    }
    AdSlot adSlot = new AdSlot.Builder()
            .setCodeId(codeId) //广告位id
            .setAdCount(1) //请求广告数量为1到3条
            .setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) //期望模板广告view的size,单位dp
            .build();
    //step5:请求广告,对请求回调的广告作渲染处理

    mTTAdNative.loadInteractionExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
        @Override
        public void onError(int code, String message) {
            TToast.show(activity, "load error : " + code + ", " + message);
        }

        @Override

        public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {
            if (ads == null || ads.size() == 0) {
                return;
            }
            LogUtils.v("success=="+ads.size());
            mTTAd = ads.get(0);
            bindAdListener(mTTAd);
            mTTAd.render();
            //TToast.show(activity, "load success !");
        }
    });
}
private void bindAdListener(final TTNativeExpressAd ad) {

    ad.setExpressInteractionListener(new TTNativeExpressAd.AdInteractionListener() {
        @Override

        public void onAdDismiss() {
           // TToast.show(activity, "广告关闭");
        }

        @Override

        public void onAdClicked(View view, int type) {
           // TToast.show(activity, "广告被点击");
        }

        @Override

        public void onAdShow(View view, int type) {
            TToast.show(activity, "广告展示");
        }

        @Override
        public void onRenderFail(View view, String msg, int code) {

            TToast.show(activity, msg + " code:" + code);
        }

        @Override
        public void onRenderSuccess(View view, float width, float height) {

            //返回view的宽高 单位 dp
            TToast.show(activity, "渲染成功");
            ad.showInteractionExpressAd(activity);

        }
    });
    bindDislike(ad, false);

    if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {
        return;
    }
    ad.setDownloadListener(new TTAppDownloadListener() {
        @Override
        public void onIdle() {
            TToast.show(activity, "点击开始下载", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
            if (!mHasShowDownloadActive) {
                mHasShowDownloadActive = true;
                TToast.show(activity, "下载中,点击暂停", Toast.LENGTH_LONG);
            }
        }

        @Override
        public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
            TToast.show(activity, "下载暂停,点击继续", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
            TToast.show(activity, "下载失败,点击重新下载", Toast.LENGTH_LONG);
        }

        @Override
        public void onInstalled(String fileName, String appName) {
            TToast.show(activity, "安装完成,点击图片打开", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadFinished(long totalBytes, String fileName, String appName) {
            TToast.show(activity, "点击安装", Toast.LENGTH_LONG);
        }
    });
}
private void bindDislike(TTNativeExpressAd ad, boolean customStyle) {
    if (customStyle) {
        //使用自定义样式
        DislikeInfo dislikeInfo = ad.getDislikeInfo();
        if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {
            return;
        }
        final DislikeDialog dislikeDialog = new DislikeDialog(activity, dislikeInfo);
        dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {
            @Override
            public void onItemClick(FilterWord filterWord) {
                //屏蔽广告
                TToast.show(activity, "点击 " + filterWord.getName());
            }
        });
        dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {
            @Override
            public void onClick(PersonalizationPrompt personalizationPrompt) {
                TToast.show(activity, "点击了为什么看到此广告");
            }
        });
        ad.setDislikeDialog(dislikeDialog);
        return;
    }
    //使用默认模板中默认dislike弹出样式

    ad.setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
        @Override
        public void onShow() {

        }

        @Override
        public void onSelected(int position, String value, boolean enforce) {
            //TToast.show(mContext, "反馈了 " + value);
            TToast.show(activity, "\t\t\t\t\t\t\t感谢您的反馈!\t\t\t\t\t\t\n我们将为您带来更优质的广告体验", 3);
            if (enforce) {
                TToast.show(activity, "InteractionExpressActivity 模版插屏,穿山甲sdk强制将view关闭了 ");
            }
        }

        @Override
        public void onCancel() {
            TToast.show(activity, "点击取消 ");
        }

    });
}
public void loadNativeExpressAd(ListView mListView, ProjectsAdapter myAdapter, List<ProjectsItem> mData,
                                int w, int h){
    if(!showGG){
        return;
    }
    LIST_ITEM_COUNT = mData.size();
    int AdCount = LIST_ITEM_COUNT/10+1;
    if(AdCount>3){
        AdCount = 3;
    }
    //feed广告请求类型参数
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);
    }
    AdSlot adSlot = new AdSlot.Builder()
            .setCodeId(TTAdManagerHolder.FeedCodeId) //广告位id
            .setSupportDeepLink(true)
            .setAdCount(AdCount) //请求广告数量为1到3条
            .setExpressViewAcceptedSize(w-30,0) //期望模板广告view的size,单位dp
            // .setAdLoadType(TTAdLoadType.PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略
            .build();
    mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
        //广告请求失败
        @Override
        public void onError(int code, String message) {
            LogUtils.v(code+"loadFeedAd=="+message);
        }
        //广告请求成功
        @Override
        public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {
            LogUtils.v("onNativeExpressAdLoad=="+ads.size());
            if (ads == null || ads.isEmpty()) {
                TToast.show(activity, "on FeedAdLoaded: ad is null!");
                return;
            }

            for (TTNativeExpressAd ad : ads) {
                int random = (int) (Math.random() * LIST_ITEM_COUNT);
                LogUtils.v("========"+random);
                try{

                    ProjectsItem bean = new ProjectsItem();

                    bean.setNativeExpressAd(ad);
                    bindAdListener1(ad);
                    mData.add(random, bean);

                }catch (Exception e){

                }

            }


            myAdapter.notifyDataSetChanged();
        }
    });

}
public void loadNativeExpressAd(ListView mListView, NativeAdapter myAdapter, List<BannerBean> mData,
                                int w, int h){
    if(!showGG){
        return;
    }
    LIST_ITEM_COUNT = mData.size();
    int AdCount = LIST_ITEM_COUNT/10+1;
    //feed广告请求类型参数
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);
    }

    AdSlot adSlot = new AdSlot.Builder()
            .setCodeId(TTAdManagerHolder.FeedCodeId) //广告位id
            .setSupportDeepLink(true)
            .setAdCount(AdCount) //请求广告数量为1到3条
            .setExpressViewAcceptedSize(w-30,0) //期望模板广告view的size,单位dp
           // .setAdLoadType(TTAdLoadType.PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略
            .build();
    mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
        //广告请求失败
        @Override
        public void onError(int code, String message) {
            LogUtils.v(code+"loadFeedAd=="+message);
        }
        //广告请求成功
        @Override
        public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {
            LogUtils.v("onNativeExpressAdLoad=="+ads.size());
            if (ads == null || ads.isEmpty()) {
                TToast.show(activity, "on FeedAdLoaded: ad is null!");
                return;
            }

            for (TTNativeExpressAd ad : ads) {
                int random = (int) (Math.random() * LIST_ITEM_COUNT);
                LogUtils.v("========"+random);
                try{

                    BannerBean bean = new BannerBean();

                    bean.setNativeExpressAd(ad);
                    bindAdListener1(ad);
                    mData.add(random, bean);

                }catch (Exception e){

                }

            }


            myAdapter.notifyDataSetChanged();
        }
    });

}
private void bindAdListener1(final TTNativeExpressAd adTmp) {
    adTmp.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
        @Override

        public void onAdClicked(View view, int type) {
            TToast.show(activity, "广告被点击");
        }

        @Override

        public void onAdShow(View view, int type) {
            TToast.show(activity, "广告展示");
        }

        @Override
        public void onRenderFail(View view, String msg, int code) {
            TToast.show(activity, msg + " code:" + code);
        }

        @Override
        public void onRenderSuccess(View view, float width, float height) {
            //返回view的宽高 单位 dp
            TToast.show(activity, "渲染成功");
        }
    });
    adTmp.render();

}
/**
 * 信息流
 * 加载feed广告
 */
private static  int LIST_ITEM_COUNT = 0;
public void loadListAd(RecyclerView mListView, ClassifyListAdapter myAdapter, List<BannerBean> mData,
                       int w,int h) {
    if(!showGG){
        return;
    }
    LIST_ITEM_COUNT = mData.size();
    int AdCount = LIST_ITEM_COUNT/10+1;
    //feed广告请求类型参数
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);
    }
    LogUtils.v(w,h);



    AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(TTAdManagerHolder.FeedCodeId)
            .setImageAcceptedSize(w, h)
            .setAdCount(AdCount)
            .build();
    //调用feed广告异步请求接口

    mTTAdNative.loadFeedAd(adSlot, new TTAdNative.FeedAdListener() {
        @Override
        public void onError(int code, String message) {

            LogUtils.v(code+"loadFeedAd=="+message);
            TToast.show(activity, message);
        }

        @Override

        public void onFeedAdLoad(List<TTFeedAd> ads) {

            if (ads == null || ads.isEmpty()) {
                TToast.show(activity, "on FeedAdLoaded: ad is null!");
                return;
            }

            for (int i = 0; i < LIST_ITEM_COUNT; i++) {
                mData.add(null);
            }

            int count = mData.size();

            for (TTFeedAd ad : ads) {


                int random = (int) (Math.random() * LIST_ITEM_COUNT);
                LogUtils.v("========"+random);
                try{
                    LogUtils.v(ad.getClass().getName());
                    BannerBean bean = new BannerBean();

                    bean.setFeedAd(ad);
                    mData.add(random, bean);

                }catch (Exception e){

                }

            }


            myAdapter.notifyDataSetChanged();
        }
    });
}

/**banner广告展示*/
private TTAdNative mTTAdNative;
private TTNativeExpressAd mTTAd;
public void loadExpressAd(FrameLayout mExpressContainer,String codeId, float expressViewWidth, float expressViewHeight){
    if(!showGG){
        mExpressContainer.setVisibility(View.GONE);
        return;
    }
    if(mTTAdNative==null){
        mTTAdNative = TTAdManagerHolder.get().createAdNative(activity);
        TTAdManagerHolder.get().requestPermissionIfNecessary(activity);
    }
    AdSlot adSlot = new AdSlot.Builder()
            .setCodeId(codeId) //广告位id
            .setAdCount(3) //请求广告数量为1到3条
            .setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) //期望模板广告view的size,单位dp
            .build();
    //step5:请求广告,对请求回调的广告作渲染处理

    mTTAdNative.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
        @Override
        public void onError(int code, String message) {
            LogUtils.v(code+"loadBannerExpressAd="+message);
            mExpressContainer.removeAllViews();
        }

        @Override

        public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {
            LogUtils.v("onNativeExpressAdLoad="+ads.size());
            if (ads == null || ads.size() == 0) {
                return;
            }
            mTTAd = ads.get(0);
            mTTAd.setSlideIntervalTime(30 * 1000);
            bindAdListener(mTTAd,mExpressContainer);

             TToast.show(activity,"load success!");
            mTTAd.render();
        }
    });

}
private boolean mHasShowDownloadActive = false;
public void bindAdListener(TTNativeExpressAd ad, FrameLayout mExpressContainer) {

    ad.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
        @Override

        public void onAdClicked(View view, int type) {
            TToast.show(activity, "广告被点击");
        }

        @Override

        public void onAdShow(View view, int type) {
            TToast.show(activity, "广告展示");
        }

        @Override
        public void onRenderFail(View view, String msg, int code) {
            //Log.e("ExpressView", "render fail:" + (System.currentTimeMillis() - startTime));
            TToast.show(activity, msg + " code:" + code);
        }

        @Override
        public void onRenderSuccess(View view, float width, float height) {
           // Log.e("ExpressView", "render suc:" + (System.currentTimeMillis() - startTime));
            //返回view的宽高 单位 dp
            TToast.show(activity, "渲染成功");
            mExpressContainer.removeAllViews();
            mExpressContainer.addView(view);
        }
    });
    //dislike设置
    bindDislike(ad,  mExpressContainer,false);

    if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {
        return;
    }
    ad.setDownloadListener(new TTAppDownloadListener() {
        @Override
        public void onIdle() {
            TToast.show(activity, "开始下载", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {
            if (!mHasShowDownloadActive) {
                mHasShowDownloadActive = true;
                TToast.show(activity, "下载中,点击暂停", Toast.LENGTH_LONG);
            }
        }

        @Override
        public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
            TToast.show(activity, "下载暂停,点击继续", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
            TToast.show(activity, "下载失败,点击重新下载", Toast.LENGTH_LONG);
        }

        @Override
        public void onInstalled(String fileName, String appName) {
            TToast.show(activity, "安装完成,点击图片打开", Toast.LENGTH_LONG);
        }

        @Override
        public void onDownloadFinished(long totalBytes, String fileName, String appName) {
            TToast.show(activity, "点击安装", Toast.LENGTH_LONG);
        }
    });
}
/**
 * 设置广告的不喜欢, 注意:强烈建议设置该逻辑,如果不设置dislike处理逻辑,则模板广告中的 dislike区域不响应dislike事件。
 *
 * @param ad
 * @param customStyle 是否自定义样式,true:样式自定义
 */

private void bindDislike(TTNativeExpressAd ad,FrameLayout mExpressContainer, boolean customStyle) {
    if (customStyle) {
        //使用自定义样式
        final DislikeInfo dislikeInfo = ad.getDislikeInfo();
        if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {
            return;
        }
        final DislikeDialog dislikeDialog = new DislikeDialog(activity, dislikeInfo);
        dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {
            @Override
            public void onItemClick(FilterWord filterWord) {
                //屏蔽广告
                TToast.show(activity, "点击 " + filterWord.getName());
                //用户选择不喜欢原因后,移除广告展示
                mExpressContainer.removeAllViews();
            }
        });
        dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {
            @Override
            public void onClick(PersonalizationPrompt personalizationPrompt) {
                TToast.show(activity, "点击了为什么看到此广告");
            }
        });
        ad.setDislikeDialog(dislikeDialog);
        return;
    }
    //使用默认模板中默认dislike弹出样式

    ad.setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
        @Override
        public void onShow() {

        }

        @Override
        public void onSelected(int position, String value, boolean enforce) {
            TToast.show(activity, "点击 " + value);
            mExpressContainer.removeAllViews();
            //用户选择不喜欢原因后,移除广告展示
            if (enforce) {
                TToast.show(activity, "模版Banner 穿山甲sdk强制将view关闭了");
            }
        }

        @Override
        public void onCancel() {
            TToast.show(activity, "点击取消 ");
        }

    });
}

好的,关于 Unity 穿山甲 SDK 接入,您可以按照以下步骤进行: 1. 在穿山甲官网注册账号并创建应用,获取 AppID 和广告位 ID。 2. 下载 Unity 穿山甲 SDK,并将其导入 Unity 项目中。 3. 在 Unity 中创建一个空对象,命名为 "PangleManager",并将 PangleManager.cs 脚本附加到该对象上。 4. 在 PangleManager.cs 中编写代码,实现 SDK 的初始化、广告加载和展示等功能。 以下是一个简单的示例代码: ```csharp using UnityEngine;using System.Collections.Generic; using System; public class PangleManager : MonoBehaviour { private static PangleManager instance; private string appId = "your_app_id"; private string bannerAdId = "your_banner_ad_id"; private string interstitialAdId = "your_interstitial_ad_id"; private string rewardedVideoAdId = "your_rewarded_video_ad_id"; public static PangleManager Instance { get { if (instance == null) { instance = FindObjectOfType<PangleManager>(); if (instance == null) { instance = new GameObject("PangleManager").AddComponent<PangleManager>(); } } return instance; } } private void Awake() { DontDestroyOnLoad(gameObject); } public void InitSDK() { Dictionary<string, bool> settings = new Dictionary<string, bool>(); settings.Add("useTextureView", true); settings.Add("useSurfaceView", false); settings.Add("allowShowNotify", true); settings.Add("allowShowPageWhenScreenLock", true); settings.Add("debug", true); PangleSDK.Instance.InitSDK(appId, settings); } public void LoadBannerAd() { PangleSDK.Instance.LoadBannerAd(bannerAdId, PangleAdSize.Banner600x90, PangleAdPosition.Bottom); } public void ShowBannerAd() { PangleSDK.Instance.ShowBannerAd(); } public void HideBannerAd() { PangleSDK.Instance.HideBannerAd(); } public void LoadInterstitialAd() { PangleSDK.Instance.LoadInterstitialAd(interstitialAdId); } public void ShowInterstitialAd() { PangleSDK.Instance.ShowInterstitialAd(); } public void LoadRewardedVideoAd() { PangleSDK.Instance.LoadRewardedVideoAd(rewardedVideoAdId); } public void ShowRewardedVideoAd() { PangleSDK.Instance.ShowRewardedVideoAd(); } } ``` 在上述代码中,我们定义了一个 PangleManager 类,用于管理穿山甲 SDK 的初始化和广告加载等操作。在 InitSDK 方法中,我们使用了一个 settings 字典来设置 SDK 的一些参数,比如是否使用 TextureView 等。在 LoadBannerAd、LoadInterstitialAd 和 LoadRewardedVideoAd 方法中,我们分别加载了横幅广告、插屏广告和激励视频广告。在 ShowBannerAd、ShowInterstitialAd 和 ShowRewardedVideoAd 方法中,我们分别展示了这些广告。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天来临

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值