unity導入Mopub Sdk 並導出安卓和iOS包

最近因公司需要在導入Sdk,項目需要導入Mopub 的sdk,下面記錄下導入unity的步驟和導出安卓包和iOS包時遇到的坑和解決方式

1.mopub 導入unity

       1.導入mopub 的unity的sdk,是一個unitypackge的包,直接點擊導入即可,注意區別在sdk的版本問題(在寫本文的時候用的sdk版本是5.6的,別用最新版本,因爲在導入最新的Sdk的時候直接報錯,導出安卓包時unity直接崩潰閃退了),sdk的github鏈接如下:https://github.com/mopub/mopub-unity-sdk/releases/注意下5.6的

 2.下好後直接導入unity,導入成功後在unity上面出現

下面介紹下這個這些按鈕,重要的時這個Manager SDKs..(從裏面可以下載一些mopub支持的第三方廣告插件),有需要就可以下載裏面的第三方sdk,沒有需要就算了。

3.其實到這一步,unity導入Mopub Sdk的初步工作就完成了,下面的步驟是在代碼調用sdk,直接上代碼

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MopubAdsController : MonoBehaviour {
    #region Inspector Variables

    //ios端旗幟式廣告
    public string iOSBannerID;
    //ios插頁式廣告
    public string iOSInterstitialID;
    //ios獎勵視頻廣告
    public string iOSVideoID;

    //安卓旗幟式廣告
    public string AndroidBannerID;
    //安卓插頁式廣告
    public string AndroidInterstitialID;
    //安卓獎勵視頻廣告
    public string AndroidVideoID;

    #endregion
    //請求廣告的函數的參數是string數組,用來裝上面的廣告ID
    private string[] _bannerAdUnits;
    private string[] _interstitialAdUnits;
    private string[] _rewardedVideoAdUnits;

    private void Start () {
#if UNITY_IOS
        _bannerAdUnits = new string[] { iOSBannerID };
        _interstitialAdUnits = new string[] { iOSInterstitialID };
        _rewardedVideoAdUnits = new string[] { iOSVideoID };

#elif UNITY_ANDROID || UNITY_EDITOR
        _bannerAdUnits = new string[] { AndroidBannerID };
        _interstitialAdUnits = new string[] { AndroidInterstitialID };
        _rewardedVideoAdUnits = new string[] { AndroidVideoID };

#endif

        var anyAdUnitId = _bannerAdUnits[0];
        MoPub.InitializeSdk (new MoPub.SdkConfiguration {
            //設置一個任意有效的廣告Id
            AdUnitId = anyAdUnitId,
                LogLevel = MoPub.LogLevel.MPLogLevelDebug,
                //適配admob
                MediatedNetworks = new MoPub.MediatedNetwork[] {
                    new MoPub.SupportedNetwork.AdMob {
                        MediationSettings = new Dictionary<string, object> { { "npa", 1 }
                        },
                    }
                },
        });

        //加載條幅廣告插件
        MoPub.LoadBannerPluginsForAdUnits (_bannerAdUnits);

        //加載間接廣告插件
        MoPub.LoadInterstitialPluginsForAdUnits (_interstitialAdUnits);

        //加載獎勵視頻的插件
        MoPub.LoadRewardedVideoPluginsForAdUnits (_rewardedVideoAdUnits);

        //初始化各種廣告,現在還沒有使用好幾個id的需求,所以每個廣告類型先都用一個id,所以都取[0]。按着官方用例,如果有多種id的話可以寫一個for循環直接遍歷創造就好

        // 綁定各種回調
        MoPubManager.OnSdkInitializedEvent += OnSdkInitializedEvent;
        //條幅廣告回調
        MoPubManager.OnAdLoadedEvent += OnAdLoadedEvent;
        MoPubManager.OnAdFailedEvent += OnAdFailedEvent;
        //插屏廣告回調
        MoPubManager.OnInterstitialLoadedEvent += OnInterstitialLoadedEvent;
        MoPubManager.OnInterstitialFailedEvent += OnInterstitialFailedEvent;
        MoPubManager.OnInterstitialDismissedEvent += OnInterstitialDismissedEvent;

        MoPubManager.OnRewardedVideoLoadedEvent += OnRewardedVideoLoadedEvent;
        MoPubManager.OnRewardedVideoFailedEvent += OnRewardedVideoFailedEvent;
        MoPubManager.OnRewardedVideoFailedToPlayEvent += OnRewardedVideoFailedToPlayEvent;
        MoPubManager.OnRewardedVideoClosedEvent += OnRewardedVideoClosedEvent;

    }

    /// <summary>
    /// Sdk初始化的回調
    /// </summary>
    /// <param name="adUnitId"></param>
    private void OnSdkInitializedEvent (string adUnitId) {
        Debug.Log ("SDK初始化成功");
#if UNITY_IOS  
        MoPub.RequestInterstitialAd (iOSInterstitialID);
        MoPub.RequestRewardedVideo (iOSVideoID);

#elif UNITY_ANDROID 
        MoPub.RequestInterstitialAd (AndroidInterstitialID);
        MoPub.RequestRewardedVideo (AndroidVideoID);
#endif

    }

    /// <summary>
    /// 加載條幅廣告回調
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="height"></param>
    private void OnAdLoadedEvent (string adUnitId, float height) {
        Debug.Log ("條幅廣告加載成功 " + adUnitId);
    }

    /// <summary>
    /// 條幅廣告加載失敗的回調
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="b"></param>
    public void OnAdFailedEvent (string adUnitId, string errorMsg) {
        Debug.Log ("條幅廣告加載失敗 " + adUnitId);
    }

    /// <summary>
    /// 插屏廣告加載回調
    /// </summary>
    /// <param name="adUnitId"></param>
    private void OnInterstitialLoadedEvent (string adUnitId) {
        Debug.Log ("插屏廣告加載成功 " + adUnitId);
    }

    /// <summary>
    /// 插屏廣告加載失敗回調
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="errorCode"></param>
    private void OnInterstitialFailedEvent (string adUnitId, string errorCode) {
        Debug.Log ("插屏廣告加載失敗 " + adUnitId);
    }

    /// <summary>
    /// 解散插屏廣告的回調
    /// </summary>
    /// <param name="adUnitId"></param>
    private void OnInterstitialDismissedEvent (string adUnitId) {
        Debug.Log ("插屏廣告解散 " + adUnitId);
    }

    /// <summary>
    /// 加載獎勵視頻的回調
    /// </summary>
    /// <param name="adUnitId"></param>
    private void OnRewardedVideoLoadedEvent (string adUnitId) {
        Debug.Log ("獎勵視頻加載成功 " + adUnitId);
    }

    /// <summary>
    ///  獎勵視頻加載失敗回調
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="errorMsg"></param>
    private void OnRewardedVideoFailedEvent (string adUnitId, string errorMsg) {
        Debug.Log ("獎勵視頻加載成功 " + adUnitId);
    }

    /// <summary>
    /// 獎勵視頻播放失敗回調
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="errorMsg"></param>
    private void OnRewardedVideoFailedToPlayEvent (string adUnitId, string errorMsg) {
        Debug.Log ("獎勵視頻播放失敗 " + adUnitId);
    }

    /// <summary>
    /// 獎勵視頻關閉回調
    /// </summary>
    /// <param name="adUnitId"></param>
    private void OnRewardedVideoClosedEvent (string adUnitId) {
        Debug.Log ("獎勵視頻播放關閉 " + adUnitId);
    }

    #region  外部調用接口
    /// <summary>
    /// 創建條幅廣告,此方法調用最佳時機爲要展示橫幅廣告的時候。
    /// </summary>
    /// <param name="adUnitId"></param>
    /// <param name="position">顯示的位置,默認是底部</param>
    public void CreateBanner (string adUnitId, MoPub.AdPosition position = MoPub.AdPosition.BottomCenter) {
        MoPub.CreateBanner (adUnitId, position);
    }

    //顯示條幅廣告
    public void ShowBanner (string adUnitId) {
        MoPub.ShowBanner (adUnitId, true);
    }

    //隱藏條幅廣告
    public void HideBanner (string adUnitId) {
        MoPub.ShowBanner (adUnitId, false);
    }

    /// <summary>
    /// 銷燬條幅廣告
    /// </summary>
    /// <param name="adUnitId"></param>
    public void DestroyBanner (string adUnitId) {
        MoPub.DestroyBanner (adUnitId);
    }

    /// <summary>
    /// 顯示插屏廣告
    /// </summary>
    /// <param name="adUnitId"></param>
    public void ShowInterstitialAd (string adUnitId) {
        MoPub.ShowInterstitialAd (adUnitId);
    }

    /// <summary>
    ///銷燬已經加載的插屏廣告
    /// </summary>
    /// <param name="adUnitId"></param>
    public void DestroyInterstitialAd (string adUnitId) {
        MoPub.DestroyInterstitialAd (adUnitId);
    }

    /// <summary>
    /// 顯示獎勵視頻
    /// </summary>
    /// <param name="adUnitId"></param>
    public void ShowRewardedVideo (string adUnitId) {
        MoPub.ShowRewardedVideo (adUnitId);
    }

    #endregion

    // #region  獲取廣告來源平臺標識
    // private void OnEnable () {
    //     MoPubManager.OnImpressionTrackedEvent += OnImpressionTrackedEvent;
    // }

    // private void OnImpressionTrackedEvent (string adUnitId, MoPub.ImpressionData impressionData) {
    //     //將對象數據輸入內部工具或發送到第三方分析

    // }

    // #endregion

}

