文章时间:2020年6月13日。
工具:
CocosCreator : 2.3.4 (以下简称CCC)
Android Studio : 4.0 (以下简称AS)
SDK : Android 9.0(Level 28)
NDK : 29.0.3(最新版本是30.0.0)
本篇文章只针对CCC打包成Android应用的过程
CCC项目构建时我的选择项:(我这是竖屏游戏,各位自己构建时注意设备方向的选项)
现在基本上都是安卓9.0系统,我自己手机时安卓10,有几个同事的是安卓9,所以选择的API等级是android-28,28对应的是安卓9.0
这是Android Studio4.0的SDK Manager界面
这些都准备好后开始进入正题:接入穿山甲SDK
穿山甲官网审核完之后去接入中心看接入文档。
咱们一步一步来
第一步导入包
他这里写的是安卓原生系统导入的过程
那么CCC的包怎么放呢?于是我查找CCC官网的文档看到以下说明
既然我们是要打包成APP形式,那么文件就放在APP的libs文件夹
接下来就是全局配置
实际上CCC工程的game目录里有个Androidmainfast
已经配置好了,那么无视官网的权限配置即可
接下来接入文档的内容让我也懵逼了,
在官方Demo里面搜到的也是
各种看不懂,,然后我百度各种文章
其中有一篇文章告诉我需要复制TTAdManagerHolder.java这个文件到
org.cocos2dx.javascript这个包下面,改包名。
结果如下:
然后初始化这个类。
在AppActivity类里加上
static public AppActivity activity;
private String TAG = "cocos";
private TTAdNative mTTAdNative;
private TTRewardVideoAd mttRewardVideoAd;
在onCreate方法里加上
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);
结果如下:
在AppActivity里增加以下方法:
static public void showAd(String codeId) {
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() {
activity.runOnGLThread(new Runnable() {
@Override
public void run() {
String js = "cc.NativeBridge.rewardedAdCallback();";
Cocos2dxJavascriptJavaBridge.evalString(js);
Log.e(TAG,"rewardVideoAd evalString");
}
});
}
private void loadAd(final String codeId, int orientation) {
//step4:创建广告请求参数AdSlot,具体参数含义参考文档
AdSlot adSlot = new AdSlot.Builder()
.setCodeId(codeId)
.setSupportDeepLink(true)
.setImageAcceptedSize(1080, 1920)
.setRewardAmount(1) //奖励的数量
.setUserID("user123")//用户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 onRewardVideoCached() {
Log.e(TAG, "rewardVideoAd video cached");
}
//视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
@Override
public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
Log.e(TAG, "rewardVideoAd loaded");
mttRewardVideoAd = ad;
mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
@Override
public void onAdShow() {
Log.e(TAG, "rewardVideoAd show");
}
@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) {
Log.e(TAG,"rewardVideoAd rewardVerify");
sendReward();
}
@Override
public void onSkippedVideo() {
}
});
}
});
}
再找到你工程App文件夹里的proguard-roles.pro文件
新增代码混淆的相关代码
再次打包到手机,App启动提示获取权限,那么你加载广告即生效成功。
之后添加权限到AndroidManifest.xml,不要加到game文件夹里,经过测试修改game文件夹里的AndroidManifest.xml权限获取无效,需要修改app文件夹里的AndroidManifest.xml
<!-- 为穿山甲sdk新增 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
写在最后
整个穿山甲SDK的过程就是
1.导入sdk
2.初始化sdk
3.添加权限到AndroidManifest.xml
4.游戏启动的时候调用loadAd用来缓存广告视频
5.CCC工程使用jsb调用showAd即可
有任何问题可以在文章下方留言,我看到会解答的。
感谢各位观看本教程,希望能帮助到大家。
教程结束。