【Unity服务】如何集成Unity广告(Legacy)

Unity本身也是支持广告的,它是一个广告系统,同时也提供广告中介服务,可以接入其他广告平台。

Unity中添加广告的方式有两种,一种是Advertise Legacy,一种是LevelPlay。前者是Unity自己的广告系统,后者是直接收购后整合进来的。

这两种方式现在都支持,但前者已经不更新了。

所以开发者尽量使用LevelPlay,它在接入其他广告平台时也很方便。

功能/特性

Advertisement Legacy

Ads Mediation

支持广告网络

仅支持 Unity Ads

支持多个广告网络

集成复杂度

简单(少量代码,Unity Ads 默认支持)

较复杂(需额外配置调解规则和安装广告 SDK)

广告填充率

依赖 Unity Ads 的覆盖范围和填充率

利用调解优化填充率

广告收益

收益依赖 Unity Ads

综合多个广告网络的收益,通常更高

适用项目规模

小型项目

中型到大型项目

灵活性

较低

高,支持自定义调解策略

本文主要介绍如何集成传统的 Advertisement Legacy,至于Ads Mediation将在另外一篇中单独介绍。

在集成之前要做:

  1. 将项目连接到Service平台
  2. 安装Advertisement Legacy包
  3. 在cloud平台添加广告单元

