cocos creator 2.4.4接入穿山甲SDK

穿山甲的SDK文档挺不友好的  所以自己写一个总结 避免以后再被坑

首先这个
自3400版本开始,穿山甲支持了Android R,引入了Android R的 <queries> 标签,需要对gradle版本进行限制,限制范围为:3.3.3、 3.4.3、 3.5.4、3.6.4、4.0.1 ,开发者根据自身情况酌情升级

注意的是Gradle 是studio的 file->project Structure 里面的 Android Gradle Plugin Version版本  而不是Gardle Version  (这是个坑)
我用的是3.3.3版本  因为这个不用再去修改其他的代码 creator也支持 (版本太高会出现编译后报错!)


所以直接在 Android Gradle Plugin Version那一栏一下输入3.3.3后studio会直接编译



版本的问题先解决了  不然会出现<queries> 的报错哦

之后就是先添加sdk文件

在studio 打包好的项目里的app文件夹里添加libs文件夹 把下载下来的sdk放进去


然后creator编译过后是已经有引用aar文件的 不需要再去Gradle里面添加官方的那句话了(我注释的那句)


 

做完上面那步之后重新编译studio 如果出现下图的这个 就是引入成功了


之后配置AndroidManifest
先添加权限 跟官方的一样就好了



然后要添加官方说的这个到代码里



添加完这个会发现 这个file_paths 报红  就是需要去添加这个文件 在studio项目的 res里面新建一个xml文件夹 把官方给的代码贴进去(去官方复制哈 不知道不同版本有没有做修改)






然后把官方说的这个加进来  



代码里面是app的gradle里面的defaultConfig加上这个



然后加上这个 对应creator的打包APP ABI (否则会出错哦)




然后根据穿山甲官方文档添加这个 接入就差不多成功了



之后就是代码


在你项目跟SDKWrapper里面的同一个文件夹里添加这个文件 下面是代码(下载的sdk里面demo里面有这个文件)


 

package org.cocos2dx.javascript;

import android.content.Context;
import android.util.Log;


import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdSdk;


/**
 * 可以用一个单例来保存TTAdManager实例,在需要初始化sdk的时候调用
 */
public class TTAdManagerHolder {

    private static final String TAG = "TTAdManagerHolder";

    private static boolean sInit;


    public static TTAdManager get() {
        if (!sInit) {
            throw new RuntimeException("TTAdSdk is not init, please check.");
        }
        return TTAdSdk.getAdManager();
    }

    public static void init(final Context context) {
        doInit(context);
    }

    //step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
    private static void doInit(Context context) {
        if (!sInit) {
            //TTAdSdk.init(context, buildConfig(context));
            TTAdSdk.init(context, buildConfig(context), new TTAdSdk.InitCallback() {
                @Override
                public void success() {
                    Log.i(TAG, "success: ");
                }

                @Override
                public void fail(int code, String msg) {
                    Log.i(TAG, "fail:  code = "+code+" msg = "+msg);
                }
            });
            sInit = true;
        }
    }

    private static TTAdConfig buildConfig(Context context) {
        return new TTAdConfig.Builder()
                .appId("5188994")
                .useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
                .allowShowNotify(true) //是否允许sdk展示通知栏提示
                .allowShowPageWhenScreenLock(true) // 锁屏下穿山甲SDK不会再出落地页,此API已废弃,调用没有任何效果
                .debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
                .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
                .supportMultiProcess(true)//是否支持多进程
                .needClearTaskReset()
                //.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。
                .build();
    }
}





 然后就是在AppActivity里面添加以下代码


 

import android.util.Log;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;




 

  //初始化代码
    static public AppActivity activity;
    private String TAG = "cocos日志";
    private TTAdNative mTTAdNative;
    private TTRewardVideoAd mttRewardVideoAd;

 

 

        //穿山甲广告
        TTAdManagerHolder.init(this);
        activity = this;
//step1:初始化sdk
        TTAdManager ttAdManager = TTAdManagerHolder.get();
//step2:(可选,强烈建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题。
        TTAdManagerHolder.get().requestPermissionIfNecessary(this);
//step3:创建TTAdNative对象,用于调用广告请求接口
        mTTAdNative = ttAdManager.createAdNative(getApplicationContext());
        loadAd("广告位id", TTAdConstant.VERTICAL);




最后在后面添加以下方法

