Unity 之 最新Ads原生广告接入流程详解和工具类分享

一,注册 Unity Ads 广告 SDK二,下载 Unity Ads 广告 SDK三,配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化

四,集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享

五,测试 Unity Ads 广告 SDK5.1 搭建场景5.2 后台数据

Unity Ads 是由 Unity Technologies 开发的广告平台,可以用于在移动应用程序中显示广告。它提供了多种广告类型,包括插屏广告、横幅广告、视频广告等。

在本文中,我们将详细介绍如何接入 Unity Ads 广告 SDK。

一,注册 Unity Ads 广告 SDK

在使用 Unity Ads 广告 SDK 之前,需要先登录Unity Ads后台。地址: https://dashboard.unity3d.com/gaming/organizations

登录在Unity账号,注意要和本地Hub使用同一账号。 登录成功后,在“项目管理” 可进入到这个界面,然后在“Projects” 面板中创建一个项目即可: 创建项目之后,返回到上一层,找到广告配置界面:

其他的数据看吧想不用管,广告位置ID也不用改,先按照默认操作集成即可。其他面板也可以等集成成功后慢慢看。

二,下载 Unity Ads 广告 SDK

Unity Ads 广告 SDK 可以从 Unity Asset Store 中下载,并导入到您的 Unity 项目中。在 Unity 中,选择菜单栏的“Window”>“Package Manager”,然后在“Packages”选项卡中搜索“Advertisement Legacy”,点击“Install”按钮即可下载和安装:

安装 安装完成后,在Project Setting中找到Services --> Ads,点击OFF 打开 打开后选择1步骤中后台创建的项目,完成后即可入到如下界面

可以看到 GameId 中的 Android和iOS 都已经有了和后台项目创建的一致。

注意:TestMode是测试模式,正式发布前需要取消:Enable test mode 选项。

三,配置 Unity Ads 广告 SDK

3.1 广告位展示流程

广告初始化

成功 --> 加载广告位失败 --> 设定几秒后重新加载

广告位加载广告

成功 --> 可展示广告失败 --> 设定几秒后重新加载

在指定位置展示广告

成功 --> 监听展示结果,比如:激励广告完成发放奖励失败 --> 加载成功后几乎不会有展示失败的情况

3.2 代码初始化

注意配置的广告ID换成自己的,测试模式是否开启手动控制。初始化代码如下:

[SerializeField] string _androidGameId = "5309904";

[SerializeField] string _iOSGameId = "5309905";

[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;

#endif

if (!Advertisement.isInitialized && Advertisement.isSupported)

{

Advertisement.Initialize(_gameId, _testMode, this);

}

}

四,集成 Unity Ads 广告 SDK

4.1 相关介绍

设置Banner位置: 在代码中,使用 Unity Ads SDK 的 Banner API 来显示横幅广告。使用 Advertisement.Banner.SetPosition(_bannerPosition) 方法设置广告位置,然后使用 Show() 方法显示广告。 插屏和激励视频 对于插屏广告和奖励视频广告,可以使用 Unity Ads SDK 的 Interstitial API 和 Rewarded Video API 来显示广告。

在显示广告时,可以通过监听广告事件来处理广告的状态。例如,在插屏广告显示完成后,可以使用以下代码来处理广告事件:

在此示例中,我们通过实现 IUnityAdsListener 接口来监听广告事件。在 Start() 方法中,我们添加了一个监听器,并使用 Initialize() 方法初始化广告 SDK。然后,我们使用 Show() 方法显示插屏广告。当广告状态发生变化时,Unity Ads SDK 将调用相应的事件方法。

4.2 代码分享

测试代码如下:注意更换自己的项目id

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.Advertisements;

public class UnityAdsManager : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener

{

public static UnityAdsManager Ins;

[SerializeField] string _androidGameId = "5309985";

[SerializeField] string _iOSGameId = "5309984";

[SerializeField] bool _testMode = true;

private string _gameId;

void Awake()

{

Ins = this;

InitializeAds();

}

public void InitializeAds()

{

#if UNITY_IOS

_gameId = _iOSGameId;

#elif UNITY_ANDROID

_gameId = _androidGameId;

#elif UNITY_EDITOR

_gameId = _androidGameId;

#endif

if (!Advertisement.isInitialized && Advertisement.isSupported)

{

Advertisement.Initialize(_gameId, _testMode, this);

}

}

public void OnInitializationComplete()

{

Debug.Log("Unity Ads 广告初始化完成.");

InitAdUnit();

InitRewardAD();

InitBanner();

}

public void OnInitializationFailed(UnityAdsInitializationError error, string message)

{

Debug.Log($"Unity Ads 广告初始化失败: {error.ToString()} - {message}");

}

#region 插屏广告

// 插屏广告ID

string _androidAdUnitId = "Interstitial_Android";

string _iOsAdUnitId = "Interstitial_iOS";

string _adInterstitialId;

private bool _InterstitialLoaded = false;

void InitAdUnit()

{

_adInterstitialId = (Application.platform == RuntimePlatform.IPhonePlayer)

? _iOsAdUnitId

: _androidAdUnitId;

LoadInterstitialAd();

}

///

/// 加载插屏

///

public void LoadInterstitialAd()

{

if (_InterstitialLoaded) return;

Debug.Log("Loading Ads 加载插屏广告ID: " + _adInterstitialId);

Advertisement.Load(_adInterstitialId, this);

}

///

/// 展示插屏

///

public void ShowInterstitialAd()

{

if (_InterstitialLoaded)

{

Debug.Log("Showing Ads 显示广告ID: " + _adInterstitialId);

Advertisement.Show(_adInterstitialId, this);

}

else

{

LoadInterstitialAd();

}

}

#endregion 插屏

#region 激励视频

string _androidRewardedUnitId = "Rewarded_Android";

string _iOSRewardedId = "Rewarded_iOS";

string _adRewardedId = null;

private bool _RewardLoaded = false;

void InitRewardAD()

{

#if UNITY_IOS

_adRewardedId = _iOSRewardedId;

#elif UNITY_ANDROID

_adRewardedId = _androidRewardedUnitId;

#endif

LoadRewardedAd();

}

///

/// 加载激励视频

///

public void LoadRewardedAd()

{

if (_RewardLoaded) return;

Debug.Log("Loading Ad: " + _adRewardedId);

Advertisement.Load(_adRewardedId, this);

}

private Action RewardedAdClose;

///

/// 展示激励视频

///

public void ShowRewardedAd(Action OnClose)

{

RewardedAdClose = OnClose;

Advertisement.Show(_adRewardedId, this);

}

#endregion

#region Banner

[SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;

string _androidBannerId = "TpxxlLobbyPopBanner";

string _iOSBannerId = "Banner_iOS";

string _adBannerId = null;

private bool _adBannerLoaded = false;

void InitBanner()

{

// Get the Ad Unit ID for the current platform:

#if UNITY_IOS

_adBannerId = _iOSBannerId;

#elif UNITY_ANDROID

_adBannerId = _androidBannerId;

#endif

// 设置Banner显示位置

Advertisement.Banner.SetPosition(_bannerPosition);

}

public void LoadBanner()

{

if (_adBannerLoaded) return;

// Set up options to notify the SDK of load events:

BannerLoadOptions options = new BannerLoadOptions

{

loadCallback = OnBannerLoaded,

errorCallback = OnBannerError

};

// Load the Ad Unit with banner content:

Advertisement.Banner.Load(_adBannerId, options);

}

void OnBannerLoaded()

{

_adBannerLoaded = true;

Debug.Log("Banner Ads 加载完成");

}

void OnBannerError(string message)

{

_adBannerLoaded = false;

Debug.Log($"Banner Ads 加载失败 Error: {message}");

// 可选地执行附加代码,例如尝试加载另一个广告。

}

///

/// 展示Banner

///

public void ShowBannerAd()

{

if (!_adBannerLoaded)

{

LoadBanner();

}

else

{

BannerOptions options = new BannerOptions

{

clickCallback = OnBannerClicked,

hideCallback = OnBannerHidden,

showCallback = OnBannerShown

};

// Show the loaded Banner Ad Unit:

Advertisement.Banner.Show(_adBannerId, options);

}

}

///

/// 隐藏Banner

///

public void HideBannerAd()

{

Advertisement.Banner.Hide();

}

void OnBannerClicked() { }

void OnBannerShown() { }

void OnBannerHidden()

{

LoadBanner();

}

#endregion

public void OnUnityAdsAdLoaded(string adUnitId)

{

// 如果广告单元成功加载内容,则可选择执行代码。

Debug.Log("Showing Ads 加载广告完成ID: " + adUnitId);

if (adUnitId == _androidAdUnitId || adUnitId == _iOsAdUnitId)

{

_InterstitialLoaded = true;

}

else if (adUnitId == _androidRewardedUnitId || adUnitId == _iOSRewardedId)

{

_RewardLoaded = true;

}

}

public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message)

{

Debug.Log($"Error Ads 加载广告失败 Unit: {_adUnitId} - {error.ToString()} - {message}");

if (_adUnitId == _androidAdUnitId || _adUnitId == _iOsAdUnitId)

{

_InterstitialLoaded = false;

}

else if (_adUnitId == _androidRewardedUnitId || _adUnitId == _iOSRewardedId)

{

_RewardLoaded = false;

}

}

public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message)

{

Debug.Log($"Error Ads 展示广告失败 Unit {_adUnitId}: {error.ToString()} - {message}");

// 如果广告单元无法显示,可以选择执行代码,例如加载另一个广告

if (_adUnitId == _androidAdUnitId || _adUnitId == _iOsAdUnitId)

{

_InterstitialLoaded = false;

}

else if (_adUnitId == _androidRewardedUnitId || _adUnitId == _iOSRewardedId)

{

_RewardLoaded = false;

}

}

public void OnUnityAdsShowStart(string _adUnitId) { }

public void OnUnityAdsShowClick(string _adUnitId) { }

// 视频展示完成发放奖励:

public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)

{

if (adUnitId.Equals(adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))

{

Debug.Log("Unity Ads 激励视频播放完成");

// 发放奖励

RewardedAdClose(true);

}

// 加载新的激励视频

if (adUnitId == _androidRewardedUnitId || adUnitId == _iOSRewardedId)

{

_RewardLoaded = false;

LoadRewardedAd();

}

else if (adUnitId == _androidAdUnitId || adUnitId == _iOsAdUnitId)

{

_InterstitialLoaded = false;

LoadInterstitialAd();

}

}

}

五,测试 Unity Ads 广告 SDK

5.1 搭建场景

搭建测试场景如下:

注意:红框中的广告位ID要和后台创建的对应上,测试时要先等加载完成再执行展示即可。

5.2 后台数据

以上就是接入 Unity Ads 广告 SDK 的流程。需要正确配置广告选项,并根据应用程序的需求选择合适的广告类型。

点击链接下载接入SDK的源码,没有积分的童鞋, 点击下面卡片,回复 UnityAds 也可以获得文中接入SDK的源码~

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。