跳转至

iOS 版

Adiz iOS

Adiz iOS是AdMob提供的广告展示功能,旨在更方便地使用Hive平台提供的iOS广告模块。Adiz iOS提供的广告形式如下。

  • 全屏广告(Interstitial)
  • 横幅广告(Banner)
  • 原生广告(Native)
  • 奖励广告(Rewarded)
  • 奖励全屏广告(Rewarded Interstitial)
  • 应用开启广告(AppOpen)

请按照以下指南逐步参考以安装和使用Adiz iOS。

预备工作

Adiz iOS 开发环境的配置。

安装

在 Xcode 项目的 Info.plist 文件中添加 GADApplicationIdentifier 键,并将 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', '2.1.0'
end
target 'Unity-iPhone' do
end
use_frameworks!

# 修复在使用项目时 pods 中的 dyld 问题
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      # xcode 15 工具链问题
      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 }
      # 结束

      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 广告密钥,也会显示测试广告。在商业发布时,请禁用测试模式。

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

  • 在注册测试设备到控制台后,设置为演示广告(推荐):
    请参考控制台指南中的测试设备管理内容。
  • 使用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

如果在未注册测试设备的情况下进行实际广告展示的测试,将被视为无效流量,可能导致AbMob账户被封禁,并且无法再展示广告。注册测试设备后,广告展示时将显示“测试模式”或“测试广告”(原生广告)。在商业发布时,必须禁用测试设备。

 

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

 

原生广告

 

使用 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 后,在现有的 HiveAdiz 初始化代码中,在执行 Adiz.initialize 之前添加 Adiz.SetTestDevice(DEVICE_ID) 行。DEVICE_ID 中输入复制的测试设备 ID。

 

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


广告检查器使用

广告检查器是一个在测试设备上请求实际广告并实时分析曝光过程的应用内覆盖工具。它会告诉您加载广告所需的时间,如果曝光失败,它会告知失败原因。您还可以指定特定的广告网络,以检查广告是否正常曝光,如果有问题,可以在代码级别进行调试。所有这些过程都与广告检查用户界面一起进行。它包含在 Google Mobile Ads SDK iOS 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(广告标识符)消息。

AdMob 仪表板中,请按照以下 IDFA 消息编写指南编写并发布消息。

编写和发布 IDFA 消息后,设置用户追踪访问权限。请按照以下步骤在 Info.plist 中添加键。

  1. 在 Xcode 项目窗口的项目导航器中选择您的项目。
  2. 在 TARGETS 列表中选择您的应用。
  3. 点击 Info 选项卡。
  4. 点击 Info 选项卡中的 Custom iOS Target Properties 项目。
  5. 在 Custom iOS Target Properties 列表中右键点击。
  6. 点击 Add Row 菜单。
  7. 在 Key 项中输入 NSUserTrackingUsageDescription,并在 Value 项中添加 多语言设置文件 > Base.Iproj 文件夹 > InfoPlist.strings 中指定的值。

 

接下来,请编写请求多语言设置文件中(常规设置 > 访问权限请求设置)指定的应用用户的权限批准消息。如果不输入权限批准请求弹窗消息,将缺少对正在使用的用户访问权限的额外说明指南,导致应用审核时被拒绝(Reject)。

 

如果到这里都完成了,Adiz 初始化 时会自动显示 ATT 同意弹窗。在 ATT 同意弹窗中,用户点击“允许”后,IDFA 将被激活,用户特定广告将被显示。

如果游戏针对欧洲和英国(EEA & UK),则必须展示GDPR(欧洲联盟通用数据保护条例)同意弹窗。GDPR同意弹窗仅在用户设备的IP地址为欧洲和英国(EEA & UK)IP地址时展示。Adiz支持通过Google UMP(用户消息平台)展示GDPR同意弹窗。在AdMob控制台中编写GDPR消息后,初始化Adiz,GDPR弹窗将展示给来自欧洲和英国地区的用户。

Warning

针对欧洲及英国以外的地区,例如如果只计划在国内提供服务,可以跳过GDPR同意弹窗曝光(欧洲,英国)步骤,并使用Adiz.initializeForNonGDPR()方法进行初始化。
如果使用Adiz.initialize()方法进行初始化,则必须在AdMob控制台中编写GDPR消息,才能正常进行Adiz初始化。

GDPR 消息编写

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

如果您编写了 GDPR 消息,Adiz 初始化 时将自动显示 GDPR 同意弹窗。

Warning

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

实现 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 初始化: 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)设置

