首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ApplovinMax接入Unity(包括我自己踩的一些坑)

  • 25-04-24 15:41
  • 4309
  • 11519
blog.csdn.net

前言

ApplovinMax是一个广告聚合平台,他会自带自己的Applovin平台广告,在这个插件上面你可以下载其他的聚合渠道,与谷歌的Admob比较相似。都是广告聚合平台。

一. ApplovinMax SDK插件的导入

1.下载插件集成 | SDK 集成指南 | MAX | Support Center | AppLovin

这里尽可能选择插件的形式下载,不要让UnityPackageManager来进行插件的管理,因为如果有多个Sdk的话ExternalDependencyManager的使用版本不一致,UnityPackageManager会报错。

2.设置插件

在这里下载安装你所需要的渠道插件

这里完成你的个性化设置,在SdkSettings里面填入你的Key,如果你需要显示隐私协议,你可以把PrivacySettings里面的Enable勾选,并且填入你的个人与团队隐私设置。

二. ApplovinMax 的打包设置(如果你的ios打包没有出现错误请跳过这一步)

这里踩了个大坑,ios的包打不出来,报错。而且解决报错之后ios的包会闪退。

1.首先,我这里打包使用的是CocoaPods,也就是说打包环境的话,我需要去配置Podfile,在那个里面设置静态链接库与动态链接库。

2.由谷歌提供的ExternalDepenenvyManager他的ios包管理只会将全部的库设置为静态库或者动态库,这种没有个性化的设置,是不能满足于多插件的,我没有找到,如果有的化希望评论区大佬能指点一下,谢谢。

3.为什么会有静态库与动态库之分?

CocoaPods 会将依赖项作为静态库(*.a)集成到项目中。当你使用 use_frameworks! 时,CocoaPods 会将依赖项编译成动态框架(*.framework),并以动态链接的方式集成到你的项目中。
这个指令对于使用 Swift 语言或依赖于 Swift 的库时是必要的,因为 Swift 要求依赖必须是动态框架。
在一些特定的情况下,某些 CocoaPods 的库可能仅支持静态库,因此如果你在项目中使用了这些库,可能不需要 use_frameworks!。
为何需要 use_frameworks!?
Swift 和 Objective-C 混合项目:如果你的项目包含 Swift 代码或库,那么使用 use_frameworks! 是必要的,因为 Swift 代码只能与其他 Swift 代码通过动态框架互操作。
避免静态库链接冲突:在一些情况下,使用静态库可能会导致符号冲突或其他链接问题,使用动态框架可以避免这些问题。

4.这样就大致理解了CocoaPods的打包原理,根据Podfile来配置ios的打包环境,进行打包。

5.这样的话,如果插件多,那么在ExternalDepenenvyManager必定会出现打包的冲突,在我接收的这个项目中最初的配置是这样的

如果我添加了谷歌AdMob的聚合,那么打包就会出现关于谷歌AdMob聚合找不到库的错误。解决的方法就是勾选Link frameworks statically, 但是我其他的插件不允许这样操作。那么就需要从Podfile入手

7.最简单的方法就是在Xcod那边的Podfile修改

这样就可以了。

8.如果你还安装了FaceBook的插件,恭喜你,这个坑和这个是一样的。他能打出包,但是在游戏运行的时候会闪退。报错为

这个玩意其实FaceBook那边的bug,但是一直没有修复。大致意思就是他的初始化必须是在动态库才可以。

9.这时候你查Max官网的解决方案就是

这个其实就把他设置为了动态库,而不是静态库,那么还会出现之前插件设置的冲突问题,所以他俩的解决方案是一样的。

10.我的Podfile最后的设置就为(这里你为了不必每次打包都修改Podfile,最好是写一个自动化脚本,这里我就不赘述怎么去写了)

三. ApplovinMax 的代码

