Cocos Creator AdSet对接文档
Android
重要说明
在做cocos creator广告sdk对接前,请先看下列说明。
1、cocos最低支持的安卓sdk是21对应安卓5.0.0,targetSdkVersion不能低于28。由于不同版本的cocos create 生成的Android studio项目不同, 请检查配置Android studio项目根目录的gradle.properties文件
2、gradle版本不能低于5.4.1,gradle插件版本不能低于3.5.4,对于cocos creator2.x的版本,由于默认生成的Android studio项目gradle和gradle 插件版本过低,需要设置调整。gradle插件版本设置在Android studio项目根目录的build.gradle设置,gradle版本在Android studio项目根目录的 gradle/wrapper/gradle-wrapper.properties文件设置
2、对于一些cocos造成的bug,我们不负责解答,包括但不限于
① cocos create 3.0.0-3.3.2在Android11以上系统闪退的问题
② cocos create 3.0.0调用
sys.os == sys.OS.ANDROID && sys.isNative
判断系统环境时导致卡死的问题(去掉判断就好)
3、对于cocos create3.6.* 以上的版本,默认构建后的Android studio项目使用了Androidx,但是sdk中有使用到support包,请在Android studio项目 的根目录的gradle.properties文件里面增加配置。 android.enableJetifier=true
,将sdk的support包自动转成Androidx包,如果已配置请忽略。
4、对于任意cocos creator版本,请在Android studio 项目根目录的gradle.properties文件增加配置 org.gradle.jvmargs=-Xmx4608m
,Xmx后面的 数字是构建时的分配的内存大小,m是单位MB,建议设置4G以上,也就是4096m+,否则打包的时候可能会失败。
5、某些版本的cocos creator在构建时会将Android studio 根目录的gradle.properties文件的配置修改成构建的默认配置,导致Android studio项目运行失败, 所以构建以后建议看一下这个文件的配置是否被修改。
6、对于cocos3.0.0-3.3.2版本,AndroidBridge文件如果无法直接通过 window["AndroidBridge"] = AndroidBridge.instance
将AndroidBridge注册为全局类 那么请在cocos项目的根目录加上文件 "global.d.ts" 这个文件在,sdk的"3.0.0-3.5.2"的目录下面
7、由于不同版本的cocos creator的typescript语法差异,对于不同版本的cocos sdk已做适配,请根据自己的cocos creator自行选择
8、除了开屏广告以外,其他类型的广告都需要先预加载,再播放,否则直接播放无效,预加载只需要执行一次,后续每次播放直接调用对应的广告类型播放就可。
9、对接过程中如果出现了未被提及的问题请联系我们技术处理
导入sdk
1、将下载后的压缩包解压,根据自己的cocos creator版本在不同的文件夹导入对应的sdk
2、cocos creator 3.x的直接在项目中选择导入资源包,再选择对应的压缩包就行导入,如果是cocos creator 2.x ,请将对应的文件夹和文件复制到自己的项目中即可。
3、sdk和demo是分开的,如果需要demo演示,请自行导入。导入方式和2一样。
4、项目导入后选择构建并生成一个Android studio项目。
5、用Android studio打开Android studio项目,在app文件夹下面创建一个名字叫libs的文件夹(如果已有请忽略),并将sdk解压后中的libs压缩包内里面的文件全部复制到libs文件夹中。
6、打开app/AndroidManifest.xml文件,
将下列内容复制到manifest节点下面 start-end
<manifest
.
.>
<!--start-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--end-->
.
.
</manifest>
将下列内容复制到application节点下面 start-end
<application
.
.>
<!--start-->
<!--注意,sigmob的配置只有在support环境下需要配置,Androidx环境可以忽略,不需要配置-->
<!--sigmob-->
<provider
android:name="com.sigmob.sdk.SigmobFileV4Provider"
android:authorities="${applicationId}.sigprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/sigmob_provider_paths" />
</provider>
<!--end-->
.
.
</application>
在application下面加上配置 tools:replace="android:allowBackup",如果已有配置tools:replace,请在后面拼接android:allowBackup,用","逗号分格
<application
android:allowBackup="true"
tools:replace="android:allowBackup"
android:networkSecurityConfig="@xml/network_security_config"
.
.
.
.
>
</application>
network_security_config文件:请将压缩包解压后的xml文件夹整个复制到res/values目录下
7、打开文件app/build.gradle
在dependencies节点添加下列内容 start-end
dependencies {
implementation fileTree(dir: '../libs', include: ['*.jar','*.aar'])
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
.
.
.
// start
//基础包
implementation 'com.shenshi:ad-openset-sdk:6.4.2.2'
//tanx
implementation 'com.shenshi:ad-tanx-adapter:3.5.6.2'
//bz
implementation 'com.shenshi:ad-beizi-adapter:4.90.4.11.7'
//gdt
implementation 'com.shenshi:ad-guangdiantong-adapter:4.600.1470.1'
//ks-ad 只对接广告请使用
implementation 'com.shenshi:ad-kuaishou-ad-adapter:3.3.67.1.1'
//ks-ct 广告、短视频和短剧请使用
implementation 'com.shenshi:ad-kuaishou-ct-adapter:3.3.66.5'
//sigmob
implementation 'com.shenshi:ad-sigmob-adapter:4.19.4.1'
//gromore
implementation 'com.shenshi:ad-gromore-adapter:6.3.1.7.1'
//bd
implementation 'com.shenshi:ad-baidu-adapter:9.36.5'
//hl
implementation 'com.shenshi:ad-hailiang-adapter:3.466.10.432.2'
//zy
implementation 'com.shenshi:ad-zhangyu-adapter:1.6.1.1.1'
//multidex 64K问题,如果已添加请忽略
implementation 'com.android.support:multidex:1.0.3'
//微信小程序广告预算相关,引入可提升ecpm。强烈建议引入
/**
* 1,进入微信开放平台创建移动应用;
* 2,应用创建完成后,获取到相应的微信ApplD;
* 3.在移动端嵌入最新版OpenSDK,并确认版本为5.3.1及以上;
* 4.在优量汇开发者平台,将微信开放平台填写的AppID与当前应用进行关联;
* 第四步联系我们运营帮你们配置
*/
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.28'
// end
}
在android-defaultConfig节点下面添加配置 multiDexEnabled true (start-end)
android{
.
.
defaultConfig {
.
.
multiDexEnabled true
}
}
8、打开根目录的build.gradle文件,将下列内容复制进去start-end。
buildscript {
.
.
.
repositories {
//start
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
// adset
maven {
allowInsecureProtocol = true
url "http://maven.shenshiads.com/nexus/repository/adset/"
}
//end
}
}
allprojects { //如果这行和下一行标签没有,自行添加
repositories {
//start
// GroMore
maven { url "https://artifact.bytedance.com/repository/Volcengine/" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
// 荣耀
maven { url 'https://developer.hihonor.com/repo' }
// adset
maven {
allowInsecureProtocol = true
url "http://maven.shenshiads.com/nexus/repository/adset/"
}
//end
}
}
9、打开app/proguard-rules.pro文件,将下列内容复制并粘贴到末尾
#-------------- AdSet start-------------
-keep class com.kc.openset.**{*;}
-keep class com.od.**{*;}
-dontwarn com.kc.openset.**
-keep @com.qihoo.SdkProtected.OSETSDK.Keep class **{*;}
-keep,allowobfuscation interface com.qihoo.SdkProtected.OSETSDK.Keep
#-------------- AdSet end-------------
#-------------- gromoe start-------------
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.ss.**{*;}
-dontwarn com.ss.**
-keep class bykvm*.**
-keep class com.bytedance.msdk.adapter.**{ public *; }
-keep class com.bytedance.msdk.api.** {
public *;
}
-keep class com.bytedance.msdk.base.TTBaseAd{*;}
-keep class com.bytedance.msdk.adapter.TTAbsAdLoaderAdapter{
public *;
protected <fields>;
}
#-keep class com.bykv.**{*;}
#-keep class com.byted.live.lite.**{*;}
#-keep class com.bytedance.**{*;}
#-keep class com.pandora.common.**{*;}
#-keep class com.ss.**{*;}
#-------------- gromoe end -------------
#-------------- 快手 start-------------
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
#-------------- 快手 end-------------
#-------------- sigmob start-------------
-dontoptimize
-keep class sun.misc.Unsafe { *; }
-keep class com.sigmob.**.**{*;}
-keep interface com.sigmob.**.**{*;}
-keep class com.czhj.**{*;}
-keep interface com.czhj.**{*;}
# androidx
-keep class com.google.android.material.** {*;}
-keep class androidx.** {*;}
-keep public class * extends androidx.**
-keep interface androidx.** {*;}
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**
-dontwarn androidx.**
# android.support.v4
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
#-------------- sigmob end-------------
#-------------- oaid start-------------
# 注意不同版本混淆不一样,如果你接入的是sdk默认的1.0.25版本就用下面的,其他版本自行检查
-keep class com.bun.supplier.** {*;}
-dontwarn com.bun.supplier.core.**
-keep class XI.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.asus.msa.**{*;}
-keep class com.bun.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.netease.nis.sdkwrapper.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.**{*;}
-keep class XI.**{*;}
#-------------- oaid end-------------
#-------------- 广点通 start-------------
-keep class com.qq.e.** {*;}
-dontwarn com.qq.e.**
#-------------- 广点通 end-------------
#-------------- 百度 start-------------
-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class com.baidu.mobads.** { *; }
-keep class com.style.widget.** {*;}
-keep class com.component.** {*;}
-keep class com.baidu.ad.magic.flute.** {*;}
-keep class com.baidu.mobstat.forbes.** {*;}
#-------------- 百度 end-------------
#-------------- okhttp3 start-------------
# OkHttp3
# https://github.com/square/okhttp
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.* { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
# okhttp 3
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-keepattributes InnerClasses
# Okio
-dontwarn com.squareup.**
-dontwarn okio.**
-keep public class org.codehaus.* { *; }
-keep public class java.nio.* { *; }
#----------okhttp end--------------
#----------log start--------------
-keep class com.aliyun.sls.android.producer.** { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
#----------log end--------------
#----------倍孜 start--------------
-dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }
-keep class com.qq.e.** {
public protected *;
}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-dontwarn org.apache.**
#----------倍孜 end--------------
#----------Glide start--------------
-dontwarn com.bumptech.glide.**
-keep class com.bumptech.glide.**{*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
#----------Glide end--------------
#----------阿里TanxAd start--------------
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}
-keep class com.bumptech.glide.**{*;}
-keep class com.alimm.tanx.**{*;}
# 有进程间通信,保证service相关不被混淆
#-keep public class * extends android.app.Service
#-keep public class * extends android.content.BroadcastReceiver
# 自动曝光数据的防混淆
-keep class * implements java.io.Serializable{
<fields>;
<methods>;
}
#----------阿里TanxAd end--------------
#----------华为荣耀 start--------------
-keep class com.hihonor.ads.** {*; }
#----------华为荣耀 end--------------
#-------------- 章鱼 start-------------
-dontwarn com.octopus.ad.**
-keep class com.octopus.ad.** {*;}
#-------------- 章鱼 end-------------
10、在Android studio中构建一下项目
11、打开app/src/com.***/AppActivity,在onCreate方法添加 CocosBridgeUtils.getInstance().init(this);
start-end
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// DO OTHER INITIALIZATION BELOW
SDKWrapper.shared().init(this);
// start
CocosBridgeUtils.getInstance().init(this);
// end
}
广告对接
以下流程在cocos中进行
初始化
AdSetUtils.instance.initSDK(userId: string, appKey: string, initResultListener: InitResultListener);
//参数说明:
userId:用户在你们平台的唯一id,用于线上日志追述和服务器回调用户定位,没有可传空字符串
appkey:在我们平台申请的媒体id,在后台查看,
InitResultListener {
initSuccess() {
//sdk初始化成功
}
initError(message: string) {
//sdk初始化失败
}
}
预加载激励广告
AdSetUtils.instance.preLoadReward(userId: string, posId: string)
//参数说明:
userId:用户在你们平台的唯一id,用于线上日志追述和服务器回调用户定位,没有可传空字符串
posId:激励视频广告位id
预加插屏广告
AdSetUtils.instance.preLoadInsert(userId: string, posId: string)
//参数说明:
userId:用户在你们平台的唯一id,用于线上日志追述和服务器回调用户定位,没有可传空字符串
posId:插屏广告位id
预加横屏插屏广告
AdSetUtils.instance.preLoadHorizontalInsert(userId: string, posId: string)
//参数说明:
userId:用户在你们平台的唯一id,用于线上日志追述和服务器回调用户定位,没有可传空字符串
posId:横屏插屏广告位id
播放开屏广告
AdSetUtils.instance.showSplash(posId: string, splashListener: SplashListener)
//参数说明:
posId:开屏广告位id
SplashListener {
onSplashShow(){
//广告曝光
}
onSplashError(errorCode: string, errorMessage: string) {
//广告播放失败
}
onSplashClick(){
//广告点击
}
onSplashClose(){
//广告关闭
}
}
播放激励视频广告
AdSetUtils.instance.showReward(userId: string, rewardListener: RewardListener)
//参数说明:
posId:开屏广告位id
RewardListener {
onRewardShow(key: string){
// 广告曝光,
// key:广告唯一id
}
onRewardClick() {
// 广告点击
}
onRewardClose(key: string){
// 广告关闭
// key:广告唯一id
}
onRewardVideoEnd(key: string){
// 视频播放结束
// key:广告唯一id
}
onRewardVideoStart(){
//视频开始播放
}
onRewardVerify(key: string, arg: number){
//激励视频广告产生了收益,在这里给用户下发奖励
// key:广告唯一id
}
onServiceResponse(code: number){ 0失败,1成功
//服务器回调使用,服务器回调调用你们接口响应结果,0代表https200。
}
onRewardError(errorCode: string, errorMessage: string){
//广告播放错误
}
}
播放插屏广告
AdSetUtils.instance.showInsert(insertListener: InsertListener)
//参数说明:
posId:开屏广告位id
InsertListener {
onInsertShow() {
// 广告曝光
}
onInsertClick() {
// 广告点击
}
onInsertClose() {
// 广告关闭
}
onInsertError(errorCode: string, errorMessage: string) {
// 广告播放失败
}
}
播放插屏横屏广告
AdSetUtils.instance.showHorizontalInsert(horizontalInsertListener: HorizontalInsertListener)
//参数说明:
posId:开屏广告位id
HorizontalInsertListener {
onHorizontalInsertShow() {
// 广告曝光
}
onHorizontalInsertClick() {
// 广告点击
}
onHorizontalInsertClose() {
// 广告关闭
}
onHorizontalInsertError(errorCode: string, errorMessage: string) {
// 广告播放失败
}
}