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

前言

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.初始化代碼

// 激勵廣告位
#if UNITY_IPHONEprivate string _rewardAdUnitId = "";  // iosprivate string _interstitialAdUnitId = "";  // ios
#elseprivate string _rewardAdUnitId = ""; //androidprivate string _interstitialAdUnitId = "";//android
#endifprivate string[] _adUnitId;private string _sdkKey = "";
public void InitSDK()
{_adUnitId = new[] { _rewardAdUnitId, _interstitialAdUnitId };MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) =>{// SDK 初始化成功后的邏輯isInit = true;RegisterEventHandlers();MaxSdk.SetVerboseLogging(true);};MaxSdk.SetSdkKey(_sdkKey);MaxSdk.InitializeSdk(_adUnitId);
}?
public void PreLoadAd()
{MaxSdk.LoadInterstitial(_interstitialAdUnitId);MaxSdk.LoadRewardedAd(_rewardAdUnitId);
}
public void DisplayAd(string adSpaceId)
{if (MaxSdk.IsRewardedAdReady(_rewardAdUnitId)){MaxSdk.ShowRewardedAd(_rewardAdUnitId);}else{PreLoadAd();}
}

這里只需要先初始化,后加載,在進行播放即可。

2.綁定事件

 private void RegisterEventHandlers(){// 注冊插屏廣告回調MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialAdLoadedEvent;MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialAdLoadFailedEvent;MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialAdRevenuePaidEvent;MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialAdClickedEvent;MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialAdDisplayedEvent;MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialAdHiddenEvent;MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;}private void OnInterstitialAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo){XDebug.LogInfo($"Interstitial ad loaded. Network: {adInfo.NetworkName}, Revenue: {adInfo.Revenue}");}// 處理插屏廣告加載失敗private void OnInterstitialAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo){Debug.LogWarning($"Interstitial ad failed to load. AdUnitId: {adUnitId}, Error Code: {errorInfo.Code}, Message: {errorInfo.Message}");}// 處理插屏廣告收入回調private void OnInterstitialAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo){Debug.Log($"MAX Interstitial Ad Revenue Paid:");}// 處理插屏廣告點擊private void OnInterstitialAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo){Debug.Log("Interstitial ad was clicked.");}// 處理插屏廣告展示private void OnInterstitialAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo){Debug.Log("Interstitial ad full screen content opened.");}// 處理插屏廣告關閉private void OnInterstitialAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo){Debug.Log("Interstitial ad full screen content closed.");}// 處理插屏廣告展示失敗private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo){Debug.LogWarning($"MAX Interstitial Ad Failed to Display: {errorInfo.Message}");}

這里的綁定事件,在初始化后的回調綁定即可。

3.這里我踩了一個坑,就是OnAdReceivedRewardEvent回調不會發生,首先這些回調必須要保證發生在主線程,我上面的寫法是有點問題的。如果過你發現你的任何一個回調沒有運行的話,你可以檢查一下是否在主線程調用該函數。

我這里的解決辦法就是利用協程,用函數包裝了一下,之后都保證代碼的運行在主線程就可以了。

這里的代碼必須在yeild之后,在yeild之后才可以保證后續代碼在主線程上面

4.哎,博主博主,我的某些聚合的廣告加載不出來,但是其他渠道的廣告可以加載出來是什么情況啊?兄弟,你真是問對人了,首先你先用Max的Mediation Debugger測試一下,他們的測試廣告是否可以加載出來,這個加載不出來也不要緊,比如說我的unity Ad是加載不出來的,但是在加載真事廣告是可以出來的,說明他沒有測試頁。測試完之后再測試真事廣告就可以了。如果測試廣告正常,而你的真實廣告沒出來,那么極有可能就是你的地區問題,再看報錯是否204或者5001如果是,那么就是地區問題,就不要追究了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux系統執行過程中的5種特殊情況

正在執行的用戶態X切換用戶態進程Y的過程為系統中常用的情況,但并非不能完全準確地反應系統的全部執行場景,還有一些場景比較特殊,主要包括以下5種情況 一.內核線程之間通過中斷處理過程中的調度時機發生進程切換,與一般的情況非常…

9. 元素拖拽

元素拖拽 API 介紹 1. 拖放過程 整個拖放過程中,存在兩個關鍵元素:拖拽元素、放置元素 拖拽元素:被拖拽的元素 drag:元素被拖拽時觸發,從開始拖拽到拖拽結束前整個過程會一直持續的觸發dragstart:元素被…

用來提升同花順軟件進程優先級的C#程序

為了提高炒股軟件同花順的運行速度,消除卡頓,編寫一個C#程序,來設置同花順進程的優先級。 using System; using System.Diagnostics; using System.Security.Principal;namespace ProcessPrioritySetter {class Program{static void Main(st…

linux初階---一些指令

一.快速認識6-8個簡單指令 1.pwd pwd指令是用來查看用戶當前所處在的目錄(目錄的概念在理解上可以等效為文件夾)。 (1)在windows系統中我們通過文件路徑表示唯一的文件,在linux中也是一樣的,所以pwd是一個很…

全國產傳感器外殼的綜合分析:材料選擇、考量因素與尺寸精度影響

全國產傳感器作為現代工業、科研、生活等領域的 “感知觸角”,其外殼的性能與質量直接關乎設備的穩定性、可靠性與使用壽命。從材料選型、關鍵考量因素到尺寸精度的影響,每個環節都需精細把控。 一、全國產傳感器外殼材料的多元選擇 全國產傳感器外殼材…

本地緩存Caffeine詳解(含與Spring Cache集成)

目錄 一、介紹 二、Caffeine核心原理與架構設計 2.1 存儲引擎與數據結構 2.2 緩存淘汰策略 2.3 并發控制機制 三、入門案例 3.1 引入依賴 3.2 測試接口 3.3 小結 四、Caffeine常用方法詳解 4.1 getIfPresent 4.2 get 4.3 put 4.4 putAll 4.5 invalidate 4.6 inv…

論特定領域軟件架構

20250413-作 題目 特定領域軟件架構DSSA(Domain Specific Software Architecture)就是在一個特定應用領域中為一組應用提供組織結構參考的標準軟件體系結構。對DSSA 研究的角度、關心的問題不同導致了對DSSA 的不同定義。DSSA 的必備特征如下。 一…

iOS 遠程調試與離線排查實戰:構建非現場問題復現機制

iOS開發者都知道,調試最怕兩個字:“偶發”。用戶說App閃退了,你點了十遍也沒問題;測試說功能卡頓了,你抓日志時它又順滑如新。最麻煩的是,這種“現場問題”往往在你連接不到用戶設備時發生。 面對這種情況…

SpringBoot -- 整合 Swagger3

8.SpringBoot3 整合 Swagger3 由于目前主流的開發模式是前后端分離開發。所以前后端的交互需要通過一個 API&#xff08;開發接口&#xff09; 來規范。而這個接口的開發是由后端程序員編寫的。“網站式 API 文檔” 1.導入依賴 <!-- 引入swagger3(springdoc)的依賴--> …

A Machine Learning Approach for Non-blind Image Deconvolution論文閱讀

A Machine Learning Approach for Non-blind Image Deconvolution 1. 研究目標與實際意義2. 創新方法與模型設計2.1 核心思路2.2 正則化反演:理論與公式2.2.1 退化模型2.2.2 正則化目標函數2.2.3 傅里葉域閉式解2.3 MLP去偽影:架構與訓練2.3.1 MLP架構設計2.3.2 訓練流程2.3.…

微信小程序<rich-text>支持里面圖片點擊放大

使用<rich-text>渲染類似下面的html代碼&#xff1a; <div stylecolor: red>寵物友好<br/>xxx提供寵物友好服務&#xff0c;具體請見下圖<br/></div> <img srchttps://xxx.com/xxx1.png width100%/> <img srchttps://xxx.com/xxx2.png…

BVH 文件是一種用于記錄 3D 動畫數據的文件格式,常用于 3D 建模和動畫制作。以下是對這個 BVH 文件的逐行解讀

BVH 文件是一種用于記錄 3D 動畫數據的文件格式&#xff0c;常用于 3D 建模和動畫制作。以下是對這個 BVH 文件的逐行解讀&#xff1a; HIERARCHY ROOT Hips { OFFSET 0 0 0 CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation JOINT LeftUpLeg { OFFSE…

C語言開發:Onvif(一)

根據ONVIF官網 的介紹&#xff1a; ONVIF是一個開放的安防行業組織&#xff0c;致力于為安防行業提供和促進標準化開放接口&#xff0c;以實現IP網絡安防產品和服務的有效互操作性。 在具體實現上&#xff0c;ONVIF使用了Web Service的方式&#xff0c;設備通過WSDL定義的接口…

中科米堆三維掃描儀耳機3D掃描尺寸測量數字化建模

當下&#xff0c;耳機已從單純的音頻輸出設備進化為集娛樂、健康、辦公于一體的智能穿戴終端。相關數據顯示&#xff0c;2025年全球智能個人音頻設備出貨量突破4.55億臺&#xff0c;中國以22%的增速領跑全球&#xff0c;其中開放式耳機&#xff08;OWS&#xff09;出貨量占比達…

學習接口自動化框架pytest有哪些好處?

學習 pytest 作為接口自動化測試框架&#xff0c;具有以下顯著優勢&#xff0c;能大幅提升測試效率和質量&#xff1a; Pytest自動化測試教程&#xff0c;自動化必備之Pytest測試框架訓練營&#xff0c;只需一小時速成&#xff0c;學會直接上手實操&#xff01; 1. 代碼簡潔&…

LinuxBridge的作用與發展歷程:從基礎橋接到云原生網絡基石

LinuxBridge作為Linux網絡虛擬化的核心組件&#xff0c;已悄然支撐互聯網基礎設施20余年。它不僅是虛擬機網絡連接的橋梁&#xff0c;更是容器網絡、云原生架構的隱形支柱。 一、LinuxBridge的核心作用剖析 1. 二層網絡虛擬化的實現者 本質功能&#xff1a;模擬物理交換機行為…

探討 SYSCFG 時鐘對 ADC 采樣的影響

探討 SYSCFG 時鐘對 ADC 采樣的影響 在嵌入式系統開發中&#xff0c;對于 GD32F4 系列微控制器&#xff0c;理解 SYSCFG 時鐘與 ADC 采樣之間的關系至關重要。 以下是詳細分析&#xff1a; 一、SYSCFG 時鐘對 ADC 采樣過程的基礎性作用 1. 提供采樣時鐘信號 ADC 采樣需要時鐘…

Spring Boot 項目實訓 - 圖書信息網站

文章目錄 1. 實訓目的2. 系統設計3. 運行演示4. 實現步驟4.1 創建數據庫與表4.2 創建Spring Boot項目4.3 創建實體類4.4 創建映射器接口4.5 編寫應用配置文件4.6 測試映射器接口4.7 創建服務類4.8 創建控制器4.9 準備靜態資源4.10 創建模板頁面4.11 測試整個項目 5. 實訓總結 1…

GPU 性能可變性分析框架

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 抽象。 分析來自 GPU 分析器的大規模性能日志通常需要數 TB 的內存和數小時的運行時間&#xff0c;即使是基本摘要也是如此。這些限制會阻止及時洞察&#xff0c;并阻礙將性能分析集成到自動化工作流程中…

Redis主從復制原理

一、Redis主從復制概述 Redis主從復制&#xff08;Master-Slave Replication&#xff09;是Redis實現高可用性和讀寫分離的基礎架構。通過主從復制&#xff0c;數據可以從一個Redis服務器&#xff08;主節點&#xff09;復制到一個或多個Redis服務器&#xff08;從節點&#x…