跳转至

Unity

Adiz Unity

Adiz Unity是由Hive SDK提供的Unity广告模块,使使用AdMob提供的广告功能变得更加容易。Adiz Unity提供的广告类型如下:

  • 插页广告
  • 横幅广告
  • 原生广告
  • 奖励广告
  • 奖励插页广告
  • 应用打开广告

要安装和使用 Adiz Unity,请按照以下指南顺序进行。

安装或更新

  1. 配置 Adiz Unity 开发环境
  2. 这里 下载最新版本的 Adiz 并解压。
  3. 在 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时,AdizProguard规则已经包含在Adiz模块中。因此,无需将Proguard规则添加到您的项目中。

检查您当前的 Gradle 版本。对于稳定的 Android 构建,Gradle 版本应为 6.7.1 或更高,Gradle 插件版本应为 4.2.0 或更高。以下是如何更改 Gradle 版本和 Gradle 插件版本的方法:

  1. 使用自定义基础 Gradle 模板。

    • 检查构建设置 > 项目设置 > 玩家 > 自定义基础 Gradle 模板。
    • 将创建 Assets/Plugins/Android/baseProjectTemplate.gradle。
  2. 更改 Gradle 插件版本。 打开文件 Assets/Plugins/Android/baseProjectTemplate.gradle* 并将版本更改为 com.android.tools.build:gradle:4.2.0

  3. 下载所需版本的 Gradle,然后解压到您想要的路径。
  4. 在 Unity 中更改 Gradle 安装路径。
    • 取消选中 Preferences > External Tools > Gradle Installed with Unity。
    • 设置您解压 Gradle 的路径。
  5. 在构建之前,请检查 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 以自动设置它。

    GADApplicationIdentifier
    ca-app-pub-XXXXX~YYYYY

此外,对于 iOS 14 及以上版本,请参考 更新您的 info.plist 指南,将 SKAdNetwork 列表添加到 Info.plist 文件中。可以使用 Assets/HiveAdiz/Editor/AdizPostProcess.cs 文件在构建过程中自动将其添加到 Info.plist 文件中。

设置测试广告

Adiz 允许您以两种方式显示测试广告。

  1. 启用测试模式:仅显示由 AdMob 发布的测试广告。
  2. 注册测试设备并显示广告:为了测试目的显示真实广告。注册设备以显示测试广告,以确保在测试期间不会发生无效流量。

启用测试模式

在开发阶段,启用测试模式以防止在点击测试广告时向广告客户收费。当测试模式被激活时,仅显示测试广告。在测试模式下,您可以在 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);

在测试设备上显示广告

在以下情况下,需要注册测试设备以显示测试广告:

  • 当测试在 Hive 控制台中注册的 AdMob 广告密钥是否正常工作时
  • 当编写 GDPR 消息 并需要验证 GDPR 同意弹出窗口是否正常工作时
  • 当运行 广告检查器 以分析和调试广告请求时

如果您在未注册测试设备的情况下测试显示真实广告,可能会被视为无效流量,从而导致您的 AdMob 账户被封锁,广告将不再显示。当您注册测试设备时,显示广告时将显示“测试模式”或“测试广告”(针对原生广告)。确保在商业发布时禁用测试设备。

横幅广告、插页广告或激励广告

原生广告

要注册测试设备,首先识别测试设备ID。在Android上,可以使用以下两种方法识别测试设备ID(例如,33BE2250B43518CCDA7DE426D04EE231):

  1. 调用 Adiz.Initialize() 后检查 Logcat 日志: 使用新的 ConsentDebugSettings.Builder().addTestDeviceHashedI ("33BE2250B43518CCDA7DE426D04EE231") 将其设置为调试设备。
  2. 调用 initialize()load() 后检查 Logcat 日志,无论广告类型如何

Adiz.Initialize(): I/Ads: 使用 RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")) 来获取此设备上的测试广告。

在 iOS 上,测试设备 ID(例如,B74F6468-1516-467C-99AD-CC5973C5DB52)可以通过以下两种方法识别:

  1. 调用 Adiz.Initialize() 后检查 Logcat 日志: 要为此设备启用调试模式,请设置: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
  2. 调用 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。

    Adiz.SetAppId(appId);

Hive 控制台服务器配置

