Unity接入穿山甲广告SDK教程
穿山甲广告SDK接入教程
- 准备工作
- 开始Unity工作了
- 修改包名就可以直接打包使用了
- 如果要接其他非Unity插件的SDK,要写java的看另一篇文章
- -------以下是安卓平台的一些配置说明-------
- Android平台相关配置
- 适配Anroid7.0以上
- provider配置
- 运行环境配置(可以不用配置,使用Unity默认就可以)
- Android初始化Unity插件
- 初始化接口说明
- 初始化配置参数说明
- 加载广告
- 全屏视频广告
自己做的小游戏需要接广告,就记录一下接入过程,这里选择的是unity插件,接起来相对方便,希望能帮助到小白选手(其实我也是个小白…哈哈哈),后边有改变的会继续更新,有写的不对的希望大佬指正。
准备工作
1.创建账号 穿山甲官网https://www.pangle.cn/
2.添加应用
3.添加代码位(广告位)
4.下载SDK(接入中心-穿山甲SDK Unity插件)
开始Unity工作了
- 打开Unity(我是使用的是2019.4.9f版本)
- 导入插件(三个都导入)
修改包名就可以直接打包使用了
修改AndroidManifest.xml里边的包名换成自己的就可以打包使用了,可以参考官方类子
如果要接其他非Unity插件的SDK,要写java的看另一篇文章
安卓导出arr供Unity使用教程及相关报错整理
-------以下是安卓平台的一些配置说明-------
Android平台相关配置
可以根据官网文档或者下载包中pdf进行配置,如下图
或者跟着下边教程,在Plugins -> Android -> AndroidManifest.xml文件里检查以下配置信息,如果没有需手动添加
<!--必要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--可选权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<!--可选,向开发者声明获取定位后,才可慎重添加此权限,穿山甲将依据此权限投放精准广告-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 如果有视频相关的广告且使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
注意:上边红框处要修改为自己的包名
适配Anroid7.0以上
如果您的应用需要适配Anroid7.0及以上,请在AndroidManifest中添加如下代码:
<providerandroid:name="com.bytedance.sdk.openadsdk.TTFileProvider"android:authorities="${applicationId}.TTFileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
</provider>
在Assets/Plugins/Android/res/xml目录下,新建一个xml文件file_paths,在该文件中添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files_path" path="Download" /> <!--为了适配所有路径可以设置 path = "." -->
</paths>
为了适配下载和安装相关功能,在工程中引用的包 com.android.support:support-v4:24.2.0
使用24.2.0以及以上版本。
注意插件中依赖的sdk:
- support相关的包:在我们提供的插件Assets/UnionPlatform/Plugins/Android目录下,分别是support-v4-compat.jar 、support-v4-utils.jar,如果开发者也用到了相关的包,可选择用自己的support包,需要注意版本得使用24.2.0以及以上。
- 广告插件相关的包:在我们提供的插件Assets/UnionPlatform/Plugins/Android目录下,分别是android-gif-drawable-1.2.6.aar 、android-query-full.0.26.7.jar、open_ad_sdk.aar 。这些包必须引入。
- 原生广告自定义用到的包:在我们提供的插件Assets/UnionPlatform/Plugins/Android目录下,其中 volley.jar 在原生广告自定义的加载图片有用到,开发者可根据自己使用的图片加载库替换,并在原生实现类里做相应修改。
provider配置
<providerandroid:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"android:authorities="${applicationId}.TTMultiProvider"android:exported="false" />
运行环境配置(可以不用配置,使用Unity默认就可以)
插件可在Android平台上可运行于Android4.0 (API Level 14) 及以上版本。
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
注意:
- 如果开发者声明targetSdkVersion到API 23以上,请确保调用本SDK的任何接口前,已经申请到了SDK要求的所有权限。否则SDK可能无法正常工作。
- 如果targetSdkVersion >= P版本,则需要在AndroidManifest.xml 文件中添加:
<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>
注意: SDK中使用的so文件支持四种架构:x86,x86_64,armeabi-v7a,arm64-v8a, 如果您应用中支持的
架构超出这 四种,请在build.gradle中使用abiFilters选择支持的架构。如下所示: ndk { // 设置支持的
SO 库构架,注意这里要根据你的实际情况来设置 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' }
Android初始化Unity插件
Android平台上的初始化,开发者需要在Application#onCreate()方法中调用以下代码来初始化网盟sdk。
目前sdk已支持多进程,如果是多进程环境,需要根据说明打开相关设置。
public class UnionApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//强烈建议在应用对应的Application#onCreate()方法中调用,避免出现content为null的异常TTAdSdk.init(context,new TTAdConfig.Builder().appId("5001121").useTextureView(false) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView.appName("APP测试媒体").titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK).allowShowNotify(true) //是否允许sdk展示通知栏提示.allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页.debug(true) //测试阶段打开,可以通过日志排查问题,上线时去除该调用.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合.supportMultiProcess(false) //是否支持多进程,true支持.build());}
}
初始化接口说明
/*** 网盟sdk初始化入口** @param context 必须是application context* @param config 初始化配置信息,必要参数* @return TTAdManager实例*/public static TTAdManager init(Context context, TTAdConfig config);
初始化配置参数说明
public static class TTAdConfig.Builder {private String mAppId;// 必选参数,设置应用的AppIdprivate String mAppName;// 必选参数,设置应用名称private boolean mIsPaid = false;// 可选参数,设置是否为计费用户:true计费用户、false非计费用户。默认为false非计费用户private int mGender = TTAdConstant.GENDER_UNKNOWN;// 可选参数,设置用户性别。默认为未知TTAdConstant#GENDER_UNKNOWNprivate int mAge;// 可选参数,设置用户年龄 **须大于0**private String mKeywords;// 可选参数,设置用户画像的关键词列表 **不能超过为1000个字符**private String mData;// 可选参数,设置额外的用户信息 **不能超过为1000个字符**private int mTitleBarTheme = TTAdConstant.TITLE_BAR_THEME_LIGHT;// 可选参数,设置落地页主题,默认为TTAdConstant#TITLE_BAR_THEME_LIGHTprivate boolean mAllowShowNotify = true;// 可选参数,设置是否允许SDK弹出通知:true允许、false禁止。默认为true允许private boolean mIsDebug = false;// 可选参数,是否打开debug调试信息输出:true打开、false关闭。默认false关闭private boolean mAllowShowPageWhenScreenLock = false;// 可选参数,设置是否允许落地页出现在锁屏上面:true允许、false禁止。默认为false禁止private int[] mDirectDownloadNetworkType;private boolean mIsUseTextureView = false;// 可选参数,设置是否使用texture播放视频:true使用、false不使用。默认为false不使用(使用的是surface)private boolean mIsSupportMultiProcess = false;// 可选参数,设置是否支持多进程:true支持、false不支持。默认为false不支持}
加载广告
1.构建AdNative对象 :
AdNative对象为加载广告的入口,可用于广告获取。
- 构建方法:
//一定要在初始化后才能调用,否则为空this.adNative = SDK.CreateAdNative();
- 接口说明:
public static class SDK{/// <summary>/// 获取SDK的版本号/// </summary>public static string Version{get { return "1.0.0"; }}/// <summary>/// 创建AdNative对象,用于加载广告/// </summary>public static AdNative CreateAdNative(){return new AdNative();}/// <summary>/// Android平台上,请求一些必要的权限,如READ_PHONE_STATE.///为获取更好的广告推荐效果,以及提高激励视频广告、下载类广告等填充率,///建议在广告请求前,合适的时机调用该方法,///如在用户第一次启动您的app后的主界面时调用如下方法:/// </summary>public static void RequestPermissionIfNecessary(){}/// <summary>/// 当退出应用时是否展示安装应用对话框/// </summary>/// <returns>True代表展示对话框.</returns>public static bool TryShowInstallDialogWhenExit(Action onExitInstall){return false;}}
- AdNative接口说明:
public sealed class AdNative{/// <summary>/// 加载Feed流原生广告./// </summary>public void LoadFeedAd(AdSlot adSlot, IFeedAdListener listener){}/// <summary>/// 加载竖版视频流广告/// </summary>public void LoadDrawFeedAd(AdSlot adSlot, IDrawFeedAdListener listener){}/// <summary>/// 加载原生广告,目前支持原生banner、原生banner./// </summary>public void LoadNativeAd(AdSlot adSlot, INativeAdListener listener){}/// <summary>/// 加载模板banner广告./// </summary>public void LoadBannerAd(AdSlot adSlot, IBannerAdListener listener){}/// <summary>/// 加载模板插屏广告/// </summary>public void LoadInteractionAd(AdSlot adSlot, IInteractionAdListener listener){}/// <summary>/// 加载开屏广告,可设置超时时间/// </summary>public void LoadSplashAd(AdSlot adSlot, ISplashAdListener listener, int timeOut){}/// <summary>/// 加载开屏广告/// </summary>public void LoadSplashAd(AdSlot adSlot, ISplashAdListener listener){}/// <summary>/// 加载激励视频广告/// </summary>public void LoadRewardVideoAd(AdSlot adSlot, IRewardVideoAdListener listener){}/// <summary>/// 加载全屏视频广告/// </summary>public void LoadFullScreenVideoAd(AdSlot adSlot, IFullScreenVideoAdListener listener){}}
2.构建AdSlot对象
AdSlot对象为加载广告时需要设置的广告信息,在AdNative加载广告时使用。
- 构建方法:
AdSlot adSlot = new AdSlot.Builder()// 必选参数 设置您的CodeId.setCodeId(“900486272") // 必选参数 设置广告图片的最大尺寸及期望的图片宽高比,单位Px// 注:如果您在头条广告平台选择了原生广告,返回的图片尺寸可能会与您期望的尺寸有较大差异.setImageAcceptedSize(640, 320)// 可选参数 设置是否支持deeplink.setSupportDeepLink(true)// 可选参数,针对信息流广告设置每次请求的广告返回个数,最多支持3个.setAdCount(2)//请求原生广告时候需要设置,参数为TYPE_BANNER或TYPE_INTERACTION_AD.setNativeAdType(AdSlot.TYPE_BANNER)//激励视频奖励的名称,针对激励视频参数.setRewardName("金币")//激励视频奖励个数.setRewardAmount(3)//用户ID,使用激励视频必传参数//表来标识应用侧唯一用户;若非服务器回调模式或不需sdk透传,可设置为空字符串.setUserID("user123")//设置期望视频播放的方向,为TTAdConstant.HORIZONTAL或TTAdConstant.VERTICAL.setOrientation(orientation)//激励视频奖励透传参数,字符串,如果用json对象,必须使用序列化为String类型,可为空.setMediaExtra("media_extra").build();
全屏视频广告
本SDK为接入方提供全屏视频广告,该广告的效果是播放全屏的视频,视频一定时间后可跳过,无需全程观看完。
支持的广告尺寸: 全屏横屏播放和竖屏,默认横屏。
- FullScreenVideoAd接口说明
public sealed class FullScreenVideoAd{public void Dispose(){}/// <summary>/// 设置广告交互事件监听/// </summary>public void SetFullScreenVideoAdInteractionListener(IFullScreenVideoAdInteractionListener listener){}/// <summary>/// 设置下载类广告监听(Android)/// </summary>public void SetDownloadListener(IAppDownloadListener listener){}/// <summary>/// 获取广告交互类型/// </summary>public int GetInteractionType(){return 0;}/// <summary>/// 展示全屏视频广告/// </summary>public void ShowFullScreenVideoAd(){}/// <summary>/// 设置是否展示现在bar/// </summary>public void SetShowDownLoadBar(bool show){}}
- 加载全屏视频广告
由于全屏视频广告加载需要时间,建议您提前加载广告,并且设置好对应回调事件的监听
public void LoadFullScreenVideoAd(){var adSlot = new AdSlot.Builder()
#if UNITY_IOS.SetCodeId("900546299")
#else.SetCodeId("901121375")
#endif.SetSupportDeepLink(true).SetImageAcceptedSize(1080, 1920).SetOrientation(AdOrientation.Horizontal).Build();this.AdNative.LoadFullScreenVideoAd(adSlot, new FullScreenVideoAdListener(this));}
广告加载完成监听
建议在 "OnFullScreenVideoCached" 之后展示广告,可以使广告更流畅
private sealed class FullScreenVideoAdListener : IFullScreenVideoAdListener{private Example example;public FullScreenVideoAdListener(Example example){this.example = example;}// 加载激励视频广告失败 public void OnError(int code, string message){Debug.LogError("OnFullScreenError: " + message);this.example.information.text = "OnFullScreenError: " + message;}// 加载激励视频广告成功,表示可以在线播放,并没有本地视频缓存public void OnFullScreenVideoAdLoad(FullScreenVideoAd ad){Debug.Log("OnFullScreenAdLoad");this.example.information.text = "OnFullScreenAdLoad";ad.SetFullScreenVideoAdInteractionListener(new FullScreenAdInteractionListener(this.example));ad.SetDownloadListener(new AppDownloadListener(this.example));this.example.fullScreenVideoAd = ad;}//成功缓存视频数据,表示播放时可以使用本地缓存进行播放 public void OnFullScreenVideoCached(){Debug.Log("OnFullScreenVideoCached");this.example.information.text = "OnFullScreenVideoCached";}}
- 展示全屏视频广告
必须等待广告加载完成之后,调用此方法 ShowFullScreenVideoAd.
public void ShowFullScreenVideoAd()
{if (this.fullScreenVideoAd == null){Debug.LogError("请先加载广告");this.information.text = "请先加载广告";return;}this.fullScreenVideoAd.ShowFullScreenVideoAd();
}
- 全屏视频广告相关事件监听设置
“FullScreenAdInteractionListener” 广告点击以及展示相关
private sealed class FullScreenAdInteractionListener : IFullScreenVideoAdInteractionListener{private Example example;public FullScreenAdInteractionListener(Example example){this.example = example;}public void OnAdShow(){Debug.Log("fullScreenVideoAd show");this.example.information.text = "fullScreenVideoAd show";}public void OnAdVideoBarClick(){Debug.Log("fullScreenVideoAd bar click");this.example.information.text = "fullScreenVideoAd bar click";}public void OnAdClose(){Debug.Log("fullScreenVideoAd close");this.example.information.text = "fullScreenVideoAd close";}public void OnVideoComplete(){Debug.Log("fullScreenVideoAd complete");this.example.information.text = "fullScreenVideoAd complete";}public void OnVideoError(){Debug.Log("fullScreenVideoAd OnVideoError");this.example.information.text = "fullScreenVideoAd OnVideoError";}public void OnSkippedVideo(){Debug.Log("fullScreenVideoAd OnSkippedVideo");this.example.information.text = "fullScreenVideoAd skipped";}}
"AppDownloadListener" 广告下载相关(只有安卓才有相应回调,iOS无内部下载),具体使用和激励视频场景一致
- 全屏视频广告销毁
由于全屏视频始终被引用,那么对应的资源就不会释放,需要主动释放 “FullScreenVideoAd”
public void DisposeAds()
{#if UNITY_IOSif (this.fullScreenVideoAd != null){this.fullScreenVideoAd.Dispose();this.fullScreenVideoAd = null;}
#elseif (this.fullScreenVideoAd != null){this.fullScreenVideoAd = null;}
#endif
}
如果需要多条全屏视频, 建议创建多个 "FullScreenVideoAd " 分开管理对应视频.
如果每次只展示一个,那么可以在第一个全屏视频 close 之后使用调用 "LoadFullScreenVideoAd"
再次加载新的全屏视频。具体使用请参考demo示例。
Unity接入穿山甲广告SDK教程相关推荐
- Unity接入穿山甲广告SDK(以及GroMoreDemo)
Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...
- Unity接入穿山甲广告(使用Unity3D插件)
最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...
- Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了
自己做的小游戏需要接广告,之前尝试过UnityAds和AdMob,但是都有点小问题.UnityAds对国内本土支持不好,Banner广告经常没有内容.Admob基本上都要对接到googlePlay,国 ...
- 无需上架,接入穿山甲广告和广点通广告 sdk
我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...
- CocosCreator接入穿山甲广告(IOS)
说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...
- Unity3D游戏接入小米广告SDK
此文章只讲Unity与Android核心交互代码 详细接入可参考小米广告 SDK Android 集成指南 小米广告常用有四种,1.开屏广告.2.Banner横幅广告.3.插屏广告.4.激励视频广告. ...
- CocosCreator接入穿山甲广告总结
最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...
- Unity接入微信支付SDK
最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...
- Unity接入Android广告: 三、Android端接入小米广告SDK
1.导入小米广告SDK SDK在 小米开发者平台 中可以下载 导入MimoSdk.jar,右击jar包,Add As Library 在Module的AndroidManifest.xml中加入SDK ...
- 穿山甲广告SDK手动初始化解决方案
1.序言 最近广告小游戏对隐私协议卡的比较严,taptap官方提出整改建议是,在用户同意隐私协议后在加载穿山甲的广告.研究了一下: 2.大概思路是 修改原本的 UnionApplication.jav ...
最新文章
- 为了面试,从头到尾说一次 Java 垃圾回收
- 数据库范式(1NF、2NF、3NF、BCNF)
- nuxt 过滤 query 参数
- 10000 字讲清楚 Spring Boot 注解原理
- 必要商城MySQL开发规范
- struts2+spring3+hibernate3+mysql简单登录实现
- java/javascript 时间操作工具类
- treeview节点的复制 c# 1614606987
- C++中字符数组和字符串string
- 我的Python成长之路---第三天---Python基础(9)---2016年1月16日(雾霾)
- matlab绘图基础,matlab绘图基础
- ubuntu修改文件权限
- Java语言基础--集合
- 3d slicer matlab,基于3D+slicer的医学影像分割算法及其应用研究.pdf
- 常用的音频处理库介绍
- 交叉线与直通线的区别
- 清北学堂18年国庆刷题班游记
- 台式计算机usb接口无反应6,Win7电脑USB接口没反应不能用的解决方法
- 服务器柜机位置摆放电子图,柜式空调摆放位置有什么要注意的吗
- 10系统更新后计算机不见,你好!我的电脑一不小心升级到win10以后桌面上的资料都不见了?? 爱问知识人...
热门文章
- android 360度全景,android 360度全景展示
- U8glib如何显示中文
- 固执的喷子,你悟到了成长的真谛吗?
- 【verbs】IBV_WR API(3) Libibverbs Programmer’s Manual
- 鸿蒙Ability继承FractionAbility可以直接获取Fraction内的控件
- python智力问答测试_智力问答:经典的智力测试题
- c语言编写方波信号的思路,频率可调的方波信号发生器设计及电路
- 了解计算机软件系统教学设计,认识计算机教学设计及反思
- CSUOJ 1256 天朝的单行道(最短路)
- 批量手机号码状态检测【已失效】