Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益

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

  • 一,注册 Unity Ads 广告 SDK
  • 二,下载 Unity Ads 广告 SDK
  • 三,配置 Unity Ads 广告 SDK
    • 3.1 广告位展示流程
    • 3.2 代码初始化
  • 四,集成 Unity Ads 广告 SDK
    • 4.1 相关介绍
    • 4.2 代码分享
  • 五,测试 Unity Ads 广告 SDK
    • 5.1 搭建场景
    • 5.2 后台数据

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

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

一,注册 Unity Ads 广告 SDK

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

  1. 登录在Unity账号,注意要和本地Hub使用同一账号。

  2. 登录成功后,在“项目管理” 可进入到这个界面,然后在“Projects” 面板中创建一个项目即可:

  3. 创建项目之后,返回到上一层,找到广告配置界面:

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


二,下载 Unity Ads 广告 SDK

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

  1. 安装

  2. 安装完成后,在Project Setting中找到Services --> Ads,点击OFF 打开

  3. 打开后选择1步骤中后台创建的项目,完成后即可入到如下界面

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

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


三,配置 Unity Ads 广告 SDK

3.1 广告位展示流程

  1. 广告初始化
  • 成功 --> 加载广告位
  • 失败 --> 设定几秒后重新加载
  1. 广告位加载广告
  • 成功 --> 可展示广告
  • 失败 --> 设定几秒后重新加载
  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;
#endifif (!Advertisement.isInitialized && Advertisement.isSupported){Advertisement.Initialize(_gameId, _testMode, this);}}

四,集成 Unity Ads 广告 SDK

4.1 相关介绍

  1. 设置Banner位置:
    在代码中,使用 Unity Ads SDK 的 Banner API 来显示横幅广告。使用 Advertisement.Banner.SetPosition(_bannerPosition) 方法设置广告位置,然后使用 Show() 方法显示广告。

  2. 插屏和激励视频
    对于插屏广告和奖励视频广告,可以使用 Unity Ads SDK 的 Interstitial APIRewarded 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;
#endifif (!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 插屏广告// 插屏广告IDstring _androidAdUnitId = "Interstitial_Android";string _iOsAdUnitId = "Interstitial_iOS";string _adInterstitialId;private bool _InterstitialLoaded = false;void InitAdUnit(){_adInterstitialId = (Application.platform == RuntimePlatform.IPhonePlayer)? _iOsAdUnitId: _androidAdUnitId;LoadInterstitialAd();}/// <summary>/// 加载插屏/// </summary>public void LoadInterstitialAd(){if (_InterstitialLoaded) return;Debug.Log("Loading Ads 加载插屏广告ID: " + _adInterstitialId);Advertisement.Load(_adInterstitialId, this);}/// <summary>/// 展示插屏/// </summary>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;
#endifLoadRewardedAd();}/// <summary>/// 加载激励视频/// </summary>public void LoadRewardedAd(){if (_RewardLoaded) return;Debug.Log("Loading Ad: " + _adRewardedId);Advertisement.Load(_adRewardedId, this);}private Action<bool> RewardedAdClose;/// <summary>/// 展示激励视频/// </summary>public void ShowRewardedAd(Action<bool> 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}");// 可选地执行附加代码,例如尝试加载另一个广告。}/// <summary>/// 展示Banner/// </summary>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);}}/// <summary>/// 隐藏Banner/// </summary>public void HideBannerAd(){Advertisement.Banner.Hide();}void OnBannerClicked() { }void OnBannerShown() { }void OnBannerHidden(){LoadBanner();}#endregionpublic 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 的流程。需要正确配置广告选项,并根据应用程序的需求选择合适的广告类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4708.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HHU云计算期末复习(上)Google、Amazon AWS、Azure