可以使用GDPR同意年龄以下用户的标签(Tag For Under the Age of Consent, 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 设置的同意年龄以下用户状态会自动应用,因此无需调用 AdizConsentManager.SetUserPrivacySettings

 

func initialize(_ appId: String) {
    bool isTagForUnderAgeOfConsent = false // 如果是儿童则更改为 true

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

    AdizConsentManager.setUserPrivacySettings(privacySet.build())

    // HiveAdiz 初始化
    Adiz.initialize(targetViewController) { error, json in
        // ...
    }
}
- (void)initialize: (NSString *)appId {
    bool isTagForUnderAgeOfConsent = false; // 如果是儿童则更改为 true 

    隐私设置构建器* 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 地址为欧洲和英国 IP 地址时才会显示。在开发阶段,可以强制显示 GDPR 同意弹窗以测试弹窗的显示,因此需要设置 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 同意弹窗是否正常显示。
```swift

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
            // ...
    }
}

```
```obj

- (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时,儿童目标处理标签会自动应用,因此无需单独设置。

```swift
func initialize(_ appId: String) {
        bool isTagForChildDirectedTreatment = false // 如果是儿童则更改为 true


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

        AdizConsentManager.setUserPrivacySettings(privacySet.build())

        // HiveAdiz 初始化
        Adiz.initialize(targetViewController) { error, json in
                // ...
        }
}
```
```obj
- (void)initialize: (NSString *)appId {
        bool isTagForChildDirectedTreatment = false; // 如果是儿童则更改为 true 

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

        [AdizConsentManager setUserPrivacySettings: [privacySet build]];

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

添加广告调解

Adiz可以使用AdMob调解来展示广告。要添加AdMob调解,请遵循以下步骤。

添加 AdMob 中介

在 AdMob 控制台中进行广告源集成工作。按照下面的表格进行操作。

AppLovin Pangle Unity Ads Meta
步骤 1 设置 AppLovin 配置 设置 Pangle 配置 设置 Unity Ads 配置 设置 Meta 配置
步骤 2 向 AdMob 添加 AppLovin 广告源 向 AdMob 添加 Pangle 广告源 向 AdMob 添加 Unity Ads 广告源 向 AdMob 添加 Meta 广告源
步骤 3 添加 Adiz 适配器

添加 Adiz 适配器

在CocoaPods Podfile中添加依赖。


# ...

$HIVE_ADIZ_VERSION = '2.1.0'

def adiz
  pod 'HiveAdiz', $HIVE_ADIZ_VERSION
end

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

target 'MyGame-mobile' do
  adiz
  adizAdapter
end

# ...

 

为了确认 Adiz 适配器配置是否正确应用,请在运行应用后在 广告检查器 屏幕上检查配置列表。

Adiz 初始化

这是在展示所有类型广告之前必须执行的步骤。进行 Adiz 初始化后,可以获得展示广告所需的广告密钥。如果处于测试模式,将会获得测试密钥。如果使用 Hive SDK,则在调用 AuthV4.setup 之后进行 Adiz 初始化。

Warning

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

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) 在奖励广告(rewarded, rewarded 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 {
        // 当广告显示时调用。
        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 InvalidParam 无效的参数
-2 NotSupported 不支持
-3 InProgress 进程进行中状态
-4 Network 网络错误
-5 NeedInitialize 需要初始化
-6 ResponseFail 响应失败
-7 Timeout 网络超时
-99 Unknown 未知错误

广告平台错误代码

编号 案例 解释
-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()

全屏广告 (Interstitial)

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

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
        }
}

扩展 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 常量
最顶部对齐 指定相对于 SafeArea 的屏幕最顶部对齐 PositionType.top
最底部对齐(默认值) 指定相对于 SafeArea 的屏幕最底部对齐 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

原生广告 (Native)

这是展示特定尺寸的原生模板的原生广告。原生广告经过优化,适合在竖屏游戏(竖屏游戏)中使用。原生广告不接收 onClose() 回调。因此,必须在其他位置调用 destroy() 来结束广告。

 

当前模板支持smallmedium尺寸。

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

 

small 模板中的 PositionType 是最顶部或最底部,默认值是最底部。

对齐 说明 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

奖励广告 (Rewarded)

用户在观看广告超过一定时间后会获得奖励的奖励广告。当奖励发放完成后,会通过 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() {
                // 加载 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

奖励型插页广告 (Rewarded Interstitial)

用户在观看广告超过一定时间后可以获得奖励的奖励型插页广告。完成奖励发放后,将通过 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() {
                // 加载 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小时后调用show(),将自动重新加载广告并显示广告。一旦广告显示过一次后,广告将不会自动加载。

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() {
                // 加载 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