自己做的小游戏需要接广告,之前尝试过UnityAds和AdMob,但是都有点小问题。UnityAds对国内本土支持不好,Banner广告经常没有内容。Admob基本上都要对接到googlePlay,国内没办法。然后找了国内的广告SDK。

研究了好久,网上的教程都比较老,而且我在AndroidStudio方面完全是小白(本篇教程写于2020年9月,使用的SDK版本为V3.0)。

准备工作

  1. 创建账号https://www.pangle.cn/
  2. 添加应用
  3. 添加代码位(广告位)
  4. 下载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
}

各种坑的解决方式

  1. 不要用NativeBannerAd,NativeIntersititialAd等等原生广告,官方已经不支持了,都用模板广告,也就是Example脚本中带Express的方法(ExpressBannerAd)
  2. 我以为java脚本放在unity工程中不会影响androidstudio项目,没想到打包出来对应的AndroidStudio脚本也会变,所以Example文件夹中的java脚本可以直接改成自己的appid,以防打包出来又变成测试的appid。(这个问题是unity2019版本,因为这个版本中,unity会自动把项目中的java脚本和xcode工程脚本编译,所以可以直接在unity中修改之后再编译)
  3. 接了SDK之后,打包出来的apk启动的瞬间会先显示一下android标题栏,这个需要修改下AndroidManifest文件,在application中添加android:theme="@style/UnityThemeSelector"
  4. 一些没必要的权限能不加就不加
    下面是我的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>
  1. 苹果打包编译真机调试报错

    可以看到是LoadExpressRewardAd()方法中出现的,只需要把AdSlot中所有需要的参数都填上内容即可

  2. 安卓设备,激励视频广告在播放的中途切换后台再切回来,广告直接消失了。
    解决方法:在导出的AndroidStudio项目中修改AndroidManifest.xml,找到activity的launchMode,默认是"singleTask",改成"singleTop"就可以了,只能在AndroidStudio中设置,Unity中改了也不生效,unity强制设置成了singleTask

  3. 使用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即可。

  1. 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接入)看这一篇就够了相关推荐

  1. Unity接入穿山甲广告(使用Unity3D插件)

      最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...

  2. Unity接入穿山甲广告SDK(以及GroMoreDemo)

    Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...

  3. 无需上架,接入穿山甲广告和广点通广告 sdk

    我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...

  4. CocosCreator接入穿山甲广告(IOS)

    说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...

  5. android 360游戏sdk,360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明

    360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明 360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明: Android SDK SDK版本 ...

  6. CocosCreator接入穿山甲广告1-激励视频

    首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果.下载完后可以进入他工程下的libs的文件夹里把两个 ...

  7. CocosCreator接入穿山甲广告总结

    最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...

  8. Android 如何接入穿山甲广告?

    目录 下载SDK 集成SDK AndroidManifest配置 provider配置 运行环境配置 白名单配置 工具类 下载SDK 首先去穿山甲官网注册账号以及创建应用 点击进入平台 (我的是创建完 ...

  9. CocosCreator接入穿山甲广告2-插屏广告

    看过上一篇文章的小伙伴,我这里就不在进行对初始化等进行墨迹,直接上插屏广告的逻辑,一般在游戏比如关卡结束的时候会弹出插屏广告. 穿山甲sdk初始化后,在oncreate方法里直接调用chuanShan ...

最新文章

  1. 运行PHP出现No input file specified错误解决办法
  2. Jquery zTree实例
  3. 用Everything搜索指定的路径
  4. 迷途指针,从百度百科上摘抄的,语言很幽默
  5. Kattis之旅——Prime Reduction
  6. LVM( Logical Volume Manager )配置案例(on RHEL4)
  7. 1.9 编程基础之顺序查找 05 最大值和最小值的差 python
  8. 终于有人说清楚了!内卷和努力到底有啥区别?
  9. mongodb系列~mongodb的副本集搭建和原理
  10. mysql 5.1 开启慢查询_mysql开启慢查询
  11. Educational Codeforces Round 7
  12. MSDN下载出现链接格式有误,如何解决
  13. 搞清楚模数、数模转换中的AGND和DGND
  14. ubuntu全版本安装 NVIDIA显卡驱动、以及重装、卸载
  15. 计算机网络中属于通信子网,计算机网络通常被划分为通信子网和资源子网,通信子网提供信息传输服务,资源子网提供共享资源。...
  16. 如何在上海租房,数据有话说
  17. GNU autotools 下载和安装
  18. centos linux引导修复_Linux 引导修复
  19. hexo添加点击爆炸效果 duang duang duang
  20. git操作与vscode,码市的结合

热门文章

  1. 【ML特征工程】第 7 章 :通过K-Means 模型堆叠进行非线性特征化
  2. hive卡在 kill command不动假死的原因及解决方案
  3. 【文心一言】广告文案、演讲稿与请假条自动生成
  4. FAST-LIO2代码解析(一)
  5. 2022年山东省安全员A证特种作业证考试题库模拟考试平台操作
  6. win10系统DPC_WATCHDOG_VIOLATION蓝屏靠谱解决办法
  7. python-模块使用方法
  8. message的警告弹窗放在最上层
  9. 论一个优秀的小牛论坛管理员(转:五只鹳狸猿进笼观猴,各留一只爪)
  10. PID串口助手的第一部分:串口通信