跳转至

iOS 版

Adiz iOS

Adiz iOS 是一个为 Hive 平台提供的 iOS 广告模块,旨在简化使用 AdMob 提供的广告曝光功能。Adiz iOS 提供的广告类型如下。

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

要安装和使用 Adiz iOS,请按照下面的指南进行。

准备

设置Adiz iOS 开发环境

安装

GADApplicationIdentifier 键添加到您的 Xcode 项目的 Info.plist 文件中,并将 AdMobId 值(格式为 ca-app-pub-XXXXX~YYYYY)作为该键的值输入。

    <key>GADApplicationIdentifier</key>
    <string>ca-app-pub-XXXXX~YYYYY</string>

 

此外,对于 iOS 14 及以上版本,请参阅更新您的 info.plist指南,以将 SKAdNetwork 列表添加到Info.plist文件中。

 

之后,将以下内容添加到项目的 CocoaPods 配置(Podfile)中。

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git'
platform :ios, '12.0'

target 'UnityFramework' do
  pod 'HiveAdiz', '3.0.0'
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

 

使用 $pod install 应用 CocoaPod 设置。

测试广告设置

Adiz 可以以两种方式显示测试广告。

  1. 激活测试模式:仅显示由 AdMob 发布的测试广告
  2. 注册测试设备后显示广告:显示实际广告以进行测试,确保没有无效流量发生,并通过注册将显示测试广告的设备来继续

激活测试模式

在开发阶段,激活测试模式,以便点击测试广告不会向广告主收费。当测试模式被激活时,只会显示测试广告。在测试模式下,即使在控制台中未输入 AdMob 广告密钥,也会显示测试广告。在商业发布期间禁用测试模式。

有两种方法可以激活测试模式。

  • 在 Hive 控制台中注册测试设备后,将其设置为 演示广告(推荐):
    请参考控制台指南的 测试设备管理 部分。
  • 使用 Adiz 类的 setTestMode() 方法:
    参考下面的 示例代码
Note

在开发阶段未处于测试模式时,过多点击广告可能被视为无效流量,您的 AdMob 账户可能会被报告,从而阻止广告显示。

使用 Adiz.setTestMode() 方法

import HiveAdiz

// 激活测试模式。注释掉下面的行以进行生产部署。
Adiz.setTestMode(true)

// 激活 Adiz 模块日志。日志应仅在测试模式下使用。对于生产部署,请注释掉下面的行。
Adiz.setLogEnable(true)
#import <HiveAdiz/HiveAdiz-Swift.h> 

// 激活测试模式。注释掉下面的行以进行生产部署。
[Adiz setTestMode: true];

// 激活 Adiz 模块日志记录。日志记录仅应在测试模式下使用。对于生产部署,请注释掉下面的行。
[Adiz setLogEnable: true];

测试设备广告曝光

在以下情况下,您需要注册一个测试设备以显示测试广告。

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



<

在测试设备上显示广告有两种方式。

  • 在 Hive 控制台中注册测试设备后,将其设置为 使用广告单元 ID(推荐):
    请参考控制台指南中的 管理测试设备 内容。

  • 使用Adiz类的setTestDevice()方法:
    请参阅下面的示例代码。。

Note

如果您进行测试而未注册测试设备,实际广告可能会被视为无效流量,您的 AdMob 账户可能会被封锁,从而阻止进一步的广告曝光。当您注册测试设备时,在广告曝光期间将显示“测试模式”或“测试广告”(原生广告)。在商业分发期间,您必须停用测试设备。

 

横幅、全屏广告或奖励广告

 

原生广告

 

使用 Adiz.setTestDevice() 方法

要注册测试设备,您首先需要检查测试设备 ID。测试设备 ID(例如:B74F6468-1516-467C-99AD-CC5973C5DB52)可以通过以下两种方式确认。

  1. Adiz.Initialize() 调用并检查 Logcat 日志:
    要为此设备启用调试模式,请设置: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
    
  2. 在调用 Adiz.Initialize() 之后,无论广告类型如何,在调用 initialize()load() 之后检查 Logcat 日志:
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ "B74F6468-1516-467C-99AD-CC5973C5DB52" ]
    

 

检查测试设备 ID 后,在现有的 Hive Adiz 初始化代码中执行 Adiz.initialize 之前,添加行 Adiz.SetTestDevice(DEVICE_ID)。将复制的测试设备 ID 输入到 DEVICE_ID 中。

 

func setTestDevice(testId: String) {
        Adiz.setTestDevice(testId)
}
- (void)setTestDevice: (NSString *)testId {
        [Adiz setTestDevice: testId];
}


广告检查器使用

广告检查器是一个应用内叠加工具,实时分析在测试设备上请求和显示实际广告的过程。它会告知您加载广告所需的时间,并提供任何显示失败的原因。您还可以指定特定的广告网络,以检查广告是否正确显示,如果存在问题,您可以在代码级别进行调试。所有这些都是与广告检查器用户界面结合完成的。它包含在 iOS 的 Google Mobile Ads SDK 版本 7.68.0 及以上版本中,可以通过调用 AdizDeveloperTool.OpenAdInspector 使用。

 

要使用广告检查器,必须设置测试设备上的广告曝光

func openAdInspector(viewController: UIViewController) {
        AdizDeveloperTool.openAdInspector(viewController)
}
- (void)openAdInspector: (UIViewController *)viewController {
        [AdizDeveloperTool openAdInspector: viewController];
}

Adiz AppID 设置

设置您在 Hive 控制台 AppCenter 中注册的 Adiz AppID。如果未设置,将使用 Bundle ID。

Adiz.setAppId(appId)
[Adiz setAppId: appId];

Hive 控制台服务器配置

设置 Hive 控制台服务器以供使用。默认值是 real。即使您使用生产服务器,启用测试模式也只会显示测试广告。

  • Hive 测试控制台服务器: AdizZoneType.test
  • Hive 沙盒控制台服务器: AdizZoneType.sandbox
  • Hive 生产控制台服务器: AdizZoneType.real
Adiz.setZone(AdizZoneType.real)
[Adiz setZone: AdizZoneTypeReal];

用户特定广告曝光

随着在 iOS 14.5+ 中引入的 ATT(应用追踪透明度),隐私得到了加强。因此,只有在用户同意在 ATT 同意弹窗中进行活动追踪的情况下,才能显示用户特定的广告。为了通过显示用户特定的广告来最大化广告收入,您需要编写 IDFA(广告商标识符)消息。

Google AdMob 控制面板上撰写并发布 IDFA 消息,如下所示。

您在编写 IDFA 消息时可以参考下面的指南。

发布消息的示例如下。

在写入并发布IDFA消息后,设置用户跟踪访问权限。按照以下步骤将键添加到Info.plist

  1. 在 Xcode 项目窗口的项目导航器中选择您的项目。
  2. 从 TARGETS 列表中选择您的应用。
  3. 点击 Info 选项卡。
  4. 在 Info 选项卡中点击自定义 iOS 目标属性项。
  5. 在自定义 iOS 目标属性列表中右键点击。
  6. 点击添加行菜单。
  7. 在键字段中输入 NSUserTrackingUsageDescription,并在值字段中添加 Localization file > Base.Iproj folder > InfoPlist.strings 中指定的值。

 

