GameId 在 Operate Dashboard 左边的导航栏中Monetization --> Platforms 下,IOS和Android都有,是七位数数字。
一定记得,要 Monetization.Initialize(gameId, false); SDK为3.0
如果导入SDK3.0后打包安卓平台报错,那么可以试试把ads关掉,就能打包成功了。services下的ads的on搞成off就行。而且,亲测广告可用。
在Unity编辑器下是在主线程执行的回调,但是在安卓环境下,执行回调是在子线程中执行的,
原因是在回调中操作了UI,但是捕捉到了一个错误,在子线程不能操作UI的错误。由此推测:在移动平台(安卓和IOS)都是在子线程中执行回调函数。
集成Unity广告需要集成 插件SDK或者 打开ads service。但是不能同时打开,相当于集成了两个SDK,会冲突。
以下是官方文档原文
原文地址:Unity developer integration guides
Unity 广告 Konowledge base
Unity的接入引导
概述
这个接入引导是为了你使用Unity制作的游戏中导入Unity 广告
*如果你是IOS开发者,使用Object-C,点这里:https://unityads.unity3d.com/help/ios/integration-guide-ios
*如果你是安卓开发者,使用Java,点这里:https://unityads.unity3d.com/help/android/integration-guide-android
Unity的 Monetization(变现) 平台提供给你强大的变现工具。如果你的游戏既使用游戏内购买,也有广告,unity的机器学习数据模型可以优化变现战略,无缝插入内容类型,学习更多关于Unity帮助你增加收入 ,看文档在:https://unityads.unity3d.com/help/monetization/placements
在这个引导中
*实现基础的广告
*实现带奖励的广告
*横幅广告
*测试你的操作
*高级变现建议
*api的引用
基础的实现
配置你的项目
设置打包平台
配置你的项目支持一个平台,使用 打包设置窗口 ,设置平台为IOS或者安卓,然后点击 选择平台
安装Unity Ads
确保使用最新版本的Unity Ads,从资源商店下载他,Monetization 的API 要求SDK3.0或者更新。资源包的信息在下载和安装文件中,看资源包的文档
下载地址:https://assetstore.unity.com/packages/add-ons/services/unity-ads-66123
资源包文档:https://docs.unity3d.com/2018.1/Documentation/Manual/AssetPackages.html
创建一个控件 注: Monetization 以下 称之为广告
布局触发事件,让游戏显示广告内容,管理布局在开发者面板的 操作页签 选择你的项目,然后在左边的导航栏选择 Monetization > Placements
布局连接:https://unityads.unity3d.com/help/monetization/placements
开发者面板:https://operate.dashboard.unity3d.com/
点击 AddPlacement 按钮调出创建布局的提示,命名您的布局并选择其类型:
*选择没有奖励(Non-rewarded)显示基础的缝隙广告或者促销内容,没有奖励的布局允许玩家在一定得时间后跳过
*选择奖励(Rewarded),允许玩家选择观看广告以获得奖励,奖励布局不允许玩家跳过
*选择横幅(Banner)创建一个专用横幅的布局
所有的Unity广告激活的项目默认都有'免费视频'和'奖励视频',你自由选择使用适合你项目的它们或者创建你自己的
初始化SDK
初始化SDK,你必须引用合适的项目的游戏Id,在开发者面板的操作页签选择项目获取Id,然后在左边的导航栏选择 Monetization > Placements
在你的游戏代码头部,导入命名空间:UnityEngine.Monetization,在游戏时生命周期的开始初始化SDK,最好在启动时。使用 Monetization.Initialize (gameId, testMode); 方法。例子
using UnityEngine.Monetization;
public class UnityAdsScript : MonoBehaviour {
string gameId = "1234567";
bool testMode = true;
void Start () {
Monetization.Initialize (gameId, testMode);
}
}
实现基础的(没有奖励)的广告
放置内容是一个对象代表变现内容,你的放置可以显示(更多信息,看文档在内容类型和个性化布局),使用 GetPlacementContent 方法,在准备显示时检索内容,和 Show 方法去显示他。看例子
using UnityEngine.Monetization;
public class UnityAdsPlacement : MonoBehaviour {
public string placementId = "video";
public void ShowAd () {
StartCoroutine (ShowAdWhenReady ());
}
private IEnumerator ShowAdWhenReady () {
while (!Monetization.IsReady (placementId)) {
yield return new WaitForSeconds(0.25f);
}
ShowAdPlacementContent ad = null;
ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
if(ad != null) {
ad.Show ();
}
}
}
在这个例子中,协程检查使用 IsReady 方法通过布局Id,可获得 PlacementContent ,如果内容可用,存储为一个变量,执行 show 方法
实现奖励广告
奖励玩家观看广告增加用户体验,导致更高的收入,在例子中,游戏可能奖励玩家游戏内的货币,消耗材料,增加生命值,或者经验倍数,如何有效设计你的奖励广告的更多信息,可以看文档,广告更好做法:https://unityads.unity3d.com/help/resources/best-practices
奖励玩家观看广告,跟随相同步骤的详情在基础实现部分,但是显示广告使用奖励的回调方法和自定义的逻辑为玩家完成广告
选择一个布局
你必须显示奖励广告来展示奖励广告,所有Unity广告激活的项目也有一个默认的'奖励视频'布局,你自由选择使用适合你项目的它们或者创建你自己的
添加回调方法在你的代码中
show 方法接收回调,SDK使用返回一个 ShowResult 枚举,这个结果指示玩家是否完成或者跳过了广告,使用这个信息去写一个自定义的方法如何处理每个场景。看例子:
using UnityEngine.Monetization;
public class RewardedAdsPlacement : MonoBehaviour {
public string placementId = "rewardedVideo";
public void ShowAd () {
StartCoroutine (WaitForAd ());
}
IEnumerator WaitForAd () {
while (!Monetization.IsReady (placementId)) {
yield return null;
}
ShowAdPlacementContent ad = null;
ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
if (ad != null) {
ad.Show (AdFinished);
}
}
void AdFinished (ShowResult result) {
if (result == ShowResult.Finished) {
// Reward the player
}
}
}
奖励广告按钮代码例子
简介广告通常使用一个按钮提示玩家选择观看广告,以下描述了如何创建一个奖励广告按钮,在点击的时候显示一个广告,只要内容是可用的
1.在Untiy编辑器,选择 GameObject -> UI -> Button 去添加一个按钮在你的场景。
2.选中按钮,在属性面板,点击 AddComponent -> NewScript 给他添加一个脚本组件,脚本名字 和类型都是 UnityAdsButton
3.打开代码和添加以下例子代码
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Monetization;
[RequireComponent (typeof (Button))]
public class UnityAdsButton : MonoBehaviour {
public string placementId = "rewardedVideo";
private Button adButton;
#if UNITY_IOS
private string gameId = "1234567";
#elif UNITY_ANDROID
private string gameId = "7654321";
#endif
void Start () {
adButton = GetComponent<Button> ();
if (adButton) {
adButton.onClick.AddListener (ShowAd);
}
if (Monetization.isSupported) {
Monetization.Initialize (gameId, true);
}
}
void Update () {
if (adButton) {
adButton.interactable = Monetization.IsReady (placementId);
}
}
void ShowAd () {
ShowAdCallbacks options = new ShowAdCallbacks ();
options.finishCallback = HandleShowResult;
ShowAdPlacementContent ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
ad.Show (options);
}
void HandleShowResult (ShowResult result) {
if (result == ShowResult.Finished) {
// Reward the player
} else if (result == ShowResult.Skipped) {
Debug.LogWarning ("The player skipped the video - DO NOT REWARD!");
} else if (result == ShowResult.Failed) {
Debug.LogError ("Video failed to show");
}
}
}
备注:这个例子在特定点,检查在游戏里放置内容是否准备好去显示,作为另一种方法,你可以实现监听器,在内容可用时通知您。
实现横幅广告
布局配置
横幅广告要求一个横幅布局专用的特定类型,横幅广告当前显示锚定在屏幕的底部中心。
代码实现
在你的布局代码头部,声明命名空间 UnityEngine.Advertisement ,其中包含 Banner 类,初始化SDK使用 Advertisement.Banner.Show() ,显示横幅广告,看例子:
using System.Collections;
using UnityEngine;
using UnityEngine.Advertisements;
public class BannerAds : MonoBehaviour {
public string bannerPlacement = "banner";
public bool testMode = false;
#if UNITY_IOS
public const string gameID = "1234567";
#elif UNITY_ANDROID
public const string gameID = "1234568";
#elif UNITY_EDITOR
public const string gameID = "1111111";
#endif
void Start () {
Advertisement.Initialize (gameID, testMode);
StartCoroutine (ShowBannerWhenReady ());
}
IEnumerator ShowBannerWhenReady () {
while (!Advertisement.IsReady ("banner")) {
yield return new WaitForSeconds (0.5f);
}
Advertisement.Banner.Show (bannerPlacement);
}
}
测试
在发布游戏之前,启用测试模式跟着这些步骤:
1.在开发者面板 操作页签 选择你的项目,
2.在左边的导航栏选择 Monetization -> Platforms
3.选择期望的平台,然后选择 设置页签
4.向下滚动到 测试模式 部分,切换客户端的测试模式,然后选择 强制测试模式开启单选按钮 Force test mode ON 按钮。
在Unity编辑器,点击播放按钮运行你的项目和测试你的广告实现。
注释:你必须在测试广告积分之前启用测试模式,以免欺诈行为
优化你的收入
祝贺实现Unity广告,我们的目标是简单的达到最大化你的收入,考虑到这一点,考虑下面的步骤:
*你的游戏内购吗?
·如果是,实现内购宣传片宣传你的游戏
·如果不是,创建游戏内的商店使用Unity的内购插件
IAP宣传片:https://docs.unity3d.com/2018.1/Documentation/Manual/IAPPromo.html
Unity的内购插件:https://docs.unity3d.com/2018.1/Documentation/Manual/UnityIAP.html
你有广告和安装了内购,使用个性化布局增加你的广告和内购战略提高你整个游戏的收入
个性化:https://unityads.unity3d.com/help/monetization/placements#personalized-placements
回顾我们的最佳实践指南,了解如何设计有效的广告机制。
最佳实践:https://unityads.unity3d.com/help/resources/best-practices