Unity
Adiz Unity¶
Adiz Unity是由Hive SDK提供的Unity广告模块,使使用AdMob提供的广告功能变得更加容易。Adiz Unity提供的广告类型如下:
- 插页广告
- 横幅广告
- 原生广告
- 奖励广告
- 奖励插页广告
- 应用打开广告
要安装和使用 Adiz Unity,请按照以下指南顺序进行。
安装或更新¶
- 配置 Adiz Unity 开发环境。
- 在 这里 下载最新版本的 Adiz 并解压。
-
在 Unity 中,转到 Assets > 导入包 > 自定义包…,选择 .unitypackage 文件,然后点击导入。
4. 检查Assets文件夹下是否已创建Adiz文件和文件夹。
5. 下载并安装最新版本的 EDM4U。EDM4U 包含在 Hive SDK v4 中。如果您使用的是 Hive SDK v4,则无需单独安装 EDM4U。
要更新当前使用的 Adiz 版本,请删除 Adiz,然后下载并安装最新版本。
Unity 设置¶
安卓¶
将 AdMobId
值以 ca-app-pub-XXXXX~YYYYY 的格式添加到您 Unity 项目中创建的 Assets/Plugins/Android/AndroidManifest.xml 文件中。
<manifest>
<application>
<!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
要显示视频广告,必须启用硬件加速。将硬件加速设置添加到 AndroidManifest.xml 文件中。将其添加到 application
标签将为整个应用程序启用硬件加速。将其添加到 activity
标签将仅为您想要显示广告的特定 Activity
启用硬件加速。
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
</application>
在Unity的Android解析器设置中检查使用Jetifier(资产 > 外部依赖管理器 > Android解析器 > 设置)。
在“播放器设置” > “播放器” > “构建设置”屏幕中,检查以下三个项目。
在使用Proguard时,Adiz的Proguard规则已经包含在Adiz模块中。因此,无需将Proguard规则添加到您的项目中。
检查您当前的 Gradle 版本。对于稳定的 Android 构建,Gradle 版本应为 6.7.1 或更高,Gradle 插件版本应为 4.2.0 或更高。以下是如何更改 Gradle 版本和 Gradle 插件版本的方法:
-
使用自定义基础 Gradle 模板。
- 检查构建设置 > 项目设置 > 玩家 > 自定义基础 Gradle 模板。
- 将创建 Assets/Plugins/Android/baseProjectTemplate.gradle。
-
更改 Gradle 插件版本。 打开文件 Assets/Plugins/Android/baseProjectTemplate.gradle* 并将版本更改为
com.android.tools.build:gradle:4.2.0
。 - 下载所需版本的 Gradle,然后解压到您想要的路径。
- 在 Unity 中更改 Gradle 安装路径。
- 取消选中 Preferences > External Tools > Gradle Installed with Unity。
- 设置您解压 Gradle 的路径。
- 在构建之前,请检查 Player > Other Settings > Identification > Target API Level 中的目标 API 级别是否为 33 或更高。
iOS¶
取消选中 *Assets > External Dependency Manager > iOS Resolver > Settings 中的 static_framework
构建设置。
按照以下方式配置在 Unity 构建期间创建的 Podfile。
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git'
platform :ios, '12.0'
target 'UnityFramework' do
pod 'HiveAdizUnityPlugin', '2.0.1'
end
target 'Unity-iPhone' do
end
use_frameworks!
# fix for dyld issue in pods when using Project
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# xcode 15 Toolchain Issue
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
# end
config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 12.0
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
将 GADApplicationIdentifier
键添加到 Unity 构建期间创建的 Xcode 项目的 Info.plist 文件中,并将 AdMobId
值(格式为 ca-app-pub-XXXXX~YYYYY)作为键值输入。或者,您可以取消注释 Assets/HiveAdiz/Editor/AdizPostProcess.cs 文件中的 GADApplicationIdentifier
设置行,并添加 AdMobId
以自动设置它。
此外,对于 iOS 14 及以上版本,请参考 更新您的 info.plist 指南,将 SKAdNetwork
列表添加到 Info.plist 文件中。可以使用 Assets/HiveAdiz/Editor/AdizPostProcess.cs 文件在构建过程中自动将其添加到 Info.plist 文件中。
设置测试广告¶
Adiz 允许您以两种方式显示测试广告。
- 启用测试模式:仅显示由 AdMob 发布的测试广告。
- 注册测试设备并显示广告:为了测试目的显示真实广告。注册设备以显示测试广告,以确保在测试期间不会发生无效流量。
启用测试模式¶
在开发阶段,启用测试模式以防止在点击测试广告时向广告客户收费。当测试模式被激活时,仅显示测试广告。在测试模式下,您可以在 Hive 控制台中显示测试广告,而无需输入 AdMob 广告密钥。对于商业分发,请禁用测试模式。
Note
在开发阶段,如果在非测试模式下过度点击广告,可能会被视为无效流量,这可能导致您的AdMob帐户被举报并无法显示广告。
using hiveAdiz;
// Enable test mode. Comment out the below line when distributing commercially.
Adiz.SetTestMode(true);
// Enable logging for the Adiz module. Logging should only be used in test mode. Comment out the below line when distributing commercially.
Adiz.SetLogEnable(true);
在测试设备上显示广告¶
在以下情况下,需要注册测试设备以显示测试广告:
如果您在未注册测试设备的情况下测试显示真实广告,可能会被视为无效流量,从而导致您的 AdMob 账户被封锁,广告将不再显示。当您注册测试设备时,显示广告时将显示“测试模式”或“测试广告”(针对原生广告)。确保在商业发布时禁用测试设备。
要注册测试设备,首先识别测试设备ID。在Android上,可以使用以下两种方法识别测试设备ID(例如,33BE2250B43518CCDA7DE426D04EE231
):
- 调用
Adiz.Initialize()
后检查 Logcat 日志:使用新的 ConsentDebugSettings.Builder().addTestDeviceHashedI ("33BE2250B43518CCDA7DE426D04EE231") 将其设置为调试设备。
- 调用
initialize()
→load()
后检查 Logcat 日志,无论广告类型如何
Adiz.Initialize()
: I/Ads: 使用
RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")) 来获取此设备上的测试广告。
在 iOS 上,测试设备 ID(例如,B74F6468-1516-467C-99AD-CC5973C5DB52
)可以通过以下两种方法识别:
- 调用
Adiz.Initialize()
后检查 Logcat 日志:要为此设备启用调试模式,请设置: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
- 调用
initialize()
后检查 Logcat 日志→
load(),无论广告类型如何,在调用
Adiz.Initialize()后:
GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ "B74F6468-1516-467C-99AD-CC5973C5DB52" ]`
在识别测试设备ID后,在现有的Adiz初始化代码中执行
Adiz.initialize
之前添加行 Adiz.setTestDevice(DEVICE_ID)
。将复制的测试设备ID输入到 DEVICE_ID
中。
using hiveAdiz;
public void Initialize() {
// Set test device
Adiz.SetTestDevice("33BE2250B43518CCDA7DE426D04EE231");
Adiz.Initialize(new CommonHandlers.Builder()
.OnResult(InitResultCB)
.Build());
}
使用广告检查器¶
广告检查器是一个应用内覆盖工具,实时分析在测试设备上请求和显示实际广告的过程。它会告知您加载广告所需的时间,如果广告未能显示,它会提供失败的原因。您还可以指定特定的广告网络,以检查广告是否正确显示,并在出现问题时在代码级别进行调试。整个过程通过广告检查器用户界面进行。它包含在 Google Mobile Ads SDK Android 20.0.0 和 Google Mobile Ads SDK iOS 7.68.0 或更高版本中,可以通过调用 AdizDeveloperTool.OpenAdInspector
使用。
要使用广告检查器,您需要满足以下两个条件:
Adiz AppID 配置¶
在 Hive 控制台 AppCenter 中设置注册的 Adiz AppID。如果未设置,将使用包名称或捆绑 ID。
Hive 控制台服务器配置¶
配置您想要使用的 Hive 控制台服务器。默认值为 REAL
。即使您使用商业服务器,如果启用了测试模式,也只会显示测试广告。
- 测试控制台服务器:
ZoneType.TEST
- 沙盒控制台服务器:
ZoneType.SANDBOX
- 商业控制台服务器:
ZoneType.REAL
曝露用户特定广告¶
随着 iOS 14.5+ 中引入 ATT(应用追踪透明度),隐私保护得到了加强。因此,只有在用户同意在 ATT 同意弹窗中进行活动追踪的情况下,才能曝露用户特定广告。为了通过曝露用户特定广告来最大化广告收入,有必要创建 IDFA(广告商标识符)消息。 请按照 AdMob 仪表板上的指南创建并发布您的 IDFA 消息。
一旦在 AdMob 仪表板上发布 IDFA 消息,它将在 iOS 14.5+ 中的 Adiz 初始化期间自动显示。在 IDFA 消息窗口中点击“继续”将显示 ATT 同意弹出窗口。
如果用户在 ATT 同意弹窗中点击“允许”,则 IDFA 将被激活,并将显示用户特定的广告。
Note
在欧洲和英国,GDPR同意弹窗会显示给用户。如果用户从未同意GDPR详情,则ATT同意弹窗会在GDPR同意弹窗后立即显示,而不会显示IDFA消息。如果已经同意GDPR详情,通常会显示IDFA消息,然后是ATT同意弹窗。
GDPR同意弹窗显示(欧洲和英国)¶
如果您的游戏面向欧洲和英国(欧洲经济区 & 英国),则必须显示GDPR(通用数据保护条例)同意弹窗。只有当用户的设备IP地址来自欧洲或英国(欧洲经济区 & 英国)时,才会显示GDPR同意弹窗。 Adiz支持Google的UMP(用户 消息 平台)来显示GDPR同意弹窗。
在 AdMob 控制台中创建 GDPR 消息 后,当您 初始化 Adiz 时,GDPR 弹出窗口将显示给来自欧洲和英国的用户。
Warning
即使您针对的是欧洲和英国以外的地区,您也必须在AdMob 控制台中创建GDPR 消息,以便Adiz 的初始化能够正确执行。
创建 GDPR 消息¶
访问 Google AdMob 控制台以创建 GDPR 消息。在创建 GDPR 消息之前,请参考 GDPR 消息创建指南。
在创建GDPR消息后,GDPR同意弹窗将在Adiz初始化期间自动显示。
实施GDPR同意/撤回选项¶
GDPR同意弹出窗口应允许用户随时修改他们的同意。例如,最初不同意GDPR的用户如果希望接收个性化广告,可能会想要同意,反之亦然。为了适应这种情况,开发人员必须实现用户再次同意或撤回先前同意的功能。要实施GDPR同意/撤回功能,请按照以下步骤操作:
- 在您的应用中实现一个按钮 UI,以重新加载 GDPR 同意弹出窗口。
-
在实现 Adiz 的初始化 时,调用
isPrivacyOptionsRequired()
来为来自欧洲和英国的用户显示上述按钮 UI,而在其他情况下不显示。如果来自欧洲和英国的用户按下按钮,调用showPrivacyOptionsForm
以重新加载 GDPR 同意弹出窗口,允许用户随时通过应用中的“管理选项”按钮或类似按钮修改他们的 GDPR 同意详情。下面提供的showPrivacyOptionsForm
方法仅用于说明目的,开发者可以以任何所需的形式实现。using hiveAdiz; public void Initialize() { // ... skipped // 初始化 Adiz Adiz.Initialize(new CommonHandlers.Builder() .OnResult(InitResultCB) .Build()); } private void InitResultCB(AdizError error, string jsonString) { // 初始化完成回调函数 Debug.Log(TAG + "::InitResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage+" json : "+jsonString); if(error.isSuccess()) { bool isPrivacyOptionsRequired = AdizConsentManager.IsPrivacyOptionsRequired(); if(isPrivacyOptionsRequired) { // 显示隐私选项按钮。点击时调用 ShowPrivacyOptionsForm } else { // 隐藏隐私选项按钮 } } } private void ShowPrivacyOptionsForm() { // 调用隐私选项表单 if(AdizConsentManager.IsPrivacyOptionsRequired()) { AdizConsentManager.ShowPrivacyOptionsForm(new CommonHandlers.Builder() .OnResult(CommonResultCB) .Build()); } } private void CommonResultCB(AdizError error, string jsonString) { // 隐私选项表单调用完成回调。无需额外的错误处理 Debug.Log(TAG + "::CommonResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage); }
为未满同意年龄的用户设置 标签 (TFUA)¶
您可以使用Tag来处理居住在欧洲经济区(EEA)、英国(UK)和瑞士的用户,作为有限数据处理的对象,前提是他们未满Consent(TFUA)年龄。在为儿童提供服务的应用中,您可以使用AdizConsentManager.SetUserPrivacySettings
将用户设置为未满同意年龄。尽管欧洲国家之间存在一些差异,但GDPR将16岁以下定义为需要父母同意。必须在执行Adiz.initialize
之前配置under-age-of-consent设置。
Warning
如果同时将GDPR under-age-of-consent 标签 SetTagForUnderAgeOfConsent
和COPPA 面向儿童的处理设置 SetTagForChildDirectedTreatment
设置为 true
,则COPPA 面向儿童的处理设置 SetTagForChildDirectedTreatment
优先。因此,请不要同时将它们都设置为 true
。
Note
当使用 Hive SDK v4 24.2.0 或更高版本以及 Adiz 2.0.1 或更高版本时,Hive SDK 将根据用户的年龄自动为未满同意年龄的用户应用标签。因此,无需调用 AdizConsentManager.SetUserPrivacySettings
。
using hiveAdiz;
public void Initialize() {
bool isTagForUnderAgeOfConsent = false; // 如果用户是未成年人,请更改为 true
PrivacySettings settings = new PrivacySettings.Builder()
.SetTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)
.Build();
AdizConsentManager.SetUserPrivacySettings(settings);
Adiz.Initialize(new CommonHandlers.Builder()
.OnResult(InitResultCB)
.Build());
}
设置GDPR测试设备¶
只有当设备的IP地址来自欧洲或英国时,GDPR同意弹窗才会显示。在开发过程中,您可以通过设置GDPR测试设备强制显示GDPR同意弹窗,而不管设备的IP地址,以便进行测试。请按照以下步骤设置GDPR测试设备。以下内容与在测试设备上显示广告相同
- 初始化 Adiz。此初始化的目的是检查测试设备 ID,因此您无需提前创建 GDPR 同意消息。
-
打印 Android Studio 日志或 Xcode 日志以获取设备 ID。以下日志是一个示例。
安卓:
33BE2250B43518CCDA7DE426D04EE231
在Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
iOS:
B74F6468-1516-467C-99AD-CC5973C5DB52
在要为此设备启用调试模式,请设置: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
-
复制设备 ID。
- 在现有的 Adiz 初始化代码中,在执行
Adiz.initialize
之前添加Adiz.setTestDevice(DEVICE_ID)
。 -
创建 GDPR 同意消息,并重新初始化 Adiz 以确保 GDPR 同意弹出窗口正确显示。
为儿童导向处理设置 COPPA tag¶
根据儿童在线隐私保护法(COPPA),应用程序开发者可以通过设置tagForChildDirectedTreatment(TFCD)来指定在进行广告请求时,Google是否应将内容视为面向儿童的。如果您希望将内容视为面向儿童,必须在执行Adiz.initialize
之前调用AdizConsentManager.SetUserPrivacySettings
。在使用 Adiz与Hive SDK时,面向儿童的处理标签会自动应用,因此不需要额外的设置。
using hiveAdiz;
public void Initialize() {
bool isTagForChildDirectedTreatment = false; // 如果是面向儿童的,改为 true
PrivacySettings settings = new PrivacySettings.Builder()
.SetTagForChildDirectedTreatment(isTagForChildDirectedTreatment)
.Build();
AdizConsentManager.SetUserPrivacySettings(settings);
Adiz.Initialize(new CommonHandlers.Builder()
.OnResult(InitResultCB)
.Build());
}
添加 ad 中介¶
Adiz 可以使用 AdMob 中介投放广告。请按照以下步骤添加 AdMob 中介。
添加AdMob 中介¶
通过遵循下表在AdMob 控制台中集成广告源。
AppLovin | Pangle | Unity Ads | Meta | |
---|---|---|---|---|
步骤 1:设置 | Android iOS | Android iOS | Android iOS | Android iOS |
步骤 2:添加广告源 | Android iOS | Android iOS | Android iOS | Android iOS |
步骤 3 | 添加 Adiz 适配器 |
添加 Adiz 适配器¶
在 Assets/HiveAdiz/Editor/Adiz_DefaultDependencies.xml 中添加库依赖。
<dependencies>
<androidPackages>
<repositories>
<repository>https://repo.maven.apache.org/maven2</repository>
<repository>https://artifact.bytedance.com/repository/pangle/</repository>
</repositories>
<androidPackage spec="com.com2us.android.adiz:hive-adiz:2.0.1"/>
<!-- AppLovin -->
<androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-applovin:2.0.1"/>
<!-- Pangle -->
<androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-pangle:2.0.1"/>
<!-- Unity Ads -->
<androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-unityads:2.0.1"/>
<!-- Meta -->
<androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-meta:2.0.1"/>
</androidPackages>
<iosPods>
<sources>
<source>https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git</source>
</sources>
<iosPod name="HiveAdizUnityPlugin" version="2.0.1"/>
<iosPod name="HiveAdizAdapterAppLovin" version="2.0.1"/>
<iosPod name="HiveAdizAdapterPangle" version="2.0.1"/>
<iosPod name="HiveAdizAdapterUnityAds" version="2.0.1"/>
<iosPod name="HiveAdizAdapterMeta" version="2.0.1"/>
</iosPods>
</dependencies>
要验证Adiz适配器配置是否正确应用,请运行应用程序并检查Ad Inspector屏幕上的配置列表。
Adiz 初始化¶
Adiz的初始化是展示任何类型广告之前的必要步骤。初始化Adiz允许您接收显示广告所需的广告密钥。如果启用了测试模式,您将收到一个测试密钥。如果您使用的是Hive SDK,请在调用AuthV4.setup
后继续进行Adiz初始化。
using hiveAdiz;
public void Start() {
/* omitted */
// To use Adiz callbacks, you need to register AdizCallbackManager as a GameObject.
Adiz.InitPlugin();
}
Adiz.Initialize(new CommonHandlers.Builder()
.OnResult(InitResultCB)
.Build());
// Initialize Callback listener
private void InitResultCB(AdizError error, string jsonString) {
Debug.Log(TAG + "::InitResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage+" json : "+jsonString);
if(error.isSuccess()) {
JSONObject resJsonObject = new JSONObject (jsonString);
JSONObject jsonArray = resJsonObject.GetField ("keys");
if (jsonArray != null && jsonArray.count > 0) {
List interstitialKeyList = new List();
List bannerKeyList = new List();
List nativeKeyList = new List();
List rewardedKeyList = new List();
List rewardedInterstitialKeyList = new List();
List appOpenKeyList = new List();
List jsonList = jsonArray.list;
foreach (JSONObject jsonItem in jsonList) {
bool isDefault = false;
jsonItem.GetField(ref isDefault, "is_default");
// This is an example of constructing a list of keys where is_default is false, in case you want to enter the ad keys directly in the game.
if(isDefault) {
string hiveAdKey = null;
jsonItem.GetField(ref hiveAdKey, "key");
string form = null;
jsonItem.GetField(ref form, "form");
switch (form) {
case "interstitial":
interstitialKeyList.Add(hiveAdKey);
break;
case "banner":
bannerKeyList.Add(hiveAdKey);
break;
case "native":
nativeKeyList.Add(hiveAdKey);
break;
case "rewarded":
rewardedKeyList.Add(hiveAdKey);
break;
case "rewarded_interstitial":
rewardedInterstitialKeyList.Add(hiveAdKey);
break;
case "app_open":
appOpenKeyList.Add(hiveAdKey);
break;
}
}
}
foreach(string hiveAdKey in interstitialKeyList) {
Debug.Log("onSdkInitialize interstitialKeyList "+hiveAdKey);
}
foreach(string hiveAdKey in bannerKeyList) {
Debug.Log("onSdkInitialize bannerKeyList "+hiveAdKey);
}
foreach(string hiveAdKey in nativeKeyList) {
Debug.Log("onSdkInitialize nativeKeyList "+hiveAdKey);
}
foreach(string hiveAdKey in rewardedKeyList) {
Debug.Log("onSdkInitialize rewardedKeyList "+hiveAdKey);
}
foreach(string hiveAdKey in rewardedInterstitialKeyList) {
Debug.Log("onSdkInitialize rewardedInterstitialKeyList "+hiveAdKey);
}
foreach(string hiveAdKey in appOpenKeyList) {
Debug.Log("onSdkInitialize appOpenKeyList "+hiveAdKey);
}
}
}
}
在初始化期间作为回调接收到的 JSON 文件包含广告键的列表。广告键列表的格式如下:
{
"keys":[
{
"mediation_id":5,
"key":"ca-app-pub-3940256099942544/5354046379",
"form":"rewarded_interstitial",
"is_default":true
},
{
"mediation_id":4,
"key":"ca-app-pub-3940256099942544/5224354917",
"form":"rewarded",
"is_default":true
},
{
"mediation_id":3,
"key":"ca-app-pub-3940256099942544/2247696110",
"form":"native",
"is_default":true
},
{
"mediation_id":1,
"key":"ca-app-pub-3940256099942544/1033173712",
"form":"interstitial",
"is_default":true
},
{
"mediation_id":2,
"key":"ca-app-pub-3940256099942544/6300978111",
"form":"banner",
"is_default":true
},
{
"mediation_id":6,
"key":"ca-app-pub-3940256099942544/9257395921",
"form":"app_open",
"is_default":true
}
]
}
在测试模式下初始化时,即使您尚未在 Hive 控制台中注册 AdMob 广告密钥,您仍将收到测试广告密钥的列表。在商业模式下初始化时,您将收到在 Hive 控制台中注册的 AdMob 广告密钥的列表。
对于每种广告类型(form
),一个广告被用作默认广告(广告中"is_default":true
)。当您首次注册任何广告类型时,第一个注册的广告将成为默认广告。创建默认广告的广告实例(initialize()
)时,您不需要输入广告密钥(hiveAdKey
)。要更改默认广告,您必须在Hive 控制台中删除现有的默认广告并注册一个新广告。
广告回调监听器配置¶
通过在创建每个广告实例时实现AdizListener
,您可以根据广告状态的变化接收回调。
名称 | 描述 | 是否必需 |
---|---|---|
.OnAdLoad(OnAdLoadCB) | 广告加载成功 | O |
.OnAdFail(OnAdLoadFailedCB) | 失败(您可以通过 error.errorCode() 和 error.errorMessage() 知道失败的原因) | O |
.OnAdShow(OnAdShowCB) | 广告曝光成功 | O |
.OnAdClick(OnAdClickCB) | 广告点击 | O |
.OnAdPaidEvent(OnAdPaidEventCB) | 广告曝光后接收付费事件的时刻,广告收入信息被传递 | O |
.OnAdClose(OnAdCloseCB) | 广告关闭 * 广告关闭后,要重新曝光同一广告实例,必须再次调用 load() 然后 show() 。 * 如果您不再希望曝光广告,请调用 destroy() 以移除广告实例。 | X |
.OnAdReward(OnAdRewardCB) | 用户在奖励广告(rewarded , rewarded interstitial )曝光后获得奖励的时刻 | X |
private void OnAdLoadCB()
{
// Called when the ad is loaded.
// If the ad load is successful, you should call .show() of the ad instance at the desired moment to display the ad.
Debug.Log(TAG + "::OnAdLoadCB");
// Expose after AdizInterstitial is loaded
// requestShowAd();
}
private void OnAdLoadFailedCB(AdizError error) {
// Called when the ad load fails or the ad exposure fails for another reason.
Debug.Log(TAG + "::OnAdLoadFailedCB errorCode " + error.errorCode);
Debug.Log(TAG + "::OnAdLoadFailedCB errorMessage " + error.errorMessage);
}
private void OnAdShowCB()
{
// Called when the ad is exposed.
Debug.Log(TAG + "::OnAdShowCB");
}
private void OnAdCloseCB()
{
// Called when the ad is closed.
Debug.Log(TAG + "::OnAdCloseCB");
// Remove AdizInterstitial ad after exposure
// requestDestroyAd();
}
private void OnAdClickCB()
{
// Called when the ad is clicked.
Debug.Log(TAG + "::OnAdClickCB");
}
private void OnAdRewardCB(RewardItem rewardItem)
{
// Called when a reward is granted for watching an ad in rewarded or rewarded interstitial ads.
Debug.Log(TAG + "::OnAdRewardCB:: rewardItem.itemType : " + rewardItem.getItemType() + " rewardItem.itemAmount : " + rewardItem.getItemAmount());
// Delivered only in rewarded, rewardedInterstitial ads
}
private void OnAdPaidEventCB(AdRevenueData adRevenueData)
{
// Called when revenue is generated for the ad.
Debug.Log(TAG + "::OnAdPaidEventCB:: adRevenueData.revenue : " + adRevenueData.getRevenue() + " adRevenueData.currency : " + adRevenueData.getCurrency());
}
错误代码¶
从 Adiz.Initialize
和 AdizListener
接收到的 OnAdFail()
的 AdizError
错误代码和消息如下:
常见代码¶
数字 | 案例 | 解释 |
---|---|---|
0 | 成功 | 成功 |
Adiz 错误代码¶
数字 | 案例 | 解释 |
---|---|---|
-1 | InvalidParam | 无效参数 |
-2 | NotSupported | 不支持 |
-3 | InProgress | 处理进行中 |
-4 | Network | 网络错误 |
-5 | NeedInitialize | 需要初始化 |
-6 | ResponseFail | 响应失败 |
-7 | Timeout | 网络超时 |
-99 | Unknown | 未知错误 |
广告平台错误代码¶
编号 | 案例 | 说明 |
---|---|---|
-101 | 需要加载 | 广告未加载 |
-102 | 需要重新加载 | 由于广告曝光时间到期需要重新加载 |
-103 | 库存不足 | 调解响应成功,但由于库存不足未填充广告 |
-104 | 缺少AppId | 调解请求的AppID错误 |
-105 | 内部网络错误 | 与调解网络相关的错误 |
-106 | 无效的单元ID | 无效的单元ID |
-107 | 调解未填充 | 调解适配器无法处理广告请求 |
-108 | 已加载 | 已处于加载状态 |
-109 | 无法请求广告 | 无法请求广告 |
-201 | GDPR同意错误 | GDPR同意错误 |
-202 | 不需要隐私选项 | 无需显示或无法显示GDPR同意弹出窗口 |
广告展示与终止¶
要展示和终止广告,请按照以下步骤操作:
- 从广告类创建广告实例,以显示您想要展示的每种广告类型。如果您想要展示的广告不是默认广告,您必须输入从初始化中获得的广告密钥。如果您不输入广告密钥(
hiveAdKey
),将创建一个默认广告实例。 - 加载(
load()
)您想要展示的广告。 - 显示(
show()
)已加载的广告。要重新显示广告,您必须再次调用load()
,然后调用show()
。 - 要终止广告,请调用
destroy()
。
插页广告¶
全屏广告占据整个屏幕。
// Create AdizInterstitial Instance
private AdizInterstitial InterstitialAd = null;
public void requestInitAd(string interstitialAdKey) {
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdClick(OnAdClickCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(interstitialAdKey)) {
// Initialize Default AdizInterstitial Instance (AdEventHandlers)
InterstitialAd = AdizInterstitial.Initialize(eventHandlers);
} else {
// Initialize AdizInterstitial Instance (hiveAdKey, AdEventHandlers)
InterstitialAd = AdizInterstitial.Initialize(interstitialAdKey, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizInterstitial
if(InterstitialAd != null) InterstitialAd.Load();
}
public void requestShowAd() {
// Show AdizInterstitial
if(InterstitialAd != null) InterstitialAd.Show();
}
public void requestDestroyAd() {
// Destroy AdizInterstitial
if(InterstitialAd != null) InterstitialAd.Destroy();
InterstitialAd = null;
}
横幅广告 (Banner)¶
横幅广告显示特定尺寸的横幅。横幅广告不会接收 OnAdClose()
回调。因此,您必须从其他位置调用 destroy()
来终止广告。
BannerSize
遵循标准横幅尺寸。
尺寸点(宽 x 高) | 描述 | 支持的设备 | BannerSize 常量 |
---|---|---|---|
320x50 | 横幅 | 手机和平板 | BannerSize.NORMAL |
320x100 | 大横幅 | 手机和平板 | BannerSize.MEDIUM |
300x250 | IAB 中型矩形 | 手机和平板 | BannerSize.LARGE |
468x60 | IAB 全尺寸横幅 | 平板 | BannerSize.FULL |
PositionType
是顶部或底部。默认是底部。
对齐方式 | 描述 | 位置类型常量 |
---|---|---|
顶部对齐 | 指定屏幕顶部的对齐方式(对于 iOS,基于 SafeArea 指定顶部对齐) | PositionType.TOP |
底部对齐(默认) | 指定屏幕底部的对齐方式(对于 iOS,基于 SafeArea 指定底部对齐) | PositionType.BOTTOM |
// Create AdizBanner Instance
private AdizBanner BannerAd = null;
public void requestInitAd(string bannerAdKey) {
// Set banner size
private BannerSize bannerSize = BannerSize.NORMAL;
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdClick(OnAdClickCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(bannerAdKey)) {
// Initialize Default AdizBanner Instance (AdEventHandlers)
BannerAd = AdizBanner.Initialize(bannerSize, eventHandlers);
} else {
// Initialize AdizBanner Instance (hiveAdKey, AdEventHandlers)
BannerAd = AdizBanner.Initialize(bannerAdKey, bannerSize, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizBanner
if(BannerAd != null) BannerAd.Load();
}
public void requestShowAd() {
// Set position type
private PositionType bannerPosition = PositionType.TOP;
// Show AdizBanner
if(BannerAd != null) BannerAd.Show(bannerPosition);
}
public void requestDestroyAd() {
// Destroy AdizBanner
if(BannerAd != null) BannerAd.Destroy();
BannerAd = null;
}
原生广告 (Native)¶
原生广告显示特定尺寸的原生模板。原生广告针对竖屏进行了优化,因此建议在竖屏游戏(竖屏游戏)中使用它们。原生广告不会接收 OnAdClose()
回调。因此,您必须在其他位置调用 destroy()
来终止广告。
目前,模板支持 small
或 medium
尺寸。
尺寸点(宽 x 高) | 模板 | 对齐方式 | BannerSize 常量 |
---|---|---|---|
355x91(纵横比调整) | 小尺寸 | 顶部 / 底部 | BannerSize.NORMAL |
355x370(纵横比调整) | 中尺寸 | 中心(固定) | BannerSize.MEDIUM, BannerSize.LARGE, BannerSize.FULL |
在small
模板中,PositionType
可以是顶部或底部,默认是底部。
对齐 | 描述 | PositionType 常量 |
---|---|---|
顶部对齐 | 指定对齐到屏幕顶部(iOS 对齐到 SafeArea 的顶部) | PositionType.TOP |
底部对齐(默认) | 指定对齐到屏幕底部(iOS 对齐到 SafeArea 的底部) | PositionType.BOTTOM |
medium
模板不允许选择对齐方式,默认情况下是居中对齐的。
// Create AdizNative Instance
private AdizNative NativeAd = null;
public void requestInitAd(string nativeAdKey) {
// Set banner size
private BannerSize bannerSize = BannerSize.NORMAL;
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdClick(OnAdClickCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(nativeAdKey)) {
// Initialize Default AdizNative Instance (AdEventHandlers)
NativeAd = AdizNative.Initialize(bannerSize, eventHandlers);
} else {
// Initialize AdizNative Instance (hiveAdKey, AdEventHandlers)
NativeAd = AdizNative.Initialize(nativeAdKey, bannerSize, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizNative
if(NativeAd != null) NativeAd.Load();
}
public void requestShowAd() {
// Set position type
private PositionType bannerPosition = PositionType.TOP;
// Show AdizNative
if(NativeAd != null) NativeAd.Show(bannerPosition);
}
public void requestDestroyAd() {
// Destroy AdizNative
if(NativeAd != null) NativeAd.Destroy();
NativeAd = null;
}
奖励广告 (Rewarded)¶
奖励广告是指用户在观看广告一定时间后获得奖励的广告。一旦奖励分发,您将通过OnAdReward()
回调接收奖励项目信息。
// Create AdizRewarded Instance
private AdizRewarded RewardVideoAd = null;
public void requestInitAd(string rewardedAdKey) {
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdClick(OnAdClickCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdReward(OnAdRewardCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(rewardedAdKey)) {
// Initialize Default AdizRewarded Instance (AdEventHandlers)
RewardVideoAd = AdizRewarded.Initialize(eventHandlers);
} else {
// Initialize AdizRewarded Instance (hiveAdKey, AdEventHandlers)
RewardVideoAd = AdizRewarded.Initialize(rewardedAdKey, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizRewarded
if(RewardVideoAd != null) RewardVideoAd.Load();
}
public void requestShowAd() {
// Show AdizRewarded
if(RewardVideoAd != null) RewardVideoAd.Show();
}
public void requestDestroyAd() {
// Destroy AdizRewarded
if(RewardVideoAd != null) RewardVideoAd.Destroy();
RewardVideoAd = null;
}
奖励插页广告(Rewarded interstitial)¶
奖励插页广告是用户在观看广告一定时间后获得奖励的插页广告。一旦奖励分发,您将通过 OnAdReward()
回调接收奖励项目的信息。
// Create AdizRewardedInterstitial Instance
private AdizRewardedInterstitial RewardedInterstitialAd = null;
public void requestInitAd(string rewardedInterstitialAdKey) {
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdClick(OnAdClickCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdReward(OnAdRewardCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(rewardedInterstitialAdKey)) {
// Initialize Default AdizRewardedInterstitial Instance (AdEventHandlers)
RewardedInterstitialAd = AdizRewardedInterstitial.Initialize(eventHandlers);
} else {
// Initialize AdizRewardedInterstitial Instance (hiveAdKey, AdEventHandlers)
RewardedInterstitialAd = AdizRewardedInterstitial.Initialize(rewardedInterstitialAdKey, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizRewardedInterstitial
if(RewardedInterstitialAd != null) RewardedInterstitialAd.Load();
}
public void requestShowAd() {
// Show AdizRewardedInterstitial
if(RewardedInterstitialAd != null) RewardedInterstitialAd.Show();
}
public void requestDestroyAd() {
// Destroy AdizRewardedInterstitial
if(RewardedInterstitialAd != null) RewardedInterstitialAd.Destroy();
RewardedInterstitialAd = null;
}
应用打开广告 (appopen)¶
应用打开广告在应用状态从后台切换到前台时显示,使用预加载的 (load()
) 广告。如果在广告加载后 3 小时调用 show()
,广告将在显示之前自动重新加载。一旦广告至少显示过一次,它将不会自动再次加载。
// Create AdizAppOpen Instance
private AdizAppOpen AppOpenAd = null;
public void requestInitAd(string appOpenAdKey) {
AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
.OnAdLoad(OnAdLoadCB)
.OnAdShow(OnAdShowCB)
.OnAdClose(OnAdCloseCB)
.OnAdFail(OnAdLoadFailedCB)
.OnAdClick(OnAdClickCB)
.OnAdPaidEvent(OnAdPaidEventCB)
.Build();
if(string.IsNullOrEmpty(appOpenAdKey)) {
// Initialize Default AdizAppOpen Instance (AdEventHandlers)
AppOpenAd = AdizAppOpen.Initialize(eventHandlers);
} else {
// Initialize AdizAppOpen Instance (hiveAdKey, AdEventHandlers)
AppOpenAd = AdizAppOpen.Initialize(appOpenAdKey, eventHandlers);
}
}
public void requestLoadAd() {
// Load AdizAppOpen
if(AppOpenAd != null) AppOpenAd.Load();
}
public void requestShowAd() {
// Show AdizAppOpen
Debug.Log("[appOpenAd] appOpenAd don't request Show");
}
public void requestDestroyAd() {
// Destroy AdizAppOpen
if(AppOpenAd != null) AppOpenAd.Destroy();
AppOpenAd = null;
}
卸载¶
要卸载 Adiz,请从您的 Unity 项目中删除以下文件夹:
- 资产/HiveAdiz
- 资产/HiveAdiz_示例