//播放广告方法,js中调用此方法。传入广告位id  codeId
    static public void showAd(String codeId) {
        Log.e(activity.TAG, "java广告方法");
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (activity.mttRewardVideoAd != null) {
                    //step6:在获取到广告后展示
                    //该方法直接展示广告
                    activity.mttRewardVideoAd.showRewardVideoAd(activity);
                    //展示广告,并传入广告展示的场景
                    activity.mttRewardVideoAd = null;
                } else {
                    Log.e(activity.TAG, "请先加载广告");
                }
            }
        });
    }

    public void sendReward() {
        Log.e(activity.TAG,"奖励发放java调用");
        activity.runOnGLThread(new Runnable() {
            @Override
            public void run() {

                String js = "JavaObjct.videoSuccess()";
                Cocos2dxJavascriptJavaBridge.evalString(js);
                Log.e(activity.TAG,"奖励发放完毕");
            }
        });
    }

    private void loadAd(final String codeId, int orientation) {
        //step4:创建广告请求参数AdSlot,具体参数含义参考文档
        Log.e(activity.TAG,"开始创建广告");
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(codeId)
                .setSupportDeepLink(true)
                .setImageAcceptedSize(1080, 1920)
                .setRewardAmount(1)  //奖励的数量
                .setUserID("")//用户id,必传参数,穿山甲后台可以看到你的用户id
                .setOrientation(orientation) //必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
                .build();
        //step5:请求广告
        mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
            @Override
            public void onError(int code, String message) {
                Log.e(TAG,"广告加载错误" +message);
            }

            @Override
            public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
                Log.e(TAG, "视频广告已经加载");
                mttRewardVideoAd = ad;
                mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {

                    @Override
                    public void onAdShow() {
                        Log.e(TAG, "视频广告播放");
                    }

                    @Override
                    public void onAdVideoBarClick() {
                        Log.e(TAG, "rewardVideoAd bar click");
                    }

                    @Override
                    public void onAdClose() {
                        Log.e(TAG, "rewardVideoAd close");
                        //关闭后再次加载广告
                        loadAd(codeId, TTAdConstant.VERTICAL);
                    }

                    //视频播放完成回调
                    @Override
                    public void onVideoComplete() {
                        Log.e(TAG,"rewardVideoAd complete");
                    }

                    @Override
                    public void onVideoError() {
                        Log.e(TAG,"rewardVideoAd error");
                        Log.e(activity.TAG,"奖励发放java调用");
                        activity.runOnGLThread(new Runnable() {
                            @Override
                            public void run() {

                                String js = "JavaObjct.videoFail()";
                                Cocos2dxJavascriptJavaBridge.evalString(js);
                                Log.e(activity.TAG,"视频播放失败");
                            }
                        });
                    }

                    //视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称
                    @Override
                    public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int var4, String var5) {
                        Log.e(TAG,"广告播放完成回调");

                        //发放奖励
                        sendReward();
                    }

                    @Override
                    public void onSkippedVideo() {
                    }
                });
            }

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

            //视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
            @Override
            public void onRewardVideoCached(TTRewardVideoAd ad) {
                Log.e(TAG, ad+"rewardVideoAd video cached");

            }

//            //视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
//            @Override
//            public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
//                Log.e(TAG, "视频广告已经加载");
//                mttRewardVideoAd = ad;
//                mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
//
//                    @Override
//                    public void onAdShow() {
//                        Log.e(TAG, "视频广告播放");
//                    }
//
//                    @Override
//                    public void onAdVideoBarClick() {
//                        Log.e(TAG, "rewardVideoAd bar click");
//                    }
//
//                    @Override
//                    public void onAdClose() {
//                        Log.e(TAG, "rewardVideoAd close");
//                        //关闭后再次加载广告
//                        loadAd(codeId, TTAdConstant.VERTICAL);
//                    }
//
//                    //视频播放完成回调
//                    @Override
//                    public void onVideoComplete() {
//                        Log.e(TAG,"rewardVideoAd complete");
//                    }
//
//                    @Override
//                    public void onVideoError() {
//                        Log.e(TAG,"rewardVideoAd error");
//                    }
//
//                    //视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称
//                    @Override
//                    public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int var4, String var5) {
//                        Log.e(TAG,"广告播放完成回调");
//
//                        //发放奖励
//                        sendReward();
//                    }
//
//                    @Override
//                    public void onSkippedVideo() {
//                    }
//                });
//            }
        });
    }


这样在cocos 里调用showAd方法就能播放广告啦

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值