接下来,写一条消息,请求来自多语言配置文件中指定的应用用户的权限批准(常规设置 > 访问权限请求设置)。如果您不输入权限批准请求弹出消息,关于用户访问权限的额外说明指南将缺失,从而导致应用审核时被拒绝。

 

如果您已经完成到此步骤,ATT 同意弹出窗口将在 Adiz 初始化 期间自动显示。当用户在 ATT 同意弹出窗口上点击“允许”时,IDFA 将被激活,并显示个性化广告。

如果游戏面向欧洲和英国(欧洲经济区和英国),则必须显示 GDPR(通用数据保护条例)同意弹窗。只有当用户的设备 IP 地址来自欧洲和英国(欧洲经济区和英国)时,才会显示 GDPR 同意弹窗。Adiz 通过 Google UMP(用户消息平台)支持显示 GDPR 同意弹窗。在 AdMob 控制台中创建 GDPR 消息后,初始化 Adiz 以向来自欧洲和英国的用户显示 GDPR 弹窗。

Warning

当目标地区在欧洲和英国以外时,例如,如果您计划仅在国内提供服务,则可以跳过GDPR同意弹出窗口曝光(欧洲,英国)步骤,并使用Adiz.initializeForNonGDPR()方法继续初始化。
如果您使用Adiz.initialize()方法进行初始化,则必须在AdMob控制台中创建GDPR消息,以便Adiz初始化正常进行。

Warning

如果您正在使用 Hive SDK,则必须在完成 Hive Adiz 的初始化后运行 AuthV4.setup。如果在显示 ATT(应用跟踪透明度)同意通知后出现 GDPR 同意屏幕,您的应用可能会在 Apple 应用审核期间被拒绝。

编写 GDPR 消息

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

在起草GDPR消息时,您必须将希望使用的调解添加到广告合作伙伴列表中。
以下是添加调解的方法。

1) 在 Google AdMob 控制面板中,转到 隐私与消息 > 欧洲法规 > 设置 选项卡,然后点击 '广告合作伙伴审核 > 自定义广告合作伙伴' 的编辑图标。 2) 检查所有根据 GDPR 认证的 Google 中介合作伙伴以批量添加,或仅选择所需的中介合作伙伴并点击 添加

如果您已编写GDPR消息,当Adiz初始化时,GDPR同意弹出窗口将自动出现。

GDPR同意/撤回功能的实现

GDPR同意弹窗中的项目必须为用户提供随时修改其同意状态的能力。例如,用户可能最初没有同意GDPR,但可能希望再次同意以查看个性化广告;或者相反,用户可能最初同意了GDPR,但可能不再希望提供个人信息并希望撤回其同意。为了解决这些情况,应用开发者必须实现允许用户重新同意每个项目或撤回其现有同意的功能。要实现GDPR同意/撤回功能,请按照以下步骤进行。

  1. 在应用中实现一个按钮 UI,可以重新打开 GDPR 同意弹窗。
  2. 在实现 Adiz 初始化 时,调用 isPrivacyOptionsRequired() 来向来自欧洲和英国的用户显示按钮 UI,而在其他情况下不显示。如果来自欧洲或英国的用户点击按钮,调用 showPrivacyOptionsForm 重新打开 GDPR 同意弹窗。这允许用户随时通过按下应用中的“管理选项”按钮来修改他们对 GDPR 细节的同意。下面的 showPrivacyOptionsForm 是一个为了示例目的而任意实现的方法,开发者可以根据需要更改实现。
import HiveAdiz

func initialize(_ appId: String) {
        // ...
        // isPrivacyOptionsRequired is default false
        targetViewController.showPrivacyFormButton.isEnabled = AdizConsentManager.isPrivacyOptionsRequired() 

        // HiveAdiz 初始化
        Adiz.initialize(targetViewController) { error, json in
                // ...
                // showPrivacyOptionsForm 按钮启用检查
                targetViewController.showPrivacyFormButton.isEnabled = AdizConsentManager.isPrivacyOptionsRequired()
                // ...
        }
} 

func showPrivacyOptionsForm(_ targetViewController: UIViewController) {
        // 显示GDPR表单
        if AdizConsentManager.isPrivacyOptionsRequired() {
        AdizConsentManager.showPrivacyOptionsForm(targetViewController) { error in
                        // 不需要进行任何错误处理。
                }
        }
}
        #import <HiveAdiz/HiveAdiz-Swift.h>

        - (void)initialize: (NSString *)appId {
                // ...
                // isPrivacyOptionsRequired is default false
                targetViewController.showPrivacyFormButton.enabled = [AdizGDPRManager isPrivacyOptionsRequired];

                // HiveAdiz 初始化   
                [Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
                        // ...
                        // 显示隐私选项表单按钮启用检查
                        targetViewController.showPrivacyFormButton.enabled = [AdizConsentManager isPrivacyOptionsRequired];
                        // ...
                }];
        }

        - (void)showPrivacyOptionsForm: (UIViewController*) targetViewController {
                // 显示GDPR表单
                if ([AdizConsentManager isPrivacyOptionsRequired]) {
                        [AdizConsentManager showPrivacyOptionsForm: targetViewController handler:^(AdizError *error) {
                                // 不需要进行任何错误处理。
                        }];
                }
        }

为GDPR同意年龄以下的用户设置标签 (TFUA)

您可以使用未成年同意标签(TFUA)将居住在欧洲经济区(EEA)、英国和瑞士的用户视为有限数据处理的对象,以便在进行广告请求时使用。对于面向儿童的应用,您可以使用 AdizConsentManager.SetUserPrivacySettings 将用户设置为未满同意年龄。尽管各欧洲国家之间存在一些差异,GDPR 将需要父母同意的年龄定义为16岁以下。未成年同意设置必须在执行 Adiz.initialize 之前配置。

Warning

同时将GDPR同意年龄标签setTagForUnderAgeOfConsent和COPPA儿童目标设置setTagForChildDirectedTreatment都设置为true将导致COPPA儿童目标设置setTagForChildDirectedTreatment优先。因此,请不要同时将它们都设置为true并同时使用。

Note

Hive SDK v4 24.2.0 或更高版本,与 Adiz 2.0.1 或更高版本一起使用时,Hive SDK 的同意年龄设置将自动适用于低于同意年龄的用户。

然而,如果用户在执行 Adiz.initialize 之前直接调用 AdizConsentManager.setUserPrivacySettings API,则 Hive SDK 定义的同意年龄设置将不适用,并且在 AdizConsentManager.setUserPrivacySettings API 调用期间设置的值将优先考虑。

 

func initialize(_ appId: String) {
    bool isTagForUnderAgeOfConsent = false // Change to true if underage


    let privacySet = PrivacySettings.Builder()
        .setTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)

    AdizConsentManager.setUserPrivacySettings(privacySet.build())

    // HiveAdiz 初始化
    Adiz.initialize(targetViewController) { error, json in
        // ...
    }
}
- (void)initialize: (NSString *)appId {
    bool isTagForUnderAgeOfConsent = false; // Change to true if underage


    隐私设置构建器* privacySet = [[隐私设置构建器 alloc] init];
    privacySet = [builder setTagForUnderAgeOfConsent: isTagForUnderAgeOfConsent];

    [AdizConsentManager setUserPrivacySettings: [privacySet build]];

    // HiveAdiz 初始化
    [Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
        // ...
    }];
}

