跳轉至

iOS

Adiz iOS

Adiz iOS 是一個針對 iOS 的廣告模組,提供於 Hive 平台上,以便更輕鬆地使用 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];
}


廣告檢查器使用

廣告檢查器是一個應用內的疊加工具,實時分析在測試設備上請求和顯示實際廣告的過程。它告知您加載廣告所需的時間,並提供任何顯示失敗的原因。您還可以指定特定的廣告網絡,以檢查廣告是否正確顯示,如果有問題,您可以在代碼層面進行調試。所有這些都是與廣告檢查器 UI 一起完成的。它包含在 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 将被激活,并显示个性化广告。

如果遊戲針對歐洲和英國 (EEA & UK),則必須顯示 GDPR (通用數據保護條例) 同意彈出窗口。只有當用戶的設備 IP 地址來自歐洲和英國 (EEA & UK) 時,才會顯示 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 (APP Tracking Transparency) 同意通知後出現 GDPR 同意畫面,您的應用可能會在 Apple 應用審核期間被拒絕。

撰寫 GDPR 訊息

訪問 Google AdMob 控制台以撰寫 GDPR 訊息。在撰寫 GDPR 訊息之前,請參考GDPR 訊息撰寫指南

在撰寫GDPR消息時,您必須將您希望使用的調解添加到廣告合作夥伴列表中。
以下是添加調解的方法。

1) 前往 Google AdMob 儀表板中的 隱私與消息 > 歐洲法規 > 設定 標籤,然後點擊 '廣告合作夥伴審查 > 自訂廣告合作夥伴' 的編輯圖示。 2) 檢查所有根據 GDPR 認證的媒介合作夥伴以批量添加,或僅選擇所需的媒介合作夥伴並點擊 添加

如果您已經編寫了GDPR消息,GDPR同意彈出窗口將在Adiz初始化時自動出現。

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 是默认的 false
                targetViewController.showPrivacyFormButton.enabled = [AdizGDPRManager isPrivacyOptionsRequired];

                // HiveAdiz 初始化   
                [Adiz 初始化: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
                        // ...
                        // showPrivacyOptionsForm 按鈕啟用檢查
                        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


    PrivacySettingsBuilder* privacySet = [[PrivacySettingsBuilder alloc] init];
    privacySet = [builder setTagForUnderAgeOfConsent: isTagForUnderAgeOfConsent];

    [AdizConsentManager setUserPrivacySettings: [privacySet build]];

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

GDPR 測試設備設置

只有當設備的 IP 地址來自歐洲或英國時,GDPR 同意彈出窗口才會顯示。在開發階段,可以強制顯示 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同意屏幕,則應用程序可能會在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) 用戶在基於獎勵的廣告(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() // Reward item type
                var itemAmount = rewardItem.getItemAmount() // Reward item quantity    }}
#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 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()

插播廣告

佔據整個螢幕的全螢幕廣告。

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() {
                // Show AdizInterstitial
                if let ad = self.interstitialAd,
                    ad.isLoaded() {
                        ad.show()
                        }
        }

        func requestDestroyAd() {
                // Destroy 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() {
                // Load 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() {
                // Load 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() {
                // Show AdizRewarded
                if let ad = self.rewardAd,
                    ad.isLoaded() {
                        ad.show()
                }
        }

        func requestDestroyAd() {
                // Destroy 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() {
                // Show AdizRewardedInterstitial
                if let ad = self.rewardInterstitialAd,
                    ad.isLoaded() {
                        ad.show()
                }
        }     

        func requestDestroyAd() {
                // Destroy 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