文章目录 第一章 概论第二章 Google 云计算2.1 Google文件系统&#xff08;GFS&#xff09;2.2 MapReduce和Hadoop2.3 分布式锁服务Chubby2.4 分布式结构化数据表Bigtable存储形式主服务器子表Bigtable 相关优化技术 2.5 分布式存储系统MegastoreMegastoreACID语义基本架构核心…

Spring Boot是什么?详解它的优缺点以及四大核心

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Spring Boot 是什么&#xff1f; 二、Spring Boot 的优缺点 1、优点 ①可快速构建独立的 Spring 应用 ②直接嵌入Tomcat、Jett…

响应数据加密解决方案

需求分析 响应数据加密是一种很重要的安全措施,可以保护数据在传输过程中不被未经授权的用户拦截、窃取或篡改。以下是响应数据加密需求分析: 响应数据必须进行加密: 所有响应数据必须进行加密,以保证数据在传输过程中的安全性。服务器可以采用HTTPS协议对响应数据进行加密…

Redis 高可用和优化

目录 一&#xff1a;Redis 高可用 二&#xff1a; Redis 持久化 1、持久化的功能 2、Redis 提供两种方式进行持久化 3、 RDB 持久化 &#xff08;1&#xff09;触发条件 &#xff08;1.1&#xff09;手动触发 &#xff08;1.2&#xff09;自动触发 &#xff08;1.3&am…

软件测试岗位之大厂到底有多累?

今天给大家分享两个朋友的故事&#xff0c;他们分别在国内两家顶尖的互联网大厂&#xff0c;一个在头条&#xff0c;一个在蚂蚁。 头条的故事 头条的主人公&#xff0c;在入职后的一年里&#xff0c;晚上十点半下班是比较早了&#xff0c;基本上都是十一点半左右下班&#xff…

react context上下文与vue中 provide inject的用法区别

一、react中&#xff1a; 数据传递 1、引入createContext import { createContext } from "react"; 2、创建并导出 export const FspThemeContext createContext({}); 3、传递数据&#xff08;value项不能缺少&#xff01;&#xff01;&#xff09; ①不解构…

MySQL数据库第一课 ---------安装

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 虚拟环境虚拟环境 安装虚拟机 自主安装 简易安装 ———————————————————————————————————————— 虚拟环境虚拟环境 我们现在运行代码的环境是在 PyCharm…

prometheus告警发送到钉钉群机器人的全部署流程

前置条件&#xff1a;prometheus安装完成&#xff0c;创建钉钉群机器人&#xff0c;我这里使用的是指定ip的方式 定义告警规则 修改Prometheus配置文件prometheus.yml,添加以下配置&#xff1a; rule_files:- /usr/local/prometheus/rules/*.rulesalerting:alertmanagers:- s…

uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)

语音播报的实现的方法有很多种&#xff0c;我这里介绍集中不引用百度、阿里或者迅飞的API的实现方式。 一、采用new SpeechSynthesisUtterance的方式 废话不多说直接上代码 data() {return {utterThis:null,} },//方法使用this.utterThis new SpeechSynthesisUtterance(); …

辉哥带你学hive第八讲

1.自定义函数 1.1 自定义函数类型 根据用户自定义函数类别分为以下三种&#xff1a; &#xff08;1&#xff09;UDF&#xff08;User-Defined-Function&#xff09; 一进一出。 &#xff08;2&#xff09;UDAF&#xff08;User-Defined Aggregation Function&#xff09; 用户…

Python一行命令搭建HTTP服务器并外网访问 - 内网穿透

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转载自远程内网穿透的文章&#xff1a;【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透…

基于kubesphere的k8s环境部署三节点的rook-ceph集群

文章目录 前言链接&#xff1a;[基于kubesphere的k8s环境部署单点版本的rook-ceph](https://blog.csdn.net/baidu_35848778/article/details/131050918) 一、rook-ceph是什么&#xff1f;二、开始部署2.1 环境准备2.2 软件包准备&#xff0c;计算\存储节点执行2.3 下载rook-cep…