GDPR 测试设备设置

GDPR 同意弹窗仅在设备的 IP 地址来自欧洲或英国时显示。在开发阶段,可以强制显示 GDPR 同意弹窗,而不考虑 IP 地址,以测试弹窗的显示。为此,您需要设置一个 GDPR 测试设备。请按照以下步骤设置 GDPR 测试设备。

  1. 通过初始化来初始化Adiz。这是一个初始化步骤,用于检查测试设备ID,无需编写GDPR同意消息。
  2. 检查调试日志,以确认设备ID的消息。下面的消息是一个示例。

    要为此设备启用调试模式,请设置:UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]

    检查消息中的设备ID(示例:B74F6468-1516-467C-99AD-CC5973C5DB52)。

  3. 复制设备ID。
  4. 在现有的Adiz初始化代码中,在执行Adiz.initialize之前添加Adiz.setTestDevice(DEVICE_ID)
  5. 编写GDPR同意消息并重新初始化Adiz,以确保GDPR同意弹出窗口正确显示。
func initialize(_ appId: String) {
    // ...
    // 在 Adiz.initialize 之前设置 TestDevice。示例 @"B74F6468-1516-467C-99AD-CC5973C5DB52"
    Adiz.setTestDevice("B74F6468-1516-467C-99AD-CC5973C5DB52")

    // HiveAdiz 初始化
    Adiz.initialize(targetViewController) { error, json in
            // ...
    }
}
- (void)initialize: (NSString *)appId {
    // ...
    // 在 Adiz.initialize 之前设置 TestDevice。示例 @"B74F6468-1516-467C-99AD-CC5973C5DB52"
    [Adiz setTestDevice: @"B74F6468-1516-467C-99AD-CC5973C5DB52"];

    // HiveAdiz 初始化
    [Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
            // ...
    }];
}

COPPA儿童导向处理标签设置

根据儿童在线隐私保护法案(COPPA),应用程序开发者可以通过在广告请求时使用儿童导向处理标签设置(tagForChildDirectedTreatment, TFCD)来指定Google是否应将内容视为儿童导向。如果您希望将其视为儿童导向,必须在执行Adiz.initialize之前调用AdizConsentManager.SetUserPrivacySettings。在使用Adiz与Hive SDK时,儿童导向处理标签会自动应用,因此不需要额外的设置。

func initialize(_ appId: String) {
        bool isTagForChildDirectedTreatment = false // Change to true if it's for children

        let privacySet = PrivacySettings.Builder()
                .setTagForChildDirectedTreatment(isTagForUnderAgeOfConsent)

        AdizConsentManager.setUserPrivacySettings(privacySet.build())

        // HiveAdiz 初始化
        Adiz.initialize(targetViewController) { error, json in
                // ...
        }
}
    (void)initialize: (NSString *)appId {
        bool isTagForChildDirectedTreatment = false; // Change to true if it is for children 

        PrivacySettingsBuilder* privacySet = [[PrivacySettingsBuilder alloc] init];
        privacySet = [builder setTagForChildDirectedTreatment: isTagForChildDirectedTreatment];

        [AdizConsentManager setUserPrivacySettings: [privacySet build]];

        // HiveAdiz 初始化
        [Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
                // ...
        }];
}

添加调解

Adiz 可以使用 AdMob 调解显示广告。要添加 AdMob 调解,请按照以下步骤操作。

添加AdMob调解

我们将继续在AdMob控制台中集成广告源。请按照下面的表格进行操作。

AppLovin Liftoff Monetize Meta Audience Network Pangle Unity Ads ironSource
步骤 1 设置 AppLovin 配置 设置 Liftoff Monetize 配置 设置 Meta Audience Network 配置 设置 Pangle 配置 设置 Unity Ads 配置 设置 ironSource 配置
步骤 2 将 AppLovin 广告源添加到 AdMob 将 Liftoff Monetize 广告源添加到 AdMob 将 Meta Audience Network 广告源添加到 AdMob 将 Pangle 广告源添加到 AdMob 将 Unity Ads 广告源添加到 AdMob 将 ironSource 广告源添加到 AdMob
步骤 3 添加 Adiz 适配器
步骤 4 添加 AppLovin SKAdNetwork 添加 Liftoff SKAdNetwork 添加 Meta Audience Network SKAdNetwork 添加 Pangle SKAdNetwork 添加 Unity Ads SKAdNetwork 添加 ironSource SKAdNetwork

添加 Adiz 适配器

将依赖项添加到 CocoaPods Podfile。

# ...

$HIVE_ADIZ_VERSION = '3.0.0'

def adiz
  pod 'HiveAdiz', $HIVE_ADIZ_VERSION
end

def adizAdapter
  pod 'HiveAdizAdapterAppLovin', $HIVE_ADIZ_VERSION
  pod 'HiveAdizAdapterLiftoff', $HIVE_ADIZ_VERSION
  pod 'HiveAdizAdapterMeta', $HIVE_ADIZ_VERSION
  pod 'HiveAdizAdapterPangle', $HIVE_ADIZ_VERSION
  pod 'HiveAdizAdapterUnityAds', $HIVE_ADIZ_VERSION
  pod 'HiveAdizAdapterIronSource', $HIVE_ADIZ_VERSION
end

target 'MyGame-mobile' do
  adiz
  adizAdapter
end

# ...

 

要验证 Adiz 适配器配置是否已正确应用,请运行应用程序并检查 广告检查器 屏幕上的配置列表。

添加 SKAdNetwork

对于 iOS 14 及以上版本,请参阅更新您的 info.plist指南,将 SKAdNetwork 列表添加到您的Info.plist文件中。

每个中介支持的SKAdNetwork列表不同,可能包含重复值。因此,有必要从Adiz当前支持的所有广告中介SKAdNetwork设置中删除重复值,如下所示的列表所示。