(代碼思路就是先完成sdk的初始化,然後在代碼中用代碼導入各種廣告的插件),然後給每種類型的廣告綁定好各自的回調,是一個代理,直接綁定自己的函數即可,然後提供好外部調用的接口,就可以直接傳入廣告ID,播放廣告了.(代碼條理比較清晰,可以直接用) 

特別注意:初始化我寫在Start函數中,只用初始化一次即可。

下面分別介紹各種廣告的啓動和回調

1.Banner廣告(橫幅廣告)

創建橫幅廣告

此方法調用最佳時機爲要展示橫幅廣告的時候。

//第一個參數爲banner的廣告單元ID,第二個參數爲顯示的位置
 MoPub.CreateBanner (bannerAdUnit, MoPubBase.AdPosition.BottomCenter);

展示或者隱藏橫幅廣告

MoPub.ShowBanner (bannerAdUnit, true);   // 展示banner

MoPub.ShowBanner (bannerAdUnit, false);  // 隱藏banner

銷燬橫幅廣告

MoPub.DestroyBanner (bannerAdUnit);

橫幅廣告回調監聽

OnAdLoadedEvent (string adUnitId, string height)//橫幅廣告加載成功時
OnAdFailedEvent (string adUnitId, string errorMsg)//橫幅廣告加載失敗時
OnAdClickedEvent (string adUnitId)//橫幅廣告被點擊時
OnAdExpandedEvent (string adUnitId)//橫幅廣告展開時
OnAdCollapsedEvent (string adUnitId)//橫幅廣告收縮時