(一)集成插屏广告

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;public class AdDisplay : MonoBehaviour
{public string myGameIdAndroid = "YOUR_GAME_ID_HERE";public string myGameIdIOS = "YOUR_GAME_ID_HERE";public string adUnitIdAndroid = "Interstitial_Android";public string adUnitIdIOS = "Interstitial_iOS";public string myAdUnitId;public bool adStarted;private bool testMode = true;// Start is called before the first frame updatevoid Start(){#if UNITY_IOSAdvertisement.Initialize(myGameIdIOS, testMode);myAdUnitId = adUnitIdIOS;#elseAdvertisement.Initialize(myGameIdAndroid, testMode);myAdUnitId = adUnitIdAndroid;#endif}// Update is called once per framevoid Update(){if (Advertisement.isInitialized && !adStarted){Advertisement.Load(myAdUnitId);Advertisement.Show(myAdUnitId);adStarted = true;}}

(二)集成奖励广告

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;public class RewardedAdDisplay : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
{public string myGameIdAndroid = "YOUR_GAME_ID_HERE";public string myGameIdIOS = "YOUR_GAME_ID_HERE";public string adUnitIdAndroid = "Rewarded_Android";public string adUnitIdIOS = "Rewarded_iOS";public string myAdUnitId;public string myAdStatus = "";public bool adStarted;public bool adCompleted;private bool testMode = true;// Start is called before the first frame updatevoid Start(){#if UNITY_IOSAdvertisement.Initialize(myGameIdIOS, testMode, this);myAdUnitId = adUnitIdIOS;#elseAdvertisement.Initialize(myGameIdAndroid, testMode, this);myAdUnitId = adUnitIdAndroid;#endif}// Update is called once per framevoid Update(){}public void OnInitializationComplete(){Debug.Log("Unity Ads initialization complete.");Advertisement.Load(myAdUnitId,this);}public void OnInitializationFailed(UnityAdsInitializationError error, string message){myAdStatus = message;Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");}public void OnUnityAdsAdLoaded(string adUnitId){Debug.Log("Ad Loaded: " + adUnitId);if (!adStarted){Advertisement.Show(myAdUnitId,this);}}public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message){myAdStatus = message;Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");}public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message){myAdStatus = message;Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");}public void OnUnityAdsShowStart(string adUnitId){adStarted = true;Debug.Log("Ad Started: " + adUnitId);}public void OnUnityAdsShowClick(string adUnitId){Debug.Log("Ad Clicked: " + adUnitId);}public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState){adCompleted = showCompletionState == UnityAdsShowCompletionState.COMPLETED;Debug.Log("Ad Completed: " + adUnitId);}}

(三)集成横幅广告

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;public class BannerAdExample : MonoBehaviour
{// For the purpose of this example, these buttons are for functionality testing:[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; // This will remain null for unsupported platforms.void Start(){// Get the Ad Unit ID for the current platform:
#if UNITY_IOS_adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID_adUnitId = _androidAdUnitId;
#endif// Disable the button until an ad is ready to show:_showBannerButton.interactable = false;_hideBannerButton.interactable = false;// Set the banner position:Advertisement.Banner.SetPosition(_bannerPosition);// Configure the Load Banner button to call the LoadBanner() method when clicked:_loadBannerButton.onClick.AddListener(LoadBanner);_loadBannerButton.interactable = true;}// Implement a method to call when the Load Banner button is clicked:public void LoadBanner(){// 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(_adUnitId, options);}// Implement code to execute when the loadCallback event triggers:void OnBannerLoaded(){Debug.Log("Banner loaded");// Configure the Show Banner button to call the ShowBannerAd() method when clicked:_showBannerButton.onClick.AddListener(ShowBannerAd);// Configure the Hide Banner button to call the HideBannerAd() method when clicked:_hideBannerButton.onClick.AddListener(HideBannerAd);// Enable both buttons:_showBannerButton.interactable = true;_hideBannerButton.interactable = true;     }// Implement code to execute when the load errorCallback event triggers:void OnBannerError(string message){Debug.Log($"Banner Error: {message}");// Optionally execute additional code, such as attempting to load another ad.}// Implement a method to call when the Show Banner button is clicked:void ShowBannerAd(){// Set up options to notify the SDK of show events:BannerOptions options = new BannerOptions{clickCallback = OnBannerClicked,hideCallback = OnBannerHidden,showCallback = OnBannerShown};// Show the loaded Banner Ad Unit:Advertisement.Banner.Show(_adUnitId, options);}// Implement a method to call when the Hide Banner button is clicked:void HideBannerAd(){// Hide the banner:Advertisement.Banner.Hide();}void OnBannerClicked() { }void OnBannerShown() { }void OnBannerHidden() { }void OnDestroy(){// Clean up the listeners:_loadBannerButton.onClick.RemoveAllListeners();_showBannerButton.onClick.RemoveAllListeners();_hideBannerButton.onClick.RemoveAllListeners();}
}

参考:

1.  Unity Ad文档: https://docs.unity.com/ads/en-us/manual/UnityAdsHome

2. https://learn.unity.com/tutorial/getting-started-with-unity-monetization

3. https://learn.unity.com/tutorial/unity-monetization-rewarded-ads

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

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

相关文章

IDEA如何设置编码格式,字符编码,全局编码和项目编码格式

前言 大家好,我是小徐啊。我们在开发Java项目(Springboot)的时候,一般都是会设置好对应的编码格式的。如果设置的不恰当,容易造成乱码的问题,这是要避免的。今天,小徐就来介绍下我们如何在IDEA…

Unable to find image ‘hello-world:latest‘ locally

网上对于这个问题的解答有很多了,我尝试了后并有解决,最后发现重启指令并没有使用sudo导致的。这里写一下总的解决方法: 1 查看是否已经有了hello-world sudo docker info如果有hello-world,就先删除 sudo docker rmi hello-w…

Web3.0安全开发实践:Clarity最佳实践总结

在过去的一段时间里,CertiK团队对比特币生态系统及其发展进行了深入研究。同时,团队还审计了多个比特币项目以及基于不同编程语言的智能合约,包括OKX的BRC-20钱包和MVC DAO的sCrypt智能合约实现。 现在,我们的研究重点转向了Clar…

Chrome离线安装包下载

1、问Chrome的官网:https://www.google.cn/chrome/ 直接下载的是在线安装包,安装需要联网。 2、如果需要在无法联网的设备上安装Chrome,需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址:https://www.google.c…

【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏

给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中,Alice 可以从 nums 中选择所有个位数 或 所有两位数,剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和,则 Alice 获胜。 如果 Alice 能赢得这场游…

前端速通(JavaScript)

1 初识JavaScript 1 JavaScript是什么 JavaScript 是一种高层的、轻量级的、解释型的编程语言,最初由 Netscape 公司于 1995 年开发。它的特点包括: 动态性:JavaScript是动态类型语言,允许开发者灵活地操作数据。跨平台&#xf…

分层架构 IM 系统之架构演进

在电商业务日活几百万的情况下,IM 系统采用分层架构方式,如下图。 分层架构的 IM 系统,整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】,我们在上篇文章(分层架构 IM 系…

基于ToLua的C#和Lua内存共享方案保姆级教程

C#和Lua内存共享方案保姆级教程 前言 在介绍C#和Lua内存共享方案之前,先介绍下面两个点来支撑这个方案的必要性 跨语言交互很费 Lua和C#交互最早是基于反射的方式实现的,后来为了提升性能发展成Luajit+C#静态方法导出注入到lua虚拟机的方式至此Lua+Unity的性能才达到了实…

SpringSecurity创建一个简单的自定义表单的认证应用

1、SpringSecurity 自定义表单 在 Spring Security 中创建自定义表单认证应用是一个常见的需求,特别是在需要自定义登录页面、认证逻辑或添加额外的表单字段时。以下是一个详细的步骤指南,帮助你创建一个自定义表单认证应用。 2、基于 SpringSecurity 的…

创客匠人老蒋:个人IP如何获取有效流量?

大家好,我是老蒋。 为什么我反复强调说,如果你想把个人IP、创始人IP做起来,想把自己直播间的流量变大变活,一定要去参加这场将在2024年底举办的《全球创始人IP领袖高峰论坛》?一定要走出去看看更高的世界?…

华三(H3C)T1020 IPS服务器硬件监控指标解读

在日益复杂的网络环境中,服务器的稳定运行对于保障业务的连续性和安全性至关重要。华三(H3C)T1020 IPS作为一款高性能的入侵防御系统,其运行状态和性能监控显得尤为重要。监控易作为一款专业的监控软件,为华三T1020 IP…

【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近用Unity3D的HDRP(高清渲染管…

数据结构-7.Java. 对象的比较

本篇博客给大家带来的是java对象的比较的知识点, 其中包括 用户自定义类型比较, PriorityQueue的比较方式, 三种比较方法...... 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .…

OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::calibrate 函数是 OpenCV 中用于校正鱼眼镜头畸变的一个重要函数。该函数通过一系列棋盘格标定板的图像来计算相机的内参矩阵和畸变…

GitLab使用操作v1.0

1.前置条件 Gitlab 项目地址:http://******/req Gitlab账户信息:例如 001/******自己的分支名称:例如 001-master(注:master只有项目创建者有权限更新,我们只能更新自己分支,然后创建合并请求&…

机器学习阶段学习Day31

KNN分类算法 KNN算法原理 根据K个邻居样本来判断当前样本属于哪个类别:K个最相似邻居中大多数所属类别即为当前样本的类别。但是对于数据量巨大或者高纬度的数据样本不太合适,数据量大的数据样本需要进行大量计算,而高纬度数据计算距离不具…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

uniapp发布android上架应用商店权限

先看效果: 实现原理: 一、利用uni.addInterceptor的拦截器,在一些调用系统权限前拦截,进行弹窗展示,监听确定取消实现业务逻辑。 二、弹窗是原生nativeObj进行drawRect绘制的 三、权限申请调用使用的 plus.android.…

VSCode【下载】【安装】【汉化】【配置C++环境】【运行调试】(Windows环境)

目录 一、VSCode的下载 & 安装 二、汉化 三、配置C 一、VSCode的下载 & 安装 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Download 注意!!!【不建议下载User版本,下载System版本】…

Diving into the STM32 HAL-----DAC笔记

根据所使用的系列和封装,STM32微控制器通常只提供一个具有一个或两个专用输出的DAC,除了STM32F3系列中的少数零件编号实现两个DAC,第一个具有两个输出,另一个只有一个输出。STM32G4 系列的一些较新的 MCU 甚至提供多达 5 个独立的…