<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qy4746246.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>su67r6k2v3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>pwa73g5rt2.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>tl55sbb4fm.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qcr597p9d.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>238da6jt44.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>24t9a8vw3c.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>24zw6aqk47.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>252b5q8x7y.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>275upjj5gd.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>294l99pt4k.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>32z4fx6l9h.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3l6bd9hu43.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>424m5254lk.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>44jx6755aq.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>44n7hlldy6.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>488r3q3dtq.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4mn522wn87.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4w7y6s5ca2.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>523jb4fst2.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>52fl2v3hgk.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>54nzkqm89y.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>5l3tpt7t6e.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>5lm9lj6jb7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>5tjdwbrq8w.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6964rsfnh4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6g9af3uyq4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6p4ks3rnbw.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6v7lgmsu45.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6xzpu9s2p8.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>737z793b9f.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>74b6s63p6l.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>79pbpufp6p.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>7fmhfwg9en.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>7rz58n8ntl.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>84993kbrcf.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>89z7zv988g.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8m87ys6875.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8r8llnkz5a.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>97r2b46745.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9b89h5y424.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9nlqeag3gk.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9vvzujtq5s.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9yg77x724h.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>a7xqa6mtl2.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>a8cz6cu7e5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>b9bk5wbcq9.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>bxvub5ada5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>c3frkrj4fj.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cg4yq2srnc.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cj5566h2ga.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cs644xg564.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cwn433xbcr.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>dbu4b84rxf.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>dkc879ngq3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>dzg6xy7pwj.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>eh6m2bh4zr.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ejvt5qm6ak.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>f73kdq92p3.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>feyaarzu9v.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>g28c52eehv.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>g2y4y55b64.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>g6gcrrvk4p.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ggvn48r87g.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>glqzh8vgby.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>gta8lk7p23.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hb56zgv37p.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hdw39hrw9y.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>k674qkevps.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>kbmxgpxpgc.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>krvm3zuq6h.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>lr83yxwka7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>m297p6643m.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>m5mvw97r93.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>m8dbw4sv7c.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mls7yz5dvl.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mp6xlyr22a.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mqn7fxpca7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mtkv5xtk9e.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n66cz3y3bx.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n9x2a789qt.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>nzq8sh4pbs.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>pwdxu55a5a.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>qqp299437r.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>qu637u8glc.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>r45fhb6rf7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>rvh3l7un93.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>rx5hdcabgc.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>s69wq72ugq.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>u679fj5vs4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v79kvwwj4g.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>vcra2ehyfk.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>vhf287vqwu.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>w9q455wk68.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>wg4vff78zm.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>x44k69ngh6.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>x5l83yy675.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>x8jxxk4ff5.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>x8uqf25wch.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>xga6mpmplv.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>xy9t38ct57.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>y45688jllp.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>z24wtl6j62.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>zmvfpc5aq8.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>zq492l623r.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>k6y4y55b64.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6yxyv74ff7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mj797d8u6f.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>5f5u5tfb26.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>apzhy3va96.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>t6d3zquu66.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>qwpu75vrh2.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ns5j362hk7.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>z959bm4gru.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>fz2k2k5tej.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>bvpn9ufa9b.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6rd35atwn8.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ln5gz23vtd.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>tmhh9296z4.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>sczv5946wb.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>87u5trcl3r.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>fq6vru337s.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>thzdn4h5nc.adattributionkit</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>raa6f494kr.adattributionkit</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>6lz2ygh3q6.adattributionkit</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>m2jqnlggk3.adattributionkit</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>f2zub97jtl.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9g2aggbj52.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>r26jy69rpl.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>nu4557a4je.skadnetwork</string>
</dict>
<dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cdkw7geqsh.skadnetwork</string>
</dict>

Adiz 初始化

这是在显示所有类型广告之前必须执行的步骤。通过初始化 Adiz,您将获得显示广告所需的广告密钥。如果您已激活测试模式,您将收到一个测试密钥。

Warning

如果您使用GDPR设置,则必须在完成Hive Adiz初始化后运行AuthV4.setup。如果在显示ATT(应用跟踪透明度)同意通知后出现GDPR同意屏幕,则应用可能会在苹果的应用审核中被拒绝。

import HiveAdiz

// Hive Adiz 初始化
Adiz.initialize(targetViewController) { error, json in
        if error.isSuccess,
                let responseList = json?["keys"] as? [[String:Any]] {

                var interstitialKeyList = [String]()
                var bannerKeyList = [String]()
                var nativeKeyList = [String]()
                var rewardedKeyList = [String]()
                var rewardedInterstitialKeyList = [String]()
                var appOpenKeyList = [String]()

                for response in responseList {
                        if let isDefault = response["is_default"] as? Bool,
                                isDefault == false {
                                let hiveAdKey = response["key"] as? String ?? ""
                                let hiveForm = response["form"] as? String ?? ""

                                switch hiveForm {
                                case "interstitial": interstitialKeyList.append(hiveAdKey)
                                case "banner": bannerKeyList.append(hiveAdKey)
                                case "native": nativeKeyList.append(hiveAdKey)
                                case "rewarded": rewardedKeyList.append(hiveAdKey)
                                case "rewarded_interstitial": rewardedInterstitialKeyList.append(hiveAdKey)
                                case "app_open": appOpenKeyList.append(hiveAdKey)
                                default: break
                                }
                        }
                }

                print("interstitialKeyList \(interstitialKeyList)");
                print("bannerKeyList \(bannerKeyList)");
                print("nativeKeyList \(nativeKeyList)");
                print("rewardedKeyList \(rewardedKeyList)");
                print("rewardedInterstitialKeyList \(rewardedInterstitialKeyList)");
                print("appOpenKeyList \(appOpenKeyList)");
        }
}
#import <HiveAdiz/HiveAdiz-Swift.h>

// 初始化 Hive Adiz
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
        if([error isSuccess] && json[@"keys"] != nil) {
                NSArray* responseList = json[@"keys"];

                NSMutableArray<NSString*> *interstitialKeyList = [[NSMutableArray alloc] init];
                NSMutableArray<NSString*> *bannerKeyList = [[NSMutableArray alloc] init];
                NSMutableArray<NSString*> *nativeKeyList = [[NSMutableArray alloc] init];
                NSMutableArray<NSString*> *rewardedKeyList = [[NSMutableArray alloc] init];
                NSMutableArray<NSString*> *rewardedInterstitialKeyList = [[NSMutableArray alloc] init];
                NSMutableArray<NSString*> *appOpenKeyList = [[NSMutableArray alloc] init];

                for (NSDictionary* response in responseList) {
                        // 这是设置广告键列表的示例(is_default = false),当您想直接放置广告键时。
                        if (response[@"is_default"] != nil && [response[@"is_default"] boolValue] == false) {
                                NSString* hiveAdKey = response[@"key"];
                                NSString* hiveForm = response[@"form"];
                                if ([hiveForm isEqualToString: @"interstitial"]) {
                                        [interstitialKeyList addObject: hiveAdKey];
                                } else if ([hiveForm isEqualToString: @"banner"]) {
                                        [bannerKeyList addObject: hiveAdKey];
                                } else if ([hiveForm isEqualToString: @"native"]) {
                                        [nativeKeyList addObject: hiveAdKey];
                                } else if ([hiveForm isEqualToString: @"rewarded"]) {
                                        [rewardedKeyList addObject: hiveAdKey];
                                } else if ([hiveForm isEqualToString: @"rewarded_interstitial"]) {
                                        [rewardedInterstitialKeyList addObject: hiveAdKey];
                                } else if ([hiveForm isEqualToString: @"app_open"]) {
                                        [appOpenKeyList addObject: hiveAdKey];
                                }
                        }
                }

                NSLog(@"interstitialKeyList %@", interstitialKeyList);
                NSLog(@"bannerKeyList %@", bannerKeyList);
                NSLog(@"nativeKeyList %@", nativeKeyList);
                NSLog(@"rewardedKeyList %@", rewardedKeyList);
                NSLog(@"rewardedInterstitialKeyList %@", rewardedInterstitialKeyList);
                NSLog(@"appOpenKeyList %@", appOpenKeyList);
        }
}];

 