1.初始化代码

  1. // 激励广告位
  2. #if UNITY_IPHONE
  3. private string _rewardAdUnitId = ""; // ios
  4. private string _interstitialAdUnitId = ""; // ios
  5. #else
  6. private string _rewardAdUnitId = ""; //android
  7. private string _interstitialAdUnitId = "";//android
  8. #endif
  9. private string[] _adUnitId;
  10. private string _sdkKey = "";
  11. public void InitSDK()
  12. {
  13. _adUnitId = new[] { _rewardAdUnitId, _interstitialAdUnitId };
  14. MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) =>
  15. {
  16. // SDK 初始化成功后的逻辑
  17. isInit = true;
  18. RegisterEventHandlers();
  19. MaxSdk.SetVerboseLogging(true);
  20. };
  21. MaxSdk.SetSdkKey(_sdkKey);
  22. MaxSdk.InitializeSdk(_adUnitId);
  23. } 
  24. public void PreLoadAd()
  25. {
  26. MaxSdk.LoadInterstitial(_interstitialAdUnitId);
  27. MaxSdk.LoadRewardedAd(_rewardAdUnitId);
  28. }
  29. public void DisplayAd(string adSpaceId)
  30. {
  31. if (MaxSdk.IsRewardedAdReady(_rewardAdUnitId))
  32. {
  33. MaxSdk.ShowRewardedAd(_rewardAdUnitId);
  34. }
  35. else
  36. {
  37. PreLoadAd();
  38. }
  39. }

这里只需要先初始化,后加载,在进行播放即可。

2.绑定事件

  1. private void RegisterEventHandlers()
  2. {
  3. // 注册插屏广告回调
  4. MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialAdLoadedEvent;
  5. MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialAdLoadFailedEvent;
  6. MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialAdRevenuePaidEvent;
  7. MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialAdClickedEvent;
  8. MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialAdDisplayedEvent;
  9. MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialAdHiddenEvent;
  10. MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;
  11. }
  12. private void OnInterstitialAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  13. {
  14. XDebug.LogInfo($"Interstitial ad loaded. Network: {adInfo.NetworkName}, Revenue: {adInfo.Revenue}");
  15. }
  16. // 处理插屏广告加载失败
  17. private void OnInterstitialAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
  18. {
  19. Debug.LogWarning($"Interstitial ad failed to load. AdUnitId: {adUnitId}, Error Code: {errorInfo.Code}, Message: {errorInfo.Message}");
  20. }
  21. // 处理插屏广告收入回调
  22. private void OnInterstitialAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  23. {
  24. Debug.Log($"MAX Interstitial Ad Revenue Paid:");
  25. }
  26. // 处理插屏广告点击
  27. private void OnInterstitialAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  28. {
  29. Debug.Log("Interstitial ad was clicked.");
  30. }
  31. // 处理插屏广告展示
  32. private void OnInterstitialAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  33. {
  34. Debug.Log("Interstitial ad full screen content opened.");
  35. }
  36. // 处理插屏广告关闭
  37. private void OnInterstitialAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  38. {
  39. Debug.Log("Interstitial ad full screen content closed.");
  40. }
  41. // 处理插屏广告展示失败
  42. private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
  43. {
  44. Debug.LogWarning($"MAX Interstitial Ad Failed to Display: {errorInfo.Message}");
  45. }

这里的绑定事件,在初始化后的回调绑定即可。

3.这里我踩了一个坑,就是OnAdReceivedRewardEvent回调不会发生,首先这些回调必须要保证发生在主线程,我上面的写法是有点问题的。如果过你发现你的任何一个回调没有运行的话,你可以检查一下是否在主线程调用该函数。

我这里的解决办法就是利用协程,用函数包装了一下,之后都保证代码的运行在主线程就可以了。

这里的代码必须在yeild之后,在yeild之后才可以保证后续代码在主线程上面

4.哎,博主博主,我的某些聚合的广告加载不出来,但是其他渠道的广告可以加载出来是什么情况啊?兄弟,你真是问对人了,首先你先用Max的Mediation Debugger测试一下,他们的测试广告是否可以加载出来,这个加载不出来也不要紧,比如说我的unity Ad是加载不出来的,但是在加载真事广告是可以出来的,说明他没有测试页。测试完之后再测试真事广告就可以了。如果测试广告正常,而你的真实广告没出来,那么极有可能就是你的地区问题,再看报错是否204或者5001如果是,那么就是地区问题,就不要追究了。

注:本文转载自blog.csdn.net的最右上下川的文章"https://blog.csdn.net/m0_56305960/article/details/145685467"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

134
游戏
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top