【UnityADS】在项目添加广告,赚取第一桶金
本文根据Unity官方文档进行撰写,详细可以浏览:[Unity 开发者集成指南](https://docs.unity.com/ads/zh-cn/manual/UnityDeveloperIntegrations)。
广告SDK加入方式
在游戏中加入广告必须导入广告SDK,目前导入广告SDK的方式有两种。一种是通过Unity Package Manager(包管理)导入广告SDK,之后便可以在脚本中直接调用。另一种是在Unity工程中调用工程外的预留方法,并将游戏导出成Andorid/IOS工程,在Android/IOS中加入广告SDK。前者某种程度需要广告商与Untiy间的合作才有相应的包在Untiy中,导致广告SDK种类少、更新慢、广告类型少等诸多缺点。后者需要涉及更多开发知识,操作起来相对比较繁琐,目前是国内公司所采用的方式。
UnityADS插件介绍
UnityADS插件本身就是Unity官方自己推出的广告SDK,但在Unity中添加广告时,只能添加激励(Rewarded)广告、横幅(Banner)广告、插屏(Interstitial)广告。截至当前,使用Android工程接入集成了UnityADS的广告SDK,则可以多一种广告类型——开屏广告。
从Unity官网申请广告ID
- 进入Monetization(变现)后台,并登录自己的Unity账号
- 点击左侧菜单栏Projects,之后点击Create project进行项目的创建。
- 创建项目后,点击左侧菜单栏Monetization-Ads,之后选择当前项目,点击Get started打开Project Setup面板,根据情况选择后点击Next按钮。
- 进入Select Mediation Partner面板根据情况选择后,点击Next按钮。
- 进入Add Store ID面板根据情况选择后,点击Add Project按钮。
- 进入Additional resources面板后,就可以查看IOS的Game ID以及Android的Game ID。
- 我们还可以左侧菜单栏点击Monetization-Ads,再次点击Ad Units按钮,查看IOS的GameID和Android的GameID(重要),以及IOS及Android的各广告类型单元ID(所有项目的都一样,不重要)。
在Unity项目添加广告
通过[Monetization(变现)后台](https://dashboard.unity3d.com/monetization)创建项目获取Game ID后,才能拥有广告ID。
1. 导入Advertisement包
在Unity中菜单栏找到Window-Package Manager,打开后搜索或者找到左边菜单栏Advertisement。(注意版本要为3.7.0及以上)。
2. 初始化SDK代码
using UnityEngine;
using UnityEngine.Advertisements;
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener
{//在 SDK 3.7.0 及更高版本中,您可以使用 IUnityAdsInitializationListener 回调在初始化完成时接收通知,或在发生错误时接收详细信息。
[SerializeField] string _androidGameId = "*******";//Android Game ID (从Monetization(变现)后台申请项目获得)
[SerializeField] string _iOSGameId = "*******";//IOS Game ID (从Monetization(变现)后台申请项目获得)
[SerializeField] bool _testMode = true;//是否为测试模式状态
private string _gameId;
void Awake()
{
InitializeAds();
}
public void InitializeAds()
{
#if UNITY_IOS
_gameId = _iOSGameId;
#elif UNITY_ANDROID
_gameId = _androidGameId;
#elif UNITY_EDITOR
_gameId = _androidGameId;//Only for testing the functionality in the Editor
#endif
//Advertisement.isInitialized : 如果 SDK 已初始化,返回 true,否则返回 false。
//Advertisement.isSupported : 如果 SDK 在当前平台上受支持,返回 true,否则返回 false。
if (!Advertisement.isInitialized && Advertisement.isSupported)
{
//使用指定的 Game ID(游戏 ID)、测试模式状态以及广告单元加载设置来初始化广告服务。
Advertisement.Initialize(_gameId, _testMode, this);
}
}
/*
* 初始化完成回调方法
*/
public void OnInitializationComplete()
{
Debug.Log("Unity Ads initialization complete.");
}
/*
* 初始化失败回调方法
*/
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
{
Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
}
}
3. 实现各广告类型代码
- 实现插屏(Interstitial)广告
using UnityEngine;
using UnityEngine.Advertisements;
public class InterstitialAdExample : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{//在 SDK 3.7.0 及更高版本中,可以使用 IUnityAdsLoadListener 和 IUnityAdsShowListener 回调分别实现内容加载或展示成功或失败的逻辑。
[SerializeField] string _androidAdUnitId = "Interstitial_Android";//Android 全屏插页式广告单元ID(所有项目的同类型广告单元一样)
[SerializeField] string _iOsAdUnitId = "Interstitial_iOS";//IOS 全屏插页式广告单元ID(所有项目的同类型广告单元一样)
string _adUnitId;
void Awake()
{
// 获取当前平台的 Ad Unit ID(广告单元 ID):
_adUnitId = (Application.platform == RuntimePlatform.IPhonePlayer) ? _iOsAdUnitId : _androidAdUnitId;
}
// 将内容加载到广告单元中:
public void LoadAd()
{
// 重要!仅在初始化之后再加载内容(在此示例中,初始化在另一个脚本中处理)。
Debug.Log("Loading Ad: " + _adUnitId);
Advertisement.Load(_adUnitId, this);
}
// 展示广告单元中加载的内容:
public void ShowAd()
{
// 请注意,如果未事先加载广告内容,此方法将失败
Debug.Log("Showing Ad: " + _adUnitId);
Advertisement.Show(_adUnitId, this);
}
// 实现 Load Listener 接口方法:
public void OnUnityAdsAdLoaded(string adUnitId)
{
//(可选)如果广告单元成功加载内容,执行代码。
}
public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message)
{
//UnityAdsLoadError.INITIALIZE_FAILED == 0 :由于 SDK 未初始化而导致广告加载失败。
//UnityAdsLoadError.INTERNAL_ERROR == 1 :由于内部 Unity 广告服务错误而导致广告加载失败。
//UnityAdsLoadError.INVALID_ARGUMENT == 2 :由于 load 方法中的参数无效而导致广告加载失败。
//UnityAdsLoadError.NO_FILL == 3 :由于广告平台上没有可用的内容而导致广告加载失败。
//UnityAdsLoadError.TIMEOUT == 4 :广告未能在指定的时间范围内加载。
Debug.Log($"Error loading Ad Unit: {_adUnitId} - {error.ToString()} - {message}");
//(可选)如果广告单元加载失败,执行代码(例如再次尝试)。
}
//实现Show Listener 接口方法:
public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message)
{
//UnityAdsShowError.NOT_INITIALIZED == 0 :由于 SDK 未初始化而导致广告展示失败。
//UnityAdsShowError.NOT_READY == 1 :由于广告单元尚未准备就绪而导致广告展示失败。
//UnityAdsShowError.VIDEO_PLAYER_ERROR == 2 :由于媒体播放器错误而导致广告展示失败。
//UnityAdsShowError.INVALID_ARGUMENT == 3 :由于 show 方法中的参数无效而导致广告展示失败。
//UnityAdsShowError.NO_CONNECTION == 4 :由于互联网连接错误而导致广告展示失败。
//UnityAdsShowError.ALREADY_SHOWING == 5 :由于广告已在展示而导致广告展示失败。
//UnityAdsShowError.INTERNAL_ERROR == 6 :由于内部 Unity 广告服务错误而导致广告展示失败。
//UnityAdsShowError.UNKNOWN == 7 :未知
Debug.Log($"Error showing Ad Unit {_adUnitId}: {error.ToString()} - {message}");
//(可选)如果广告单元展示失败,执行代码(例如加载另一个广告)。
}
/*
* 广告开始展示时回调
*/
public void OnUnityAdsShowStart(string _adUnitId) { }
/*
* 广告被点击时回调
*/
public void OnUnityAdsShowClick(string _adUnitId) { }
/*
* 广告展示完成时回调
*/
public void OnUnityAdsShowComplete(string _adUnitId, UnityAdsShowCompletionState showCompletionState) { }
}
- 实现激励(Rewarded)广告
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
public class RewardedAdsButton : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{//在 SDK 3.7.0 及更高版本中,可以使用 IUnityAdsLoadListener 和 IUnityAdsShowListener 回调分别实现内容加载或展示成功或失败的逻辑。
[SerializeField] Button _showAdButton;//用来展示激励广告的按钮
[SerializeField] string _androidAdUnitId = "Rewarded_Android";//Android 激励广告单元ID(所有项目的同类型广告单元一样)
[SerializeField] string _iOSAdUnitId = "Rewarded_iOS";//IOS 激励广告单元ID(所有项目的同类型广告单元一样)
string _adUnitId = null; // 对于不受支持的平台,此值将保持为 null
void Awake()
{
// 获取当前平台的 Ad Unit ID(广告单元 ID):
#if UNITY_IOS
_adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
_adUnitId = _androidAdUnitId;
#endif
// 在准备好展示广告之前禁用该按钮:
_showAdButton.interactable = false;
}
// 将内容加载到广告单元中:
public void LoadAd()
{
// 重要!仅在初始化之后再加载内容(在此示例中,初始化在另一个脚本中处理)。
Debug.Log("Loading Ad: " + _adUnitId);
Advertisement.Load(_adUnitId, this);
}
// 如果广告加载成功,请向按钮添加监听器并启用它:
public void OnUnityAdsAdLoaded(string adUnitId)
{
Debug.Log("Ad Loaded: " + adUnitId);
if (adUnitId.Equals(_adUnitId))
{
// 配置该按钮在单击时调用 ShowAd() 方法:
_showAdButton.onClick.AddListener(ShowAd);
// 允许用户点击按钮:
_showAdButton.interactable = true;
}
}
// 实现当用户点击按钮时执行的方法:
public void ShowAd()
{
// 禁用该按钮:
_showAdButton.interactable = false;
// 然后展示广告:
Advertisement.Show(_adUnitId, this);
}
// 实现 Show Listener 的 OnUnityAdsShowComplete 回调方法来判断用户是否获得奖励:
public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
{
//UnityAdsShowCompletionState.SKIPPED == 0 :广告跳过
//UnityAdsShowCompletionState.COMPLETED == 1 :广告观看完成
//UnityAdsShowCompletionState.UNKNOWN == 2 : 未知情况
if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
{
Debug.Log("Unity Ads Rewarded Ad Completed");
// 给予奖励。
}
}
// 实现 Load 和 Show Listener 错误回调:
public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message)
{
Debug.Log($"Error loading Ad Unit {adUnitId}: {error.ToString()} - {message}");
// 使用错误详细信息来确定是否要尝试加载另一个广告。
}
public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message)
{
Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");
// 使用错误详细信息来确定是否要尝试加载另一个广告。
}
public void OnUnityAdsShowStart(string adUnitId) { }
public void OnUnityAdsShowClick(string adUnitId) { }
void OnDestroy()
{
// 清理按钮的监听器:
_showAdButton.onClick.RemoveAllListeners();
}
}
- 实现横幅(Banner)广告
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
public class BannerAdExample : MonoBehaviour
{
// 在本示例中,这些按钮用于功能测试:
[SerializeField] Button _loadBannerButton;
[SerializeField] Button _showBannerButton;
[SerializeField] Button _hideBannerButton;
[SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;
[SerializeField] string _androidAdUnitId = "Banner_Android";
[SerializeField] string _iOSAdUnitId = "Banner_iOS";
string _adUnitId = null;// 对于不受支持的平台,此值将保持为 null。
void Start()
{
// 获取当前平台的 Ad Unit ID(广告单元 ID):
#if UNITY_IOS
_adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
_adUnitId = _androidAdUnitId;
#endif
// 在准备好展示广告之前禁用该按钮:
_showBannerButton.interactable = false;
_hideBannerButton.interactable = false;
//BannerPosition.TOP_LEFT == 0 :左上角位置
//BannerPosition.TOP_CENTER == 1 :上面居中位置
//BannerPosition.TOP_RIGHT == 2 :右上角位置
//BannerPosition.BOTTOM_LEFT == 3 :左下角位置
//BannerPosition.BOTTOM_CENTER == 4 :下面居中位置
//BannerPosition.BOTTOM_RIGHT == 5 :右下角位置
//BannerPosition.CENTER == 6 :中间位置
// 设置横幅广告位置:
Advertisement.Banner.SetPosition(_bannerPosition);
// 配置 Load Banner(加载横幅广告)按钮在单击该按钮时调用 LoadBanner() 方法:
_loadBannerButton.onClick.AddListener(LoadBanner);
_loadBannerButton.interactable = true;
}
// 实现一个在单击 Load Banner(加载横幅广告)按钮时调用的方法:
public void LoadBanner()
{
// 设置选项以将加载事件告知 SDK:
BannerLoadOptions options = new BannerLoadOptions
{
loadCallback = OnBannerLoaded,//横幅广告单元成功加载已准备好展示的内容时触发此回调。
errorCallback = OnBannerError//横幅广告单元加载内容失败时触发此回调。
};
// 向广告单元加载横幅广告内容:
Advertisement.Banner.Load(_adUnitId, options);
}
// 实现在 loadCallback 事件触发时执行的代码:
void OnBannerLoaded()
{
Debug.Log("Banner loaded");
// 配置 Show Banner(展示横幅广告)按钮在单击该按钮时调用 ShowBannerAd() 方法:
_showBannerButton.onClick.AddListener(ShowBannerAd);
// 配置 Hide Banner(隐藏横幅广告)按钮在单击该按钮时调用 HideBannerAd() 方法:
_hideBannerButton.onClick.AddListener(HideBannerAd);
// 启用这两个按钮:
_showBannerButton.interactable = true;
_hideBannerButton.interactable = true;
}
// 实现在 load errorCallback 事件触发时执行的代码:
void OnBannerError(string message)
{
Debug.Log($"Banner Error: {message}");
//(可选)执行其他代码,例如尝试加载另一个广告。
}
// 实现一个在单击 Show Banner(展示横幅广告)按钮时调用的方法:
void ShowBannerAd()
{
// 设置选项以将显示事件告知 SDK:
BannerOptions options = new BannerOptions
{
clickCallback = OnBannerClicked,//用户点击横幅广告时触发此回调。
hideCallback = OnBannerHidden,//横幅广告对用户不可见时触发此回调。
showCallback = OnBannerShown//横幅广告对用户可见时触发此回调。
};
// 展示加载的横幅广告单元:
Advertisement.Banner.Show(_adUnitId, options);
}
// 实现一个在单击 Hide Banner(隐藏横幅广告)按钮时调用的方法:
void HideBannerAd()
{
// 隐藏横幅广告:
Advertisement.Banner.Hide();
}
void OnBannerClicked() { }
void OnBannerShown() { }
void OnBannerHidden() { }
void OnDestroy()
{
// 清理监听器:
_loadBannerButton.onClick.RemoveAllListeners();
_showBannerButton.onClick.RemoveAllListeners();
_hideBannerButton.onClick.RemoveAllListeners();
}
}
整合成一个脚本
using UnityEngine;
using UnityEngine.Advertisements;
using System;
using UnityEngine.UI;
public class AdsManager : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
{//在 SDK 3.7.0 及更高版本中,可以使用 IUnityAdsLoadListener 和 IUnityAdsShowListener 回调分别实现内容加载或展示成功或失败的逻辑。
[SerializeField] string _androidGameId = "*******";//Android Game ID (从Monetization(变现)后台申请项目获得)
[SerializeField] string _iOSGameId = "*******";//IOS Game ID (从Monetization(变现)后台申请项目获得)
[SerializeField] bool _testMode = true;//是否为测试模式状态
private string _gameId;
[SerializeField] string _androidIntAdUnitId = "Interstitial_Android";//Android 全屏插页式广告单元ID(所有项目的同类型广告单元一样)
[SerializeField] string _iOsIntAdUnitId = "Interstitial_iOS";//IOS 全屏插页式广告单元ID(所有项目的同类型广告单元一样)
private string _intAdUnitId;
[SerializeField] string _androidRewAdUnitId = "Rewarded_Android";//Android 激励广告单元ID(所有项目的同类型广告单元一样)
[SerializeField] string _iOSRewAdUnitId = "Rewarded_iOS";//IOS 激励广告单元ID(所有项目的同类型广告单元一样)
private string _rewAdUnitId = null; // 对于不受支持的平台,此值将保持为 null
private Action<UnityAdsShowCompletionState> curRewCallBack;//当前激励回调方法
private int curRewCallBackID = 100;
[SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;
[SerializeField] string _androidBannAdUnitId = "Banner_Android";
[SerializeField] string _iOSBannAdUnitId = "Banner_iOS";
private string _adUnitId = null;// 对于不受支持的平台,此值将保持为 null。
private bool isBannerShowing = false;//Banner是否正在展示
void Awake()
{
InitializeAds();
}
public void InitializeAds()
{
// 获取当前平台的 Ad Unit ID(广告单元 ID):
#if UNITY_IOS
_gameId = _iOSGameId;
_intAdUnitId = _iOsIntAdUnitId;
_rewAdUnitId = _iOSRewAdUnitId;
_adUnitId = _iOSBannAdUnitId;
#elif UNITY_ANDROID
_gameId = _androidGameId;
_intAdUnitId = _androidIntAdUnitId;
_rewAdUnitId = _androidRewAdUnitId;
_adUnitId = _androidBannAdUnitId;
#elif UNITY_EDITOR
_gameId = _androidGameId;//Only for testing the functionality in the Editor
_intAdUnitId = _androidIntAdUnitId;
_rewAdUnitId = _androidRewAdUnitId;
_adUnitId = _androidBannAdUnitId;
#endif
//Advertisement.isInitialized : 如果 SDK 已初始化,返回 true,否则返回 false。
//Advertisement.isSupported : 如果 SDK 在当前平台上受支持,返回 true,否则返回 false。
if (!Advertisement.isInitialized && Advertisement.isSupported)
{
//使用指定的 Game ID(游戏 ID)、测试模式状态以及广告单元加载设置来初始化广告服务。
Advertisement.Initialize(_gameId, _testMode, this);
}
}
#region 初始化回调
//--------------------(↓)初始化回调--------------------
/*
* 初始化完成回调方法
*/
public void OnInitializationComplete()
{
Debug.Log("Unity Ads initialization complete.");
LoadIntAd();
LoadRewAd();
LoadBanner();
}
/*
* 初始化失败回调方法
*/
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
{
Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
}
//--------------------(↑)初始化回调--------------------
#endregion
#region 各类型广告的加载和请求 及 横幅自定义回调方法
// 将内容加载到广告单元中:
private void LoadIntAd()
{
// 重要!仅在初始化之后再加载内容(在此示例中,初始化在另一个脚本中处理)。
Debug.Log("Loading Ad: " + _intAdUnitId);
Advertisement.Load(_intAdUnitId, this);
}
// 展示广告单元中加载的内容:
public void ShowIntAd()
{
// 请注意,如果未事先加载广告内容,此方法将失败
Debug.Log("Showing Ad: " + _intAdUnitId);
Advertisement.Show(_intAdUnitId, this);
}
// 将内容加载到广告单元中:
private void LoadRewAd()
{
// 重要!仅在初始化之后再加载内容(在此示例中,初始化在另一个脚本中处理)。
Debug.Log("Loading Ad: " + _rewAdUnitId);
Advertisement.Load(_rewAdUnitId, this);
}
// 实现当用户点击按钮时执行的方法:
public void ShowRewAd(Action<UnityAdsShowCompletionState> rewCallBack)
{
if (curRewCallBackID == 1)
{
return;
}
curRewCallBack = rewCallBack;
// 然后展示广告:
Advertisement.Show(_rewAdUnitId, this);
curRewCallBackID = 1;
}
// 实现一个在单击 Load Banner(加载横幅广告)按钮时调用的方法:
private void LoadBanner()
{
Debug.Log("Loading Ad: Banner");
//BannerPosition.TOP_LEFT == 0 :左上角位置
//BannerPosition.TOP_CENTER == 1 :上面居中位置
//BannerPosition.TOP_RIGHT == 2 :右上角位置
//BannerPosition.BOTTOM_LEFT == 3 :左下角位置
//BannerPosition.BOTTOM_CENTER == 4 :下面居中位置
//BannerPosition.BOTTOM_RIGHT == 5 :右下角位置
//BannerPosition.CENTER == 6 :中间位置
// 设置横幅广告位置:
Advertisement.Banner.SetPosition(_bannerPosition);
// 设置选项以将加载事件告知 SDK:
BannerLoadOptions options = new BannerLoadOptions
{
loadCallback = OnBannerLoaded,//横幅广告单元成功加载已准备好展示的内容时触发此回调。
errorCallback = OnBannerError//横幅广告单元加载内容失败时触发此回调。
};
// 向广告单元加载横幅广告内容:
Advertisement.Banner.Load(_adUnitId, options);
}
// 实现在 loadCallback 事件触发时执行的代码:
private void OnBannerLoaded()
{
Debug.Log("Banner的广告加载成功");
}
// 实现在 load errorCallback 事件触发时执行的代码:
private void OnBannerError(string message)
{
Debug.Log($"Banner Error: {message}");
//(可选)执行其他代码,例如尝试加载另一个广告。
}
// 实现一个在单击 Show Banner(展示横幅广告)按钮时调用的方法:
public void ShowBannerAd(BannerPosition bannerPos = BannerPosition.BOTTOM_CENTER)
{
if (isBannerShowing)
{
return;
}
// 设置选项以将显示事件告知 SDK:
BannerOptions options = new BannerOptions
{
clickCallback = OnBannerClicked,//用户点击横幅广告时触发此回调。
hideCallback = OnBannerHidden,//横幅广告对用户不可见时触发此回调。
showCallback = OnBannerShown//横幅广告对用户可见时触发此回调。
};
// 展示加载的横幅广告单元:
Advertisement.Banner.Show(_adUnitId, options);
}
// 实现一个在单击 Hide Banner(隐藏横幅广告)按钮时调用的方法:
public void HideBannerAd()
{
if(!isBannerShowing)
{
return;
}
// 隐藏横幅广告:
Advertisement.Banner.Hide();
}
private void OnBannerClicked() { }
private void OnBannerShown()
{
isBannerShowing = true;
}
private void OnBannerHidden()
{
isBannerShowing = false;
}
#endregion
#region 展示情况回调
//--------------------(↓)展示情况回调--------------------
public void OnUnityAdsAdLoaded(string placementId)
{
Debug.Log(placementId + "的广告加载成功");
}
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
{
//UnityAdsLoadError.INITIALIZE_FAILED == 0 :由于 SDK 未初始化而导致广告加载失败。
//UnityAdsLoadError.INTERNAL_ERROR == 1 :由于内部 Unity 广告服务错误而导致广告加载失败。
//UnityAdsLoadError.INVALID_ARGUMENT == 2 :由于 load 方法中的参数无效而导致广告加载失败。
//UnityAdsLoadError.NO_FILL == 3 :由于广告平台上没有可用的内容而导致广告加载失败。
//UnityAdsLoadError.TIMEOUT == 4 :广告未能在指定的时间范围内加载。
//UnityAdsLoadError.UNKNOWN == 5 :未知
Debug.Log($"Error loading Ad Unit: {placementId} - {error.ToString()} - {message}");
Debug.Log(placementId + "的广告加载失败");
switch (error)
{
case UnityAdsLoadError.INTERNAL_ERROR:
case UnityAdsLoadError.NO_FILL:
case UnityAdsLoadError.TIMEOUT:
if (placementId == _intAdUnitId)
{
LoadIntAd();
}
else if (placementId == _rewAdUnitId)
{
LoadRewAd();
}
break;
}
}
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
{
//UnityAdsShowError.NOT_INITIALIZED == 0 :由于 SDK 未初始化而导致广告展示失败。
//UnityAdsShowError.NOT_READY == 1 :由于广告单元尚未准备就绪而导致广告展示失败。
//UnityAdsShowError.VIDEO_PLAYER_ERROR == 2 :由于媒体播放器错误而导致广告展示失败。
//UnityAdsShowError.INVALID_ARGUMENT == 3 :由于 show 方法中的参数无效而导致广告展示失败。
//UnityAdsShowError.NO_CONNECTION == 4 :由于互联网连接错误而导致广告展示失败。
//UnityAdsShowError.ALREADY_SHOWING == 5 :由于广告已在展示而导致广告展示失败。
//UnityAdsShowError.INTERNAL_ERROR == 6 :由于内部 Unity 广告服务错误而导致广告展示失败。
//UnityAdsShowError.UNKNOWN == 7 :未知
Debug.Log(placementId + "的广告展示失败");
switch (error)
{
case UnityAdsShowError.NOT_READY:
case UnityAdsShowError.VIDEO_PLAYER_ERROR:
case UnityAdsShowError.NO_CONNECTION:
case UnityAdsShowError.INTERNAL_ERROR:
if (placementId.Equals(_rewAdUnitId))
{
Debug.Log("Unity Ads Rewarded Ad Completed");
// 反馈激励广告结果
curRewCallBack(UnityAdsShowCompletionState.UNKNOWN);
curRewCallBackID = 100;
}
if (placementId == _intAdUnitId)
{
LoadIntAd();
}
else if (placementId == _rewAdUnitId)
{
LoadRewAd();
}
break;
}
}
public void OnUnityAdsShowStart(string placementId)
{
Debug.Log(placementId + "的广告开始展示");
}
public void OnUnityAdsShowClick(string placementId)
{
Debug.Log(placementId + "的广告展示被点击");
}
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
{
Debug.Log(placementId + "的广告完成状态 : " + showCompletionState);
if (placementId.Equals(_rewAdUnitId))
{
Debug.Log("Unity Ads Rewarded Ad Completed");
// 反馈激励广告结果
curRewCallBack(showCompletionState);
curRewCallBackID = 100;
LoadRewAd();
}
else if(placementId.Equals(_intAdUnitId))
{
LoadIntAd();
}
}
//--------------------(↑)展示情况回调--------------------
#endregion
#region 各广告展示方法
/// <summary>
/// 展示插屏广告
/// </summary>
public void ShowIntAds()
{
ShowIntAd();
}
/// <summary>
/// 展示激励广告
/// </summary>
public void ShowRewAds()
{
ShowRewAd(result =>
{
switch (result)
{
case UnityAdsShowCompletionState.COMPLETED:
Debug.Log("广告展示完成,获得奖励 + 500金币");
break;
case UnityAdsShowCompletionState.SKIPPED:
Debug.Log("广告中途停止退出,给不给奖励自己看着办");
break;
case UnityAdsShowCompletionState.UNKNOWN:
Debug.Log("未知错误,不给奖励");
break;
}
});
}
/// <summary>
/// 展示横幅广告
/// </summary>
public void ShowBannerAds()
{
ShowBannerAd();
}
/// <summary>
/// 隐藏横幅广告
/// </summary>
public void HideBannerAds()
{
HideBannerAd();
}
#endregion
}
因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。