在初始化期间接收到的作为回调的JSON文件包含一个广告键的列表。广告键的列表具有以下格式。

    {
            "keys":[
                    {
                            "mediation_id":5,
                            "key":"ca-app-pub-3940256099942544/5354046379",
                            "form":"rewarded_interstitial",
                            "is_default":true,
            "placement_id":"lobby01"
                    },
                    {
                            "mediation_id":4,
                            "key":"ca-app-pub-3940256099942544/5224354917",
                            "form":"rewarded",
                            "is_default":true,
            "placement_id":"game02"
                    },
                    {
                            "mediation_id":3,
                            "key":"ca-app-pub-3940256099942544/2247696110",
                            "form":"native",
                            "is_default":true,
            "placement_id":"event01"
                    },
                    {
                            "mediation_id":1,
                            "key":"ca-app-pub-3940256099942544/1033173712",
                            "form":"interstitial",
                            "is_default":true,
            "placement_id":"mission01"
                    },
                    {
                            "mediation_id":2,
                            "key":"ca-app-pub-3940256099942544/6300978111",
                            "form":"banner",
                            "is_default":true,
            "placement_id":"main01"
                    },
                    {
                            "mediation_id":6,
                            "key":"ca-app-pub-3940256099942544/9257395921",
                            "form":"app_open",
                            "is_default":true,
            "placement_id":"appopen01"
                    }
            ]
    }

 

在测试模式下初始化时,即使您未在控制台中注册AdMob广告密钥,您也会收到一份测试广告密钥列表。在生产模式下初始化时,您将收到在控制台中注册的AdMob广告密钥列表。

对于每种广告类型(form),使用一个广告作为默认广告(即"is_default":true的广告)。当首次注册广告类型时,最初注册的广告将成为默认广告。创建广告实例(initialize())时,不需要输入广告密钥(hiveAdKey)来使用默认广告。要更改默认广告,必须从控制台删除现有的默认广告并注册一个新的广告。

设置广告回调监听器

通过在创建每个广告实例时实现AdizListener,您可以根据广告状态的变化接收回调。

名称 描述 必需的实现
onLoad() 广告加载成功 O
onFail(error: AdizError) 失败(失败的原因可以通过 error.getCode()error.getMessage() 知道) O
onShow() 广告显示成功 O
onClick() 广告点击 O
onPaidEvent(_ revenueData: AdRevenueData) 在广告曝光后收到付费事件的时刻,并传达广告收入信息 O
onClose() 广告结束
  • 要在广告结束后重新显示相同的广告实例,您必须再次调用 load() 然后调用 show()
  • 要停止显示广告,请调用 destroy() 来移除广告实例。
X
onRewarded(_ rewardItem: RewardItem) 用户在基于奖励的广告(rewardedrewarded interstitial)曝光后获得奖励的时刻 X
import HiveAdiz

class TestAdizListener: AdizListener {
        func onLoad() {
                // 当广告加载时调用。
                // 如果广告加载成功,您需要在合适的时机调用广告实例的 .show() 来显示广告。
                print("[\(delegateTypeName)] onLoad")
        }
        func onFail(_ error: AdizError) {
                // 如果广告加载失败或由于其他原因广告显示失败时调用。
                print("[\(delegateTypeName)] onFail: ")
                print("(\(error.getCode())) \(error.getMessage() ?? "")")
        }
        func onShow() {
                // 当广告显示时调用。
                print("[\(delegateTypeName)] onShow")
        }
        func onClick() {
                // 当广告被点击时调用。
                print("[\(delegateTypeName)] onClick")
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
                // 当广告产生收入时调用。
                print("[\(delegateTypeName)] onPaidEvent: \(revenueData.getCurrency()) \(revenueData.getRevenue().description)")
                var revenue = revenueData.getRevenue() // 广告曝光时的收入
                var currency = revenueData.getCurrency() // 广告曝光时的收入货币代码
        }
        func onClose() {
                // 当广告关闭时调用。
                // 横幅广告、原生广告没有 onClose 回调。
                print("[\(delegateTypeName)] onClose")
        }
        func onRewarded(_ rewardItem: RewardItem) {
                // 在观看广告获得奖励时调用,适用于奖励广告和奖励插播广告。
                print("[\(delegateTypeName)] onRewarded")
                print("amount: \(rewardItem.getItemAmount()) type: \(rewardItem.getItemType())")

                var itemType = rewardItem.getItemType() // 奖励物品类型
                var itemAmount = rewardItem.getItemAmount() // 奖励物品数量    }}
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface TestAdizListener : NSObject<AdizListener>
@end

@implementation TestAdizListener

- (void) onLoad {
        // 当广告加载时调用。
        // 如果广告加载成功,您需要在所需的时刻调用广告实例的 .show() 来显示广告。
        NSLog(@"[TestAdizListener] onLoad");
}

- (void) onFail:(AdizError *)error {
        // 如果广告加载失败或由于其他原因广告展示失败,将调用此方法。
        NSLog(@"[TestAdizListener] onFail: ");
        NSLog(@"errorCode: %ld, errorMessage: %@", (long)[error getCode], [error getMessage]);
}

- (void) onShow {
        // Called when the ad is displayed.
        NSLog(@"[TestAdizListener] onShow");
}

- (void) onClick {
        // 被点击广告时调用。
        NSLog(@"[TestAdizListener] onClick");
}

- (void) onPaidEvent:(AdRevenueData *)revenueData {
        // 当广告产生收入时调用。
        NSLog(@"[TestAdizListener] onPaidEvent: %@ %f", [revenueData getCurrency], [revenueData getRevenue]);
        double revenue = [revenueData getRevenue]; // 广告曝光时的收入
        NSString* currency = [revenueData getCurrency]; // 广告曝光时的收入货币代码
}

- (void) onClose {
        // 广告关闭时调用。
        // 横幅广告、原生广告没有 onClose 回调。
        NSLog(@"[TestAdizListener] onClose");
}

- (void) onRewarded:(RewardItem *)rewardItem {
        // 当观看广告时发生奖励时调用,适用于奖励型和奖励插播广告。
        NSLog(@"[TestAdizListener] onRewarded");
        NSLog(@"amount: %ld type: %@", (long)[rewardItem getItemAmount], [rewardItem getItemType]);

        NSString* itemType = [rewardItem getItemType]; // 奖励项目类型
        NSInteger itemAmount = [rewardItem getItemAmount]; // 奖励项目数量
}

@end

错误代码

在接收到Adiz.InitializeAdizListener中的onFail()时,AdizError错误代码和错误消息如下。

常见代码

编号 案例 解释
0 成功 成功

Adiz 错误代码

编号 案例 解释
-1 无效参数 无效的参数
-2 不支持 不支持
-3 进行中 处理正在进行中
-4 网络 网络错误
-5 需要初始化 需要初始化
-6 响应失败 响应失败
-7 超时 网络超时
-99 未知 未知错误

广告平台错误代码

编号 案例 解释
-101 NeedLoad 广告未加载
-102 NeedReload 由于广告曝光时间到期,需要重新加载
-103 NotEnoughInventory 调解响应成功,但由于库存不足未填充广告
-104 MissingAppId 调解请求的AppID错误
-105 InternalNetworkError 调解网络相关错误
-106 InvalidUnitId 无效的单元ID
-107 MediationNoFill 调解适配器未能处理广告请求
-108 AlreadyLoaded 已经处于加载状态
-109 CannotRequestAds 无法请求广告
-201 GdprConsentError GDPR同意错误
-202 IsNotPrivacyOptionsRequired 无法显示GDPR同意弹出窗口,或处于不需要显示的状态

广告展示和广告终止

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

  1. 为您想要显示的每种广告类型在广告类中创建一个广告实例。如果您想要显示的广告不是默认广告,则需要输入从初始化中获得的广告密钥或投放 ID。如果您不输入广告密钥(hiveAdKey)或投放 ID(placementId),将创建一个默认广告实例。投放 ID 可以在 Hive 控制台中设置,更多详细信息,请参阅控制台指南中的Admob 设置页面。
  2. 加载您想要显示的广告(load())。
  3. 显示加载的广告(show())。要重新显示广告,您必须再次调用load(),然后调用show()
  4. 要关闭广告,请调用destroy()

插页广告

占据整个屏幕的全屏广告。

import UIKit
import HiveAdiz

class InitViewController: UIViewController {

        // 创建一个插页广告实例。
        var interstitialAd: AdizInterstitial?

        func requestInitAd(hiveAdKey: String?) {
                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
                        self.interstitialAd = AdizInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizInterstitial 实例 (ViewController, AdizListener)
                        self.interstitialAd = AdizInterstitial.initialize(self, adizListener: self)
                }
        }

        func requestInitAdWithPlacementId(placementId: String?) {
                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizInterstitial 实例 (ViewController, placementId, AdizListener)
                        self.interstitialAd = AdizInterstitial.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizInterstitial 实例 (ViewController, AdizListener)
                        self.interstitialAd = AdizInterstitial.initialize(self, adizListener: self)
                }
        }

