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) {
        // 广告播放失败
    }
}
Last Updated:
Contributors: zhaochangchang, zhaochangchang@shenshiads.com