配置您想要使用的 Hive 控制台服务器。默认值为 REAL。即使您使用商业服务器,如果启用了测试模式,也只会显示测试广告。

  • 测试控制台服务器: ZoneType.TEST
  • 沙盒控制台服务器: ZoneType.SANDBOX
  • 商业控制台服务器: ZoneType.REAL
    ZoneType selectZone = ZoneType.REAL;    
    Adiz.SetZone((int)selectZone);

曝露用户特定广告

随着 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(通用数据保护条例)同意弹窗。只有当用户的设备IP地址来自欧洲或英国欧洲经济区 & 英国)时,才会显示GDPR同意弹窗。 Adiz支持GoogleUMP用户 消息 平台)来显示GDPR同意弹窗。

AdMob 控制台中创建 GDPR 消息 后,当您 初始化 Adiz 时,GDPR 弹出窗口将显示给来自欧洲和英国的用户。

Warning

即使您针对的是欧洲和英国以外的地区,您也必须在AdMob 控制台中创建GDPR 消息,以便Adiz 的初始化能够正确执行。

创建 GDPR 消息

访问 Google AdMob 控制台以创建 GDPR 消息。在创建 GDPR 消息之前,请参考 GDPR 消息创建指南

在创建GDPR消息后,GDPR同意弹窗将在Adiz初始化期间自动显示。

实施GDPR同意/撤回选项

GDPR同意弹出窗口应允许用户随时修改他们的同意。例如,最初不同意GDPR的用户如果希望接收个性化广告,可能会想要同意,反之亦然。为了适应这种情况,开发人员必须实现用户再次同意或撤回先前同意的功能。要实施GDPR同意/撤回功能,请按照以下步骤操作:

  1. 在您的应用中实现一个按钮 UI,以重新加载 GDPR 同意弹出窗口。
  2. 在实现 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)和瑞士的用户,作为有限数据处理的对象,前提是他们未满ConsentTFUA)年龄。在为儿童提供服务的应用中,您可以使用AdizConsentManager.SetUserPrivacySettings将用户设置为未满同意年龄。尽管欧洲国家之间存在一些差异,但GDPR将16岁以下定义为需要父母同意。必须在执行Adiz.initialize之前配置under-age-of-consent设置。

Warning

如果同时将GDPR under-age-of-consent 标签 SetTagForUnderAgeOfConsentCOPPA 面向儿童的处理设置 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测试设备。以下内容与在测试设备上显示广告相同

  1. 初始化 Adiz。此初始化的目的是检查测试设备 ID,因此您无需提前创建 GDPR 同意消息。
  2. 打印 Android Studio 日志或 Xcode 日志以获取设备 ID。以下日志是一个示例。

    安卓: 33BE2250B43518CCDA7DE426D04EE231Use 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]

  3. 复制设备 ID。

  4. 在现有的 Adiz 初始化代码中,在执行 Adiz.initialize 之前添加 Adiz.setTestDevice(DEVICE_ID)
  5. 创建 GDPR 同意消息,并重新初始化 Adiz 以确保 GDPR 同意弹出窗口正确显示。

        using hiveAdiz;
    
        public void Initialize() {
    
                // 设置GDPR测试设备
                Adiz.SetTestDevice("33BE2250B43518CCDA7DE426D04EE231");
    
                Adiz.Initialize(new CommonHandlers.Builder()
                                                                                                .OnResult(InitResultCB)
                                                                                                .Build());
        }
    

为儿童导向处理设置 COPPA tag

根据儿童在线隐私保护法(COPPA),应用程序开发者可以通过设置tagForChildDirectedTreatmentTFCD)来指定在进行广告请求时,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.InitializeAdizListener 接收到的 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同意弹出窗口

广告展示与终止

要展示和终止广告,请按照以下步骤操作:

  1. 从广告类创建广告实例,以显示您想要展示的每种广告类型。如果您想要展示的广告不是默认广告,您必须输入从初始化中获得的广告密钥。如果您不输入广告密钥(hiveAdKey),将创建一个默认广告实例。
  2. 加载(load())您想要展示的广告。
  3. 显示(show())已加载的广告。要重新显示广告,您必须再次调用load(),然后调用show()
  4. 要终止广告,请调用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;
}

横幅广告显示特定尺寸的横幅。横幅广告不会接收 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() 来终止广告。

目前,模板支持 smallmedium 尺寸。

尺寸点(宽 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_示例