        func requestLoadAd() {
                // Load AdizInterstitial
                if let ad = self.interstitialAd,
                    ad.isInitialized() {
                        ad.load()
                        }
        }

        func requestShowAd() {
                // 显示 AdizInterstitial
                if let ad = self.interstitialAd,
                    ad.isLoaded() {
                        ad.show()
                        }
        }

        func requestDestroyAd() {
                // 销毁 AdizInterstitial
                self.interstitialAd?.destroy()
                self.interstitialAd = nil
        }
}

extension InitViewController: AdizListener {
        func onLoad() {
                // requestShowAd()
        }
        func onFail(_ error: AdizError) {
        }
        func onShow() {
        }
        func onClick() {
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
        }
        func onClose() {
                // requestDestroyAd()
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface InitViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizInterstitial* interstitialAd;
@end

@implementation InitViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
                // 创建一个插页广告实例。
                self.interstitialAd = [AdizInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
        }
        else {
                // 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
                self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
        }
}

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizInterstitial 实例 (ViewController, placementId, AdizListener)
                // 创建一个插页广告实例。
                self.interstitialAd = [AdizInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
        }
        else {
                // 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
                self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
        }
}

- (void) requestLoadAd {
        // 加载 AdizInterstitial
        if (self.interstitialAd != nil && [self.interstitialAd isInitialized]) {
                [self.interstitialAd load];
        }
}

- (void) requestShowAd {
        // 显示 AdizInterstitial
        if (self.interstitialAd != nil && [self.interstitialAd isLoaded]) {
                [self.interstitialAd show];
        }
}

- (void) requestDestroyAd {
        // 销毁 AdizInterstitial
        if (self.interstitialAd != nil) {
                [self.interstitialAd destroy];
                self.interstitialAd = nil;
        }
}

#pragma mark - AdizListener

- (void) onLoad {
        // [self requestShowAd];
}

- (void) onFail:(AdizError *)error {
}

- (void) onShow {
}

- (void) onClick {
}

- (void) onPaidEvent:(AdRevenueData *)revenueData {
}

- (void) onClose {
        // [self requestDestroyAd];
}

@end

这是一个显示特定大小横幅的广告。横幅广告不会接收 onClose() 回调。因此,您需要从其他位置调用 destroy() 来终止广告。

 

BannerSize 遵循标准横幅尺寸。

尺寸点(宽 x 高) 描述 支持的设备 BannerSize 常量
320x50 横幅 手机和平板 BannerSize.normal
320x100 大横幅 手机和平板 BannerSize.medium
300x250 IAB 中等矩形 手机和平板 BannerSize.large
468 x 60 IAB 全尺寸横幅 平板 BannerSize.full

 

PositionType 是最上面或最下面的。默认值是最下面的。

对齐方式 描述 位置类型常量
顶部对齐 根据安全区域指定顶部对齐 PositionType.top
底部对齐(默认) 根据安全区域指定底部对齐 PositionType.bottom
import UIKit
import HiveAdiz

class BannerViewController: UIViewController {

        // 创建 AdizBanner 实例
        // 创建一个横幅广告实例。
        var bannerAd: AdizBanner?

        func requestInitAd(hiveAdKey: String?) {        // 设置横幅大小
                var bannerSize: BannerSize = .normal

                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizBanner 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
                        self.bannerAd = AdizBanner.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
                }
                else {
                        // 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
                        self.bannerAd = AdizBanner.initialize(self, size: bannerSize, adizListener: self)
                }    
        }    

        func requestInitAdWithPlacementId(placementId: String?) {        // 设置横幅大小
                var bannerSize: BannerSize = .normal

                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizBanner 实例 (ViewController, placementId, BannerSize, AdizListener)
                        self.bannerAd = AdizBanner.initializeWithPlacementId(self, placementId: placementId, size: bannerSize, adizListener: self)
                }
                else {
                        // 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
                        self.bannerAd = AdizBanner.initialize(self, size: bannerSize, adizListener: self)
                }    
        }    

        func requestLoadAd() {
                // 加载 AdizBanner
                if let ad = self.bannerAd,
                    ad.isInitialized() {
                        ad.load()
                        }
        }     

        func requestShowAd() {
                // 设置位置类型
                var position: PositionType = .top

                // 显示 AdizBanner
                if let ad = self.bannerAd,
                    ad.isLoaded() {
                        ad.show(position)
                        }
        }     

        func requestDestroyAd() {
                // 销毁 AdizBanner
                self.bannerAd?.destroy()
                self.bannerAd = nil
        }
} 

extension BannerViewController: AdizListener {
        func onLoad() {
                // requestShowAd()
        }    
        func onFail(_ error: AdizError) {
        }    
        func onShow() {
        }    
        func onClick() {
        }    
        func onPaidEvent(_ revenueData: AdRevenueData) {    
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface BannerViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizBanner* bannerAd;
@end

@implementation BannerViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        // 设置横幅大小
        BannerSize bannerSize = BannerSizeNormal;

        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizBanner 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
                self.bannerAd = [AdizBanner initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
        }    else {
                // 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
                self.bannerAd = [AdizBanner initialize:self size:bannerSize adizListener:self];
        }
} 

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        // 设置横幅大小
        BannerSize bannerSize = BannerSizeNormal;

        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizBanner 实例 (ViewController, placementId, BannerSize, AdizListener)
                self.bannerAd = [AdizBanner initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
        }    else {
                // 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
                self.bannerAd = [AdizBanner initialize:self size:bannerSize adizListener:self];
        }
} 

- (void) requestLoadAd {
        // 加载 AdizBanner
        if (self.bannerAd != nil && [self.bannerAd isInitialized]) {
                [self.bannerAd load];
        }
} 

- (void) requestShowAd {
        // 设置位置类型
        PositionType position = PositionTypeTop;

        // 显示 AdizBanner
        if (self.bannerAd != nil && [self.bannerAd isLoaded]) {
                [self.bannerAd show: position];
        }
} 

- (void) requestDestroyAd {
        // 销毁 AdizBanner
        if (self.bannerAd != nil) {
                [self.bannerAd destroy];
                self.bannerAd = nil;
        }
} 

#pragma mark - AdizListener

