Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了
自己做的小游戏需要接广告,之前尝试过UnityAds和AdMob,但是都有点小问题。UnityAds对国内本土支持不好,Banner广告经常没有内容。Admob基本上都要对接到googlePlay,国内没办法。然后找了国内的广告SDK。
研究了好久,网上的教程都比较老,而且我在AndroidStudio方面完全是小白(本篇教程写于2020年9月,使用的SDK版本为V3.0)。
准备工作
- 创建账号https://www.pangle.cn/
- 添加应用
- 添加代码位(广告位)
- 下载SDK(接入中心-穿山甲SDK Unity插件)
为什么选Unity插件不用原生?很简单,我不会安卓和IOS开发
Unity部分工作
- 打开Unity(我用的是2019.4.10,不同版本的导出的AndroidStudio工程不太一样,后面会说)
- 导入插件
两个都导进来
- 双击打开Example/Example场景,发布工程,不能直接打包成APK,会报错,要导出为AndroidStudio工程。
- 2019版本导出方法:
勾选Export Project,然后点Export就好了
- 2018导出方法:BuildSystem选为Gradle,勾选Export Project,然后点Export就好了
ProjectSetting相应的打包设置不会的请百度
AndroidStudio部分工作
- 用AndroidStudio打开导出的项目
弹出这个选择OK就行,然后等syncing(可能会比较慢)
- 切换为Project模式,现在就是项目的目录了
- 点开unityLibrary-src-main-java,右键java-New-Package,name输入com.bytedance.android
完成之后的结构
- 打开导入到unity中的案例文件夹
把红框里的这些脚本复制到刚才新建的Package下面
完成之后的结构
- 然后就可以直接打包测试案例场景了。在AndroidStudio顶部工具栏Build-Build Bundle(s)/APK(s)-Build APK(s),等待显示打包成功。(打出来的apk在当前AndroidStudio项目目录的launcher-build-outputs-apk-debug里,直接放到手机上安装测试)
如果是Unity2018或以下版本导出的项目
- 新建的Package位置在这里:
其余的步骤相同
设置成自己的项目
打开UnionApplication.java,把appId和appName改为自己在网站上创建的项目
在Load广告的cs代码,把CodeId改为自己添加的代码位ID
调用广告
- 先Load,再Show,具体的调用方法在Example.cs脚本中都有,直接copy就行
- 具体的Api说明看文档
IOS
- 修改Example中的UnionAppController.mm的配置
- 直接编译xcode,运行下看看有没有问题,如果有问题,把UnionAppController.mm放到unity的Plugins/IOS目录下重新编译
修改Banner广告位置
Android
- 在unity中找到java脚本:NativeAdManager.java
- 找到脚本中showExpressBannerAd()方法,修改渲染成功的方法onRenderSuccess(),
layoutParams.gravity = Gravity.CENTER | Gravity.BOTTOM; //Banner位于应用底部中间
layoutParams.gravity = Gravity.CENTER | Gravity.TOP;//Banner位于应用顶部中间
记住,在Unity中修改,然后导出包,不要先导出包再在AndroidStudio中修改(原因我也不知道,反正这都是我试了之后的)
IOS
- 在你自己写的展示Banner广告代码中设置广告的位置:
public void ShowExpressBannerAd()
{
#if UNITY_IOSif (iExpressBannerAd == null){Debug.LogError("请先加载广告");return;}//坐标的基点是Banner广告的左上角顶点,所以(0,0)就是位于屏幕最顶端//如果load的时候设置的广告尺寸宽度与屏幕宽度不相等的话,就需要自己计算x坐标int x = 0;int y = Screen.height - (Screen.width / 640 * 100);// 如果Banner位于应用顶部,可以加一些宏,如果是有刘海的iphone,让 y=100,避免被刘海遮挡,我的banner是在屏幕底部,所以就不用了//if (y == 0)//{// y = 100; // 防止Demo里刘海遮挡//}iExpressBannerAd.ShowExpressAd(x, y);
#else//安卓的显示代码
#endif
}
各种坑的解决方式
- 不要用NativeBannerAd,NativeIntersititialAd等等原生广告,官方已经不支持了,都用模板广告,也就是Example脚本中带Express的方法(ExpressBannerAd)
- 我以为java脚本放在unity工程中不会影响androidstudio项目,没想到打包出来对应的AndroidStudio脚本也会变,所以Example文件夹中的java脚本可以直接改成自己的appid,以防打包出来又变成测试的appid。(这个问题是unity2019版本,因为这个版本中,unity会自动把项目中的java脚本和xcode工程脚本编译,所以可以直接在unity中修改之后再编译)
- 接了SDK之后,打包出来的apk启动的瞬间会先显示一下android标题栏,这个需要修改下AndroidManifest文件,在application中添加android:theme="@style/UnityThemeSelector"
- 一些没必要的权限能不加就不加
下面是我的AndroidManifest.xml完整版
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.company.product"><!--必须要有的权限--><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.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><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" />--><supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"android:anyDensity="true"/><applicationandroid:name="com.bytedance.android.UnionApplication"android:icon="@drawable/app_icon"android:label="@string/app_name"android:theme="@style/UnityThemeSelector"android:allowBackup="true"android:debuggable="true"android:supportsRtl="true"><uses-library android:name="org.apache.http.legacy" android:required="false"/><activity android:name="com.unity3d.player.UnityPlayerActivity"android:label="@string/app_name"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="android.app.lib_name" android:value="unity"/><meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false"/></activity><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><providerandroid:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"android:authorities="${applicationId}.TTMultiProvider"android:exported="false" /></application>
</manifest>
苹果打包编译真机调试报错
可以看到是LoadExpressRewardAd()方法中出现的,只需要把AdSlot中所有需要的参数都填上内容即可安卓设备,激励视频广告在播放的中途切换后台再切回来,广告直接消失了。
解决方法:在导出的AndroidStudio项目中修改AndroidManifest.xml,找到activity的launchMode,默认是"singleTask",改成"singleTop"就可以了,只能在AndroidStudio中设置,Unity中改了也不生效,unity强制设置成了singleTask
使用unity插件升级最近的android和ios SDK时,直接在官方下载最新的对应SDK,安卓把Plugins/Android/open_ad_sdk.aar替换成安卓SDK里的open_ad_sdk.aar,IOS把Plugins/IOS目录下的BUAdSDK.bundle,BUAdSDK.framework,BUFoundation.framework替换成IOS SDK里Frameworks里的。
升级之后直接打包的话,原先的FullScreenVideoAD和RewardVideoAD会加载不了,需要在加载这两种广告的方法中,adSlot添加上.SetExpressViewAcceptedSize(400, 80)参数,只要参数不为0即可。
- ios设备banner广告位置不适配。我自己在iphoneSE和iphoneX上都是正常的,在屏幕最底部,但是放到iphone8plus上,位置就跑了。这个提交了穿山甲的工单咨询了下,说是因为unity自身的bug,导致获取的屏幕尺寸不对,需要在xcode工程中修改脚本,解决方法:
在xcode工程中,找到ExpressBannerAd.mm,找到方法UnionPlatform_ExpressBannersAd_Load,然后再设置banner的尺寸,然后在UnionPlatform_ExpressBannersAd_Show方法中,重新设置banner的位置。
看我加注释的几行就行。
void UnionPlatform_ExpressBannersAd_Load(const char* slotID,float width,float height,BOOL isSupportDeepLink,ExpressAd_OnLoad onLoad,ExpressAd_OnLoadError onLoadError,int context) {ExpressBannerAd *instance = [[ExpressBannerAd alloc] init];CGFloat newWidth = width/[UIScreen mainScreen].scale;CGFloat newHeight = height/[UIScreen mainScreen].scale;//重新为newWidth赋值为当前屏幕宽度,赋值后banner广告的宽度固定为当前屏幕宽度newWidth = [UIScreen mainScreen].bounds.size.width;newHeight = newWidth / 640 * 100;if (0) {instance.bannerView = [[BUNativeExpressBannerView alloc] initWithSlotID:[[NSString alloc] initWithUTF8String:slotID] rootViewController:GetAppController().rootViewController adSize:CGSizeMake(newWidth, newHeight) IsSupportDeepLink:YES interval:30];} else {instance.bannerView = [[BUNativeExpressBannerView alloc] initWithSlotID:[[NSString alloc] initWithUTF8String:slotID] rootViewController:GetAppController().rootViewController adSize:CGSizeMake(newWidth, newHeight) IsSupportDeepLink:YES];}instance.bannerView.frame = CGRectMake(0, CGRectGetHeight([UIScreen mainScreen].bounds)-newHeight, newWidth, newHeight);instance.bannerView.delegate = instance;instance.onLoad = onLoad;instance.onLoadError = onLoadError;instance.loadContext = context;[instance.bannerView loadAdData];// 强持有,是引用加+1[[BUToUnityAdManager sharedInstance] addAdManager:instance];(__bridge_retained void*)instance;}
void UnionPlatform_ExpressBannersAd_Show(void* expressAdPtr, float originX, float originY) {ExpressBannerAd *expressBannerAd = (__bridge ExpressBannerAd*)expressAdPtr;CGFloat newX = originX/[UIScreen mainScreen].scale;CGFloat newY = originY/[UIScreen mainScreen].scale;//重新计算banner广告的位置//底部:newX = 0;newY = [UIScreen mainScreen].bounds.size.height - expressBannerAd.bannerView.frame.size.height;expressBannerAd.bannerView.frame = CGRectMake(newX, newY, expressBannerAd.bannerView.frame.size.width, expressBannerAd.bannerView.frame.size.height);[GetAppController().rootViewController.view addSubview:expressBannerAd.bannerView];}
或者unity2019以上的,也可以直接在unity中找到相应的脚本,修改再编译。
Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了相关推荐
- Unity接入穿山甲广告(使用Unity3D插件)
最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...
- Unity接入穿山甲广告SDK(以及GroMoreDemo)
Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...
- 无需上架,接入穿山甲广告和广点通广告 sdk
我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...
- CocosCreator接入穿山甲广告(IOS)
说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...
- android 360游戏sdk,360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明
360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明 360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明: Android SDK SDK版本 ...
- CocosCreator接入穿山甲广告1-激励视频
首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果.下载完后可以进入他工程下的libs的文件夹里把两个 ...
- CocosCreator接入穿山甲广告总结
最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...
- Android 如何接入穿山甲广告?
目录 下载SDK 集成SDK AndroidManifest配置 provider配置 运行环境配置 白名单配置 工具类 下载SDK 首先去穿山甲官网注册账号以及创建应用 点击进入平台 (我的是创建完 ...
- CocosCreator接入穿山甲广告2-插屏广告
看过上一篇文章的小伙伴,我这里就不在进行对初始化等进行墨迹,直接上插屏广告的逻辑,一般在游戏比如关卡结束的时候会弹出插屏广告. 穿山甲sdk初始化后,在oncreate方法里直接调用chuanShan ...
最新文章
- 运行PHP出现No input file specified错误解决办法
- Jquery zTree实例
- 用Everything搜索指定的路径
- 迷途指针,从百度百科上摘抄的,语言很幽默
- Kattis之旅——Prime Reduction
- LVM( Logical Volume Manager )配置案例(on RHEL4)
- 1.9 编程基础之顺序查找 05 最大值和最小值的差 python
- 终于有人说清楚了!内卷和努力到底有啥区别?
- mongodb系列~mongodb的副本集搭建和原理
- mysql 5.1 开启慢查询_mysql开启慢查询
- Educational Codeforces Round 7
- MSDN下载出现链接格式有误,如何解决
- 搞清楚模数、数模转换中的AGND和DGND
- ubuntu全版本安装 NVIDIA显卡驱动、以及重装、卸载
- 计算机网络中属于通信子网,计算机网络通常被划分为通信子网和资源子网,通信子网提供信息传输服务,资源子网提供共享资源。...
- 如何在上海租房,数据有话说
- GNU autotools 下载和安装
- centos linux引导修复_Linux 引导修复
- hexo添加点击爆炸效果 duang duang duang
- git操作与vscode,码市的结合