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下载地址

下载地址open in new window

下载后放入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

Last Updated:
Contributors: zhaochangchang, zhaochangchang@shenshiads.com