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)

如果有什么问题请留言

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值