- (void) onLoad {
        // [self requestShowAd];
} 

- (void) onFail:(AdizError *)error {
} 

- (void) onShow {
} 

- (void) onClick {
} 

- (void) onPaidEvent:(AdRevenueData *)revenueData {
} 

@end

原生广告

这是一个原生广告,展示了特定大小的原生模板。原生广告经过优化,适合竖屏使用,因此建议在竖屏游戏(纵向模式游戏)中使用。原生广告不会接收onClose()回调。因此,您需要在其他位置调用destroy()来关闭广告。

 

当前模板支持 smallmedium 尺寸。

尺寸点(宽 x 高) 模板 对齐方式 BannerSize 常量
355x91(调整了纵横比) 小尺寸 顶部 / 底部 BannerSize.normal
355x370(调整了纵横比) 中等尺寸 居中(固定) BannerSize.medium, BannerSize.large, BannerSize.full

 

small 模板中,PositionType 要么是顶部,要么是底部,默认值为底部。

对齐方式 描述 位置类型常量
顶部对齐 指定在屏幕顶部的对齐方式 PositionType.top
底部对齐(默认) 指定在屏幕底部的对齐方式 PositionType.bottom

 

medium 模板不允许选择对齐方式,默认使用居中对齐。

import UIKit
import HiveAdiz

class NativeViewController: UIViewController {

        // 创建 AdizNative 实例
        var nativeAd: AdizNative?

        func requestInitAd(hiveAdKey: String?) {
                // 设置横幅大小
                var bannerSize: BannerSize = .normal

                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
                        self.nativeAd = AdizNative.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
                }
                else {
                        // 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
                        self.nativeAd = AdizNative.initialize(self, size: bannerSize, adizListener: self)
                }
        }

        func requestInitAdWithPlacementId(placementId: String?) {
                // 设置横幅大小
                var bannerSize: BannerSize = .normal

                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
                        self.nativeAd = AdizNative.initializeWithPlacementId(self, placementId: placementId, size: bannerSize, adizListener: self)
                }
                else {
                        // 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
                        self.nativeAd = AdizNative.initialize(self, size: bannerSize, adizListener: self)
                }
        }

        func requestLoadAd() {
                // 加载 AdizNative
                if let ad = self.nativeAd,
                    ad.isInitialized() {
                        ad.load()
                }
        }

        func requestShowAd() {
                // 设置位置类型
                var position: PositionType = .top

                // 显示 AdizNative
                if let ad = self.nativeAd,
                    ad.isLoaded() {
                        ad.show(position)
                }
        }

        func requestDestroyAd() {
                // 销毁 AdizNative
                self.nativeAd?.destroy()
                self.nativeAd = nil
        }
}

extension NativeViewController: AdizListener {
        func onLoad() {
                // requestShowAd()
        }
        func onFail(_ error: AdizError) {
        }
        func onShow() {
        }
        func onClick() {
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface NativeViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizNative* nativeAd;
@end

@implementation NativeViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        // 设置横幅大小
        BannerSize bannerSize = BannerSizeNormal;

        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
                self.nativeAd = [AdizNative initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
        }
        else {
                // 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
                self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
        }
}

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        // 设置横幅大小
        BannerSize bannerSize = BannerSizeNormal;

        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
                self.nativeAd = [AdizNative initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
        }
        else {
                // 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
                self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
        }
}

- (void) requestLoadAd {
        // 加载 AdizNative
        if (self.nativeAd != nil && [self.nativeAd isInitialized]) {
                [self.nativeAd load];
        }
}

- (void) requestShowAd {
        // 设置位置类型
        PositionType position = PositionTypeTop;

        // 显示 AdizNative
        if (self.nativeAd != nil && [self.nativeAd isLoaded]) {
                [self.nativeAd show: position];
        }
}

- (void) requestDestroyAd {
        // 销毁 AdizNative
        if (self.nativeAd != nil) {
                [self.nativeAd destroy];
                self.nativeAd = nil;
        }
}

#pragma mark - AdizListener

- (void) onLoad {
        // [self requestShowAd];
}

- (void) onFail:(AdizError *)error {
}

- (void) onShow {
}

- (void) onClick {
}

- (void) onPaidEvent:(AdRevenueData *)revenueData {
}

@end

奖励广告

这是一个奖励广告,用户在观看广告一段时间后会获得奖励。一旦奖励被授予,奖励项目的信息将通过onRewarded()回调接收。

import UIKit
import HiveAdiz  

class RewardViewController: UIViewController {

        // 创建 AdizRewarded 实例
        var rewardAd: AdizRewarded?

        func requestInitAd(hiveAdKey: String?) {
                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
                        self.rewardAd = AdizRewarded.initialize(self, hiveAdKey: adKey, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizRewarded 实例 (ViewController, AdizListener)
                        self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
                }
        }

        func requestInitAdWithPlacementId(placementId: String?) {
                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
                        self.rewardAd = AdizRewarded.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizRewarded 实例 (ViewController, AdizListener)
                        self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
                }
        }

        func requestLoadAd() {
                // Load AdizRewarded
                if let ad = self.rewardAd,
                    ad.isInitialized() {
                        ad.load()
                }
        }

        func requestShowAd() {
                // 显示 AdizRewarded
                if let ad = self.rewardAd,
                    ad.isLoaded() {
                        ad.show()
                }
        }

        func requestDestroyAd() {
                // 销毁 AdizRewarded
                self.rewardAd?.destroy()
                self.rewardAd = nil
        }
}

extension RewardViewController: AdizListener {
        func onLoad() {
                // requestShowAd()
        }
        func onFail(_ error: AdizError) {
        }
        func onShow() {
        }
        func onClick() {
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
        }
        func onClose() {
                // requestDestroyAd()
        }
        func onRewarded(_ rewardItem: RewardItem) {
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h> 

@interface RewardedViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewarded* rewardedAd;
@end

@implementation RewardedViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
                self.rewardedAd = [AdizRewarded initialize:self hiveAdKey:hiveAdKey adizListener:self];
        }
        else {
                // 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
                self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
        }
}

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
                self.rewardedAd = [AdizRewarded initializeWithPlacementId:self placementId:placementId adizListener:self];
        }
        else {
                // 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
                self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
        }
}

- (void) requestLoadAd {
        // 加载 AdizRewarded
        if (self.rewardedAd != nil && [self.rewardedAd isInitialized]) {
                [self.rewardedAd load];
        }
}

- (void) requestShowAd {
        // 显示 AdizRewarded
        if (self.rewardedAd != nil && [self.rewardedAd isLoaded]) {
                [self.rewardedAd show];
        }
}

- (void) requestDestroyAd {
        // 销毁 AdizRewarded
        if (self.rewardedAd != nil) {
                [self.rewardedAd destroy];
                self.rewardedAd = nil;
        }
}

#pragma mark - AdizListener

- (void) onLoad {
        // [self requestShowAd];
}

- (void) onFail:(AdizError *)error {
}

- (void) onShow {
} 

- (void) onClick {
} 

- (void) onPaidEvent:(AdRevenueData *)revenueData {
}

- (void) onClose {
        // [self requestDestroyAd];
}

- (void) onRewarded:(RewardItem *)rewardItem {
}

@end

奖励插页广告

这是一个奖励插页广告,用户在观看广告一定时间后会获得奖励。一旦奖励被授予,奖励项目信息将通过onRewarded()回调接收。