2.Interstitial(插屏廣告)

請求插屏廣告

調用的最佳時機爲初始化完成的回調監聽裏。

MoPub.RequestInterstitialAd(interstitialAdUnit);

展示插屏廣告

MoPub.ShowInterstitialAd (interstitialAdUnit);

插屏廣告回調監聽

OnInterstitialLoadedEvent (string adUnitId)//橫幅廣告加載成功時
OnInterstitialFailedEvent (string adUnitId, string errorCode)//橫幅廣告加載失敗時
OnInterstitialDismissedEvent (string adUnitId)//橫幅廣告隱藏時
OnInterstitialExpiredEvent (string adUnitId)//橫幅廣告失效時
OnInterstitialShownEvent (string adUnitId)//橫幅廣告顯示時
OnInterstitialClickedEvent (string adUnitId)//橫幅廣告被點擊時

2 RewardedVideo(激勵視頻)
請求激勵視頻

此方法調用最佳時機在初始化完成回調裏。

MoPub.RequestRewardedVideo(rewardedVideoAdUnit, mediationSettings, keywords, latitude, longitude, customerId);

展示激勵視頻

MoPub.ShowRewardedVideo(rewardedVideoAdUnit);

激勵視頻回調監聽

OnRewardedVideoLoadedEvent (string adUnitId)
OnRewardedVideoFailedEvent (string adUnitId, string errorMsg)
OnRewardedVideoExpiredEvent (string adUnitId)
OnRewardedVideoShownEvent (string adUnitId)
OnRewardedVideoClickedEvent (string adUnitId)
OnRewardedVideoFailedToPlayEvent (string adUnitId, string errorMsg)
OnRewardedVideoReceivedRewardEvent (string adUnitId, string label, float amount)
OnRewardedVideoClosedEvent (string adUnitId)
OnRewardedVideoLeavingApplicationEvent (string adUnitId)

OK了,現在相信你在unity上的配置都已經配置完,並且,已經知道怎麼在unity導入該SDK,那現在我們開始導出安卓apk和iOS的Ipa,注意這個Sdk在手機上才能看到廣告,pc端就不用糾結爲什麼怎麼都看不到廣告了

 

安卓apk的導出

1.我們先看unity的asset目錄下的Plugins文件夾下的Android文件夾

把這些jar包和arr包,設置下如圖,不然在導出安卓包的時候回報錯

2.然後你就可以愉快的導出Apk去手機上看廣告了,如果暫時看不到的話是網絡的問題,畢竟在牆內(解決辦法自己想)

 

 

iOS的導出

1.把unity導出xcode的工程包,去mac上編譯,推薦版本是xcode11 ,如果是xode10 的話會報錯,官網也這麼推薦

https://developers.mopub.com/publishers/ios/get-started/

2.因爲導出的xocde工程實際上是不帶這些sdk的,你需要手動導入,可以用cocospod 下載(不過可能下幾天都下不下來)

推薦去官網下載 ,下載鏈接https://github.com/mopub/mopub-ios-sdk#manual-integration-with-source-code

3.在xcode中導入sdk

然後在xcode中手動導入以下庫,直接在xcode中搜索就行,不用去別的地方下,這些是系統自帶的

4,最後mac連上手機,直接編譯安裝就行,如果報錯就直接看輸出,應該是前面少添加了一些庫,再對照添加一遍,應該就沒問題了,

5,播放廣告,如果這時你看不見廣告播放,那麼等一下,它需要加載時間,如果還不行,那就是網絡問題,畢竟在牆內(具體辦法自己解決)。

6.運行截圖(iOS)

如果有什麼問題請留言

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章