AdsetSdk Unity对接文档
SDK集成与配置
前提条件
1、Unity
支持Unity2020.x及以上版本,但是版本之间对接方式会有差异,请仔细阅读文档
2、Android
1、SDK支持Android5.0'Lollipop'(API level)及以上版本 2、gradle环境,gradle最低支持5.4.1,对应的gradle插件版本是3.5.4
3、iOS iOS11.0+,Xcode12+,暂不支持模拟器运行,请使用真机。
iOS所需SDK下载地址
下载后放入Assets/Plugins/iOS/文件夹下
SDK导入
1、通过官网下载并解压SDK包 2、在unity编辑器中打开你的项目,依次选择Import Package -> Custom Package,选择adset_unity.unitypackage文件,全选然后import导入。
3、在UnityEditor的顶部菜单栏中依次选择 File -> Build Settings -> Player Settings -> Player -> Publishing Settings。 在Build中选择Custom Main Manifest、Custom MainGradle Template、CustomProguard File,选择以后会在Assets/Plugins/Android 目录中生成对应的文件
通用
Unity2022.x+版本
Unity2020.x和Unity2021.x版本
4、在UnityEditor的顶部菜单栏中依次选择 File -> Build Settings -> Player Settings -> Player -> Other Settings Minimum API Level 选择Android 5.0 'Lollipop'(API Level 21)(最低支持版本) Target API Level一般默认就好,但注意,如果使用的是UnityEditor默认的gradle,那么2022.x最高可设置API34,2020.x-2021.x最高设置API33。
5、在上面第3步生成的文件中
① 打开Assets/Plugins/Android/AndroidManifest文件,将以下内容复制并粘贴到 application 节点下
<!--注意,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>
将下列内容粘贴到manifest节点下面
<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" />
将下列内容粘贴到application标签下面
<application
android:usesCleartextTraffic="true"
android:allowBackup="true"
tools:replace="android:allowBackup">
</application>
如下图所示
② 打开Assets/Plugins/Android/baseProjectTemplate文件,将下列内容复制到repositories节点
// 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/" }
>如下图所示
③ 打开Assets/Plugins/Android/mainTemplate文件,将下列内容复制进去
//dependencies节点下
//基础包
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'
//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'
defaultConfig节点下
multiDexEnabled true
如下图所示
③ 打开Assets/Plugins/Android/proguard-user文件,将混淆配置添加进去
#-------------- 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-------------
如果你使用的是unity2020.x和2021.x版本,并且在第4步中将TargetApi版本设置成了30+,那么还需要将mainTemplate和launcherTemplate文件的compileSdkVersion **APIVERSION**中的**APIVERSION**配置改成30
iOS 导入
1、iOS需将Plugins里iOS下的包和文件全部导入工程,且BuildCallback需要放在Assets/Editor/文件夹下,编译时自动添加iOS依赖库。BridgeCore和安卓共用,调用方法是同一个,回调方法参考AdSet.cs文件内 #if UNITY_IOS * #endif 内代码
SDK初始化
BridgeCore.InitSdk(userId, AppKey, new InitResultListener());
参数说明
userId:用户在你们平台的唯一id,用于服务器回调给用户发放奖励和线上日志定位使用,有就传,没有可不传
AppKey:后台申请的媒体id,
listener:
public class InitResultListener : IInitResultListener
{
public void OnError(string message)
{
ShowToast("广告初始化失败->" + message);
}
public void OnSuccess()
{
ShowToast("广告初始化成功");
}
}
重要说明
除了开屏广告,插屏,插屏横屏以及激励这三种广告都分为预加载和播放两个过程,预加载建议在广告sdk初始化结束时就调用,不需要知道预加载的结果,即使刚调用预加载也可以立即调用对应的show方法进行广告播放,只不过第一次播放时间会比较慢。如果广告播放失败或者没有填充会回调Error
开屏广告
BridgeCore.ShowSplash(POS_ID_Splash, new SplashListener());
参数说明
posId:开屏广告的广告位id
listener:
public class SplashListener : ISplashListener
{
public void OnClick()
{
ShowToast("开屏广告点击->OnClick");
}
public void OnClose()
{
ShowToast("开屏广告关闭->OnClose");
}
public void OnError(string errorCode, string errorMessage)
{
ShowToast($"开屏广告加载错误->OnError-> errorCode:{errorCode},errorMessage:{errorMessage}");
}
public void OnShow()
{
ShowToast("开屏广告播放->OnShow");
}
}
插屏广告
1、预加载
BridgeCore.PreLoadInsert(userId, POS_ID_Insert)
参数说明
userId:用户id
POS_ID_Insert:插屏广告位id
2、播放
BridgeCore.ShowInsert(new InsertListener());
参数说明
listener
public class InsertListener : IInsertListener
{
public void OnClick()
{
ShowToast("插屏广告点击->OnClick");
}
public void OnClose()
{
ShowToast("插屏广告关闭->OnClose");
}
public void OnError(string errorCode, string errorMessage)
{
ShowToast($"插屏广告加载错误->OnError-> errorCode:{errorCode},errorMessage:{errorMessage}");
}
public void OnShow()
{
ShowToast("插屏广告播放->OnShow");
}
}
插屏横屏广告
1、预加载
BridgeCore.PreLoadHorizontalInsert(userId, POS_ID_Insert_Horizontal)
参数说明
userId:用户id
POS_ID_Insert_Horizontal:插屏广告位id
2、播放
BridgeCore.ShowHorizontalInsert(new HorizontalInsertListener());
参数说明
listener
public class HorizontalInsertListener : IInsertListener
{
public void OnClick()
{
ShowToast("横屏插屏广告点击->OnClick");
}
public void OnClose()
{
ShowToast("横屏插屏广告关闭->OnClose");
}
public void OnError(string errorCode, string errorMessage)
{
ShowToast($"横屏插屏广告加载错误->OnError-> errorCode:{errorCode},errorMessage:{errorMessage}");
}
public void OnShow()
{
ShowToast("横屏插屏广告播放->OnShow");
}
}
激励广告
1、预加载
BridgeCore.PreLoadReward(userId, POS_ID_RewardVideo);
参数说明
userId:用户id
POS_ID_RewardVideo:插屏广告位id
2、播放
BridgeCore.ShowReward(userId, new RewardListener());
参数说明
userId:用户id
listener:
public class RewardListener : IRewardListener
{
public void OnClick()
{
ShowToast("激励广告点击->OnClick");
}
public void OnClose(string key)
{
ShowToast("激励广告关闭->OnClose");
}
public void OnError(string errorCode, string errorMessage)
{
ShowToast($"激励广告加载错误->OnError-> errorCode:{errorCode},errorMessage:{errorMessage}");
}
public void OnReward(string key, int arg)
{
ShowToast("激励广告获取奖励成功->OnReward");
}
public void OnShow(string key)
{
ShowToast("激励广告获曝光->OnShow");
}
public void OnVideoEnd(string key)
{
ShowToast("激励广告视频播放结束->OnVideoEnd");
}
public void OnVideoStart()
{
ShowToast("激励广告视频开始播放->OnVideoStart");
}
}
iOS 广告调用与回调
1、设置回调类名 SetBlockClassName
// 设置iOS回调方法所在类的名称
BridgeCore.SetBlockClassName(name);
注意:此方法一定要在调用广告前设置,否则会接收不到广告回调
2、iOS广告事件回调
#if UNITY_IOS
// 初始化
public void OSETIOSInitOnSuccess()
{
ShowToast("iOS初始化成功");
}
public void OSETIOSInitOnError()
{
ShowToast("iOS初始化失败");
}
// 开屏
public void OSETIOSSplashOnError(string error)
{
ShowToast($"iOS开屏加载失败->{error}");
}
public void OSETIOSSplashOnShow()
{
ShowToast("iOS开屏展示");
}
public void OSETIOSSplashOnClick()
{
ShowToast("iOS开屏点击");
}
public void OSETIOSSplashOnClose()
{
ShowToast("iOS开屏关闭");
}
// 插屏
public void OSETIOSInsertOnError(string error)
{
ShowToast($"iOS插屏加载失败->{error}");
}
public void OSETIOSInsertOnShow()
{
ShowToast("iOS插屏展示");
}
public void OSETIOSInsertOnClick()
{
ShowToast("iOS插屏点击");
}
public void OSETIOSInsertOnClose()
{
ShowToast("iOS插屏关闭");
}
// 横屏插屏
public void OSETIOSHorizontalInsertOnError(string error)
{
ShowToast($"iOS横屏插屏加载失败->{error}");
}
public void OSETIOSHorizontalInsertOnShow()
{
ShowToast("iOS横屏插屏展示");
}
public void OSETIOSHorizontalInsertOnClick()
{
ShowToast("iOS横屏插屏点击");
}
public void OSETIOSHorizontalInsertOnClose()
{
ShowToast("iOS横屏插屏关闭");
}
// 激励
public void OSETIOSRewardOnError(string error)
{
ShowToast($"iOS激励加载失败->{error}");
}
public void OSETIOSRewardOnSuccess()
{
ShowToast("iOS激励加载成功");
}
public void OSETIOSRewardOnClick()
{
ShowToast("iOS激励点击");
}
public void OSETIOSRewardOnClose()
{
ShowToast("iOS激励关闭");
}
public void OSETIOSRewardOnReward(string checkString)
{
ShowToast($"iOS激励达到奖励->{checkString}");
}
public void OSETIOSRewardPlayStart()
{
ShowToast("iOS激励开始播放");
}
public void OSETIOSRewardPlayEnd()
{
ShowToast("iOS激励播放结束");
}
public void OSETIOSRewardPlayError()
{
ShowToast("iOS激励播放失败");
}
#endif