import UIKit
import HiveAdiz  

class RewardInterstitialViewController: UIViewController {

        // 创建 AdizRewardedInterstitial 实例
        var rewardInterstitialAd: AdizRewardedInterstitial?

        func requestInitAd(hiveAdKey: String?) {
                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizRewardedInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
                        self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
                }
                else {
                        // 初始化默认 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
                        self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, adizListener: self)
                }    
        }   

        func requestInitAdWithPlacementId(placementId: String?) {
                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizRewardedInterstitial 实例 (ViewController, placementId, AdizListener)
                        self.rewardInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
                        self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, adizListener: self)
                }    
        }   

        func requestLoadAd() {
                // Load AdizRewardedInterstitial
                if let ad = self.rewardInterstitialAd,
                    ad.isInitialized() {
                        ad.load()
                }
        }     

        func requestShowAd() {
                // 显示 AdizRewardedInterstitial
                if let ad = self.rewardInterstitialAd,
                    ad.isLoaded() {
                        ad.show()
                }
        }     

        func requestDestroyAd() {
                // 销毁 AdizRewardedInterstitial
                self.rewardInterstitialAd?.destroy()
                self.rewardInterstitialAd = nil
        }
}

extension RewardInterstitialViewController: AdizListener {
        func onLoad() {
                // requestShowAd()
        }    
        func onFail(_ error: AdizError) {
        }    
        func onShow() {
        }    
        func onClick() {
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
        }
        func onClose() {
                // requestDestroyAd()
        }
        func onRewarded(_ rewardItem: RewardItem) {
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface RewardedInterstitialViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewardedInterstitial* rewardedInterstitialAd;
@end

@implementation RewardedInterstitialViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizRewardedInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
                self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
        }
        else {
                // 初始化默认 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
                self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
        }
} 

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizRewardedInterstitial 实例 (ViewController, placementId, AdizListener)
                self.rewardedInterstitialAd = [AdizRewardedInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
        }
        else {
                // 初始化默认的 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
                self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
        }
} 

- (void) requestLoadAd {
        // 加载 AdizRewardedInterstitial
        if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isInitialized]) {
                [self.rewardedInterstitialAd load];
        }
}

- (void) requestShowAd {
        // 显示 AdizRewardedInterstitial
        if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isLoaded]) {
                [self.rewardedInterstitialAd show];
        }
} 

- (void) requestDestroyAd {
        // 销毁 AdizRewardedInterstitial
        if (self.rewardedInterstitialAd != nil) {
                [self.rewardedInterstitialAd destroy];
                self.rewardedInterstitialAd = nil;
        }
}

#pragma mark - AdizListener

- (void) onLoad {
        // [self requestShowAd];
} 
- (void) onFail:(AdizError *)error {
} 
- (void) onShow {
} 
- (void) onClick {
} 
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}

- (void) onClose {
        // [self requestDestroyAd];
}

- (void) onRewarded:(RewardItem *)rewardItem {
}

@end

应用打开广告 (AppOpen)

应用打开广告在应用从后台切换到前台时显示,展示一个使用 load() 预加载的广告。如果自广告加载以来已经过去超过 3 小时,则广告将不会显示并会自动重新加载。然后,广告将在下次应用移至前台时显示。在广告显示一次后,它将不会自动重新加载,因此您必须再次调用 load() 来加载一个新广告。

import UIKit
import HiveAdiz  

class AppOpenViewController: UIViewController {

        // 创建 AdizAppOpen 实例
        var appOpenAd: AdizAppOpen?

        func requestInitAd(hiveAdKey: String?) {
                if let adKey = hiveAdKey,
                        adKey.count > 0 {
                        // 初始化 AdizAppOpen 实例 (ViewController, hiveAdKey, AdizListener)
                        self.appOpenAd = AdizAppOpen.initialize(self, hiveAdKey: adKey, adizListener: self)
                }
                else {
                        // 初始化默认 AdizAppOpen 实例 (ViewController, AdizListener)
                        self.appOpenAd = AdizAppOpen.initialize(self, adizListener: self)
                }    
        }     

        func requestInitAdWithPlacementId(placementId: String?) {
                if let placementId = placementId,
                        placementId.count > 0 {
                        // 初始化 AdizAppOpen 实例 (ViewController, placementId, AdizListener)
                        self.appOpenAd = AdizAppOpen.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
                }
                else {
                        // 初始化默认的 AdizAppOpen 实例 (ViewController, AdizListener)
                        self.appOpenAd = AdizAppOpen.initialize(self, adizListener: self)
                }    
        }   

        func requestLoadAd() {
                // Load AdizAppOpen
                if let ad = self.appOpenAd,
                    ad.isInitialized() {
                        ad.load()
                }
        }     

        func requestShowAd() {
                print("[appOpenAd] appOpenAd don't request Show")
        }     

        func requestDestroyAd() {
                // 销毁 AdizAppOpen
                self.appOpenAd?.destroy()
                self.appOpenAd = nil
        }
}

extension AppOpenViewController: AdizListener {
        func onLoad() {
        }    
        func onFail(_ error: AdizError) {
        }    
        func onShow() {
        }    
        func onClick() {
        }
        func onPaidEvent(_ revenueData: AdRevenueData) {
        }
        func onClose() {
                // requestDestroyAd()
        }
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>

@interface AppOpenViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizAppOpen* appOpenAd;
@end

@implementation AppOpenViewController

- (void) requestInitAd: (NSString*)hiveAdKey {
        if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
                // 初始化 AdizAppOpen 实例 (ViewController, hiveAdKey, AdizListener)
                self.appOpenAd = [AdizAppOpen initialize:self hiveAdKey:hiveAdKey adizListener:self];
        }
        else {
                // 初始化默认的 AdizAppOpen 实例 (ViewController, AdizListener)
                self.appOpenAd = [AdizAppOpen initialize:self adizListener:self];
        }
} 

- (void) requestInitAdWithPlacementId: (NSString*)placementId {
        if (placementId != nil && ![placementId isEqualToString:@""]) {
                // 初始化 AdizAppOpen 实例 (ViewController, placementId, AdizListener)
                self.appOpenAd = [AdizAppOpen initializeWithPlacementId:self placementId:placementId adizListener:self];
        }
        else {
                // 初始化默认的 AdizAppOpen 实例 (ViewController, AdizListener)
                self.appOpenAd = [AdizAppOpen initialize:self adizListener:self];
        }
} 

- (void) requestLoadAd {
        // 加载 AdizAppOpen
        if (self.appOpenAd != nil && [self.appOpenAd isInitialized]) {
                [self.appOpenAd load];
        }
} 

- (void) requestShowAd {
        NSLog(@"[appOpenAd] appOpenAd don't request Show");
}

- (void) requestDestroyAd {
        // 销毁 AdizAppOpen
        if (self.appOpenAd != nil) {
                [self.appOpenAd destroy];
                self.appOpenAd = nil;
        }
} 

#pragma mark - AdizListener

- (void) onLoad {
} 

- (void) onFail:(AdizError *)error {
} 

- (void) onShow {
} 

- (void) onClick {
} 

- (void) onPaidEvent:(AdRevenueData *)revenueData {
}

- (void) onClose {
        // [self requestDestroyAd];
}

@end