首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果。下载完后可以进入他工程下的libs的文件夹里把两个aar文件拖出来,并且在你游戏构建出来的工程里创建一个libs,然后拖进去,如下图:
接下来就是引入你的aar文件,文档中给了代码,但实际上游戏工程不需要自己在引入因为在你的build.gradle文件中有这行代码
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
如果你在自己引入的会可能会产生问题,就是我这样的,我这个问题也是找了好久…如下图:
重复引入,当你确定只引入了一次,但还有这个问题的时候,请尝试一下clean project 后重新编译一次,一般来说这个问题就没了,当你发现你的工程的这个部分有下图的显示的时候代表你在你工程中引入sdk成功就可以开始进行一些配置然后开始按照文档撸代码了。
然后开始进行manifest文件和其他的配置了,首先
然后如果需要在android7.0以上运行的还要提供这个,这个直接写在application下面就行
然后在res文件夹下面建立一个名字为xml文件夹,建立一个名字为file_paths的xml文件,其实名字可以改我是懒得改了
然后还需提供一个配置
还需要在你的build.gradle文件下写个这个,不然到时会有问题至于当时的错误这两天忙的记不清楚了
ndk {
//选择要添加的对应cpu类型的.so库。 // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
配置完这些就可以开始撸代码了,还是同样的流程,先初始化,然后使用文档的代码加载广告啊,以及广告视频的一些回调。因为我看了它工程里的代码,所以我也按照他的方式进行的初始,先建一个名字为TTAdManagerHolder的类,代码如下
package org.cocos2dx.javascript;
import android.content.Context;
import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdSdk;
public class 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(Context context) {
doInit(context);
}
//step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
private static void doInit(Context context) {
if (!sInit) {
TTAdSdk.init(context, buildConfig(context));
sInit = true;
}
}
private static TTAdConfig buildConfig(Context context) {
return new TTAdConfig.Builder()
.appId("后台配置的应用id") //
.useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.appName("应用名字")
.titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowShowNotify(true) //是否允许sdk展示通知栏提示
.allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.supportMultiProcess(false)//是否支持多进程
//.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。
.build();
}
}
然后新建一个myapplication的类,这个类的作用就是在应用启动的时候先进行初始化在进行页面加载等其他操作,别忘记了在mainfest文件中调用一下,代码如下
package org.cocos2dx.javascript;
import android.app.Application;
//我接了facebook的sdk所以这些注释不需要
//import com.facebook.ads.AudienceNetworkAds;
public class MyApplication extends Application{
@Override
public void onCreate(){
super.onCreate();
//AudienceNetworkAds.initialize(this);
//AudienceNetworkAds.isInAdsProcess(this);
TTAdManagerHolder.init(this);
}
}
这样就完成了初始化,接下来要做的就是回到你的AppActivity这个类进行广告加载等一些操作啦,在onCreate方法里调用chuanShanJiaInit这个方法,代码如下
public void chuanShanJiaInit(){
//step1:初始化sdk
TTAdManager ttAdManager = TTAdManagerHolder.get();
//step2:(可选,强烈建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题。
TTAdManagerHolder.get().requestPermissionIfNecessary(this);
//step3:创建TTAdNative对象,用于调用广告请求接口
mTTAdNative = ttAdManager.createAdNative(getApplicationContext());
Log.e("穿山甲初始化","chuanShanJiaInit");
TTstate="loading";
loadAd();
}
private static boolean mHasShowDownloadActive = false;
//加载视频广告
private static void loadAd() {
Log.e("穿山甲加载广告","穿山甲加载广告loadAd");
//step4:创建广告请求参数AdSlot,具体参数含义参考文档
AdSlot adSlot = new AdSlot.Builder()
.setCodeId("广告id") //
.setSupportDeepLink(true)
.setImageAcceptedSize(1080, 1920)
.setRewardName("videoReward") //奖励的名称
.setRewardAmount(2) //奖励的数量
.setUserID("user123")//用户id,必传参数
.setMediaExtra("media_extra") //附加参数,可选
.setOrientation(TTAdConstant.VERTICAL) //必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
.build();
//step5:请求广告
mTTAdNa额tive.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
@Override
public void onError(int code, String message) {
TTstate="loadingFail";
Log.e("穿山甲请求广告失败","穿山甲请求广告onError"+TTstate);
}
//视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。
@Override
public void onRewardVideoCached() {
Log.e("穿山甲请求广告加载后","视频资源缓存到本地的回调");
}
//视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。
@Override
public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
//TToast.show(RewardVideoActivity.this, "rewardVideoAd loaded");
Log.e("穿山甲广告素材加载完毕","视频广告的素材加载完毕");
mttRewardVideoAd = ad;
mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
@Override
public void onAdShow() {
Log.e("穿山甲广告播放","视频广告播放");
}
@Override
public void onAdVideoBarClick() {
//TToast.show(RewardVideoActivity.this, "rewardVideoAd bar click");
}
@Override
public void onAdClose() {
Log.e("穿山甲广告播放完毕点击关闭","穿山甲广告播放完毕点击关闭");
}
//视频播放完成回调
@Override
public void onVideoComplete() {
//TToast.show(RewardVideoActivity.this, "rewardVideoAd complete");
Log.e("穿山甲广告播放完毕","穿山甲广告播放完毕");
}
@Override
public void onVideoError() {
Log.e("穿山甲广告哦播放错误","穿山甲广告播放错误");
}
//视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称
@Override
public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName) {
//TToast.show(RewardVideoActivity.this, "verify:" + rewardVerify + " amount:" + rewardAmount +
// " name:" + rewardName);
Log.e("穿山甲广告播放完成后,奖励验证回调","奖励名称"+rewardName);
sendReward();
}
@Override
public void onSkippedVideo() {
//TToast.show(RewardVideoActivity.this, "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) {
if (!mHasShowDownloadActive) {
mHasShowDownloadActive = true;
//TToast.show(RewardVideoActivity.this, "下载中,点击下载区域暂停", Toast.LENGTH_LONG);
}
}
@Override
public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
//TToast.show(RewardVideoActivity.this, "下载暂停,点击下载区域继续", Toast.LENGTH_LONG);
}
@Override
public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
//TToast.show(RewardVideoActivity.this, "下载失败,点击下载区域重新下载", Toast.LENGTH_LONG);
}
@Override
public void onDownloadFinished(long totalBytes, String fileName, String appName) {
//TToast.show(RewardVideoActivity.this, "下载完成,点击下载区域重新下载", Toast.LENGTH_LONG);
}
@Override
public void onInstalled(String fileName, String appName) {
//TToast.show(RewardVideoActivity.this, "安装完成,点击下载区域打开", Toast.LENGTH_LONG);
}
});
this.runOnUiThread(new Runnable() {
@Override
public void run() {
mttRewardVideoAd.showRewardVideoAd(this,TTAdConstant.RitScenes.CUSTOMIZE_SCENES,"scenes_test");
mttRewardVideoAd = null;
Log.e("穿山甲广告展示","mttRewardVideoAd不为空,开始播放");
}
});
}
});
}
//视频广告发送奖励
private static void sendReward(){
this.runOnGLThread(new Runnable() {
@Override
public void run() {
//自己游戏奖励
Cocos2dxJavascriptJavaBridge.evalString("adMgr.androidVideoFinish();");
}
});
}
//展示视频广告
private static void showAds(final String placementId,final String adsSign){
if(mttRewardVideoAd != null) {
//step6:在获取到广告后展示
//该方法直接展示广告
//展示广告,并传入广告展示的场景
Instance.runOnUiThread(new Runnable() {
@Override
public void run() {
mttRewardVideoAd.showRewardVideoAd(Instance,TTAdConstant.RitScenes.CUSTOMIZE_SCENES,"scenes_test");
mttRewardVideoAd = null;
Log.e("穿山甲广告展示","mttRewardVideoAd不为空,开始播放");
}
});
}
}
好了,代码就这些,有些变量我没写在里面实在不想写这些了,如果实在有些地方小伙伴不懂就去demo的工程里看下,至此测试的视频应该就可以在手机上播放了,下一篇是接入的插屏广告。