iOS 版
Adiz iOS¶
Adiz iOS 是一个为 Hive 平台提供的 iOS 广告模块,旨在简化使用 AdMob 提供的广告曝光功能。Adiz iOS 提供的广告类型如下。
- 插页广告
- 横幅广告
- 原生广告
- 激励广告
- 激励插页广告
- 应用打开广告
要安装和使用 Adiz iOS,请按照下面的指南进行。
准备¶
安装¶
将 GADApplicationIdentifier
键添加到您的 Xcode 项目的 Info.plist 文件中,并将 AdMobId
值(格式为 ca-app-pub-XXXXX~YYYYY)作为该键的值输入。
此外,对于 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.3'
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 可以通过两种方式显示测试广告。
- 激活测试模式:仅显示由 AdMob 发布的测试广告
- 注册测试设备后显示广告:显示实际广告进行测试,确保没有无效流量发生,并通过注册将显示测试广告的设备进行操作
激活测试模式¶
在开发阶段,激活测试模式,以便点击测试广告不会向广告主收费。当测试模式被激活时,只会显示测试广告。在测试模式下,即使在控制台中未输入 AdMob 广告密钥,也会显示测试广告。在商业发布期间禁用测试模式。
有两种方法可以激活测试模式。
<
Note
在开发阶段的非测试模式下,过多点击广告可能被视为无效流量,您的 AdMob 账户可能会被报告,从而阻止广告的显示。
使用 Adiz.setTestMode() 方法¶
测试设备广告曝光¶
在以下情况下,您需要注册一个测试设备以显示测试广告。
<
在测试设备上显示广告有两种方式。
Note
如果您进行测试而未注册测试设备,实际广告可能会被视为无效流量,您的AdMob帐户可能会被阻止,从而无法进一步展示广告。当您注册测试设备时,在广告展示期间将显示“测试模式”或“测试广告”(原生广告)。在商业分发期间,您必须停用测试设备。
使用 Adiz.setTestDevice() 方法¶
要注册测试设备,您首先需要检查测试设备 ID。测试设备 ID(例如: B74F6468-1516-467C-99AD-CC5973C5DB52
)可以通过以下两种方式确认。
Adiz.Initialize()
调用并检查 Logcat 日志:- 在调用
Adiz.Initialize()
之后,无论广告类型如何,在调用initialize()
→load()
之后检查 Logcat 日志:
在检查测试设备ID后,在现有的 Hive Adiz 初始化代码中执行 Adiz.initialize
之前,添加行 Adiz.SetTestDevice(DEVICE_ID)
。将复制的测试设备ID输入到 DEVICE_ID
中。
广告检查器使用¶
广告检查器是一个应用内叠加工具,实时分析在测试设备上请求和显示实际广告的过程。它会告知您加载广告所需的时间,并提供任何显示失败的原因。您还可以指定特定的广告网络,以检查广告是否正确显示,如果存在问题,您可以在代码级别进行调试。所有这些都是与广告检查器用户界面结合进行的。它包含在 iOS 的 Google Mobile Ads SDK 版本 7.68.0 及以上版本中,可以通过调用 AdizDeveloperTool.OpenAdInspector
使用。
要使用广告检查器,必须设置测试设备上的广告曝光。
Adiz AppID 设置¶
设置您在 Hive 控制台 AppCenter 中注册的 Adiz AppID。如果未设置,将使用 Bundle ID。
Hive 控制台服务器配置¶
设置 Hive 控制台服务器以供使用。默认值为 real
。即使您使用生产服务器,启用测试模式也只会显示测试广告。
- Hive 测试控制台服务器:
AdizZoneType.test
- Hive 沙盒控制台服务器:
AdizZoneType.sandbox
- Hive 生产控制台服务器:
AdizZoneType.real
用户特定广告曝光¶
随着在 iOS 14.5+ 中引入的 ATT(应用追踪透明度),隐私得到了加强。因此,只有在用户同意在 ATT 同意弹窗中进行活动追踪的情况下,才能显示用户特定的广告。为了通过展示用户特定的广告来最大化广告收入,您需要编写 IDFA(广告商标识符)消息。
在 Google AdMob 控制面板上写入并发布 IDFA 消息,如下所示。
您可以在编写 IDFA 消息时参考下面的指南。
在编写和发布IDFA消息后,设置用户跟踪访问权限。按照以下步骤将键添加到Info.plist。
- 在 Xcode 项目窗口的项目导航器中选择您的项目。
- 从 TARGETS 列表中选择您的应用。
- 点击 Info 选项卡。
- 在 Info 选项卡中点击 Custom iOS Target Properties 项。
- 在 Custom iOS Target Properties 列表中右键点击。
- 点击 Add Row 菜单。
- 在 Key 字段中输入 NSUserTrackingUsageDescription,并在 Value 字段中添加 Localization file > Base.Iproj folder > InfoPlist.strings 中指定的值。
接下来,写一条消息,请求来自多语言配置文件中指定的应用用户的权限批准(常规设置 > 访问权限请求设置)。如果您不输入权限批准请求弹出消息,将缺少关于正在使用的用户访问权限的附加说明指南,这将导致应用审核时被拒绝。
如果您已完成到此步骤,ATT 同意弹出窗口将在 Adiz 初始化 期间自动显示。当用户在 ATT 同意弹出窗口上点击“允许”时,IDFA 将被激活,并显示个性化广告。
GDPR同意弹窗展示(欧洲,英国)¶
如果游戏面向欧洲和英国(欧洲经济区和英国),则必须显示GDPR(通用数据保护条例)同意弹窗。只有当用户的设备IP地址来自欧洲和英国(欧洲经济区和英国)时,GDPR同意弹窗才会显示。Adiz通过Google UMP(用户消息平台)支持GDPR同意弹窗的展示。在AdMob控制台中创建GDPR消息后,初始化Adiz以向来自欧洲和英国的用户展示GDPR弹窗。
Warning
当目标区域在欧洲和英国以外时,例如,如果您计划仅在国内提供服务,您可以跳过 GDPR 同意弹出窗口曝光(欧洲,英国) 步骤,并使用 Adiz.initializeForNonGDPR()
方法进行初始化。
如果您使用 Adiz.initialize()
方法进行初始化,则必须在 AdMob 控制台中创建 GDPR 消息,以便 Adiz 初始化正常进行。
Warning
如果您正在使用 Hive SDK,您必须在完成 Hive Adiz 的初始化后运行 AuthV4.setup
。如果在显示 ATT(应用追踪透明度)同意通知后出现 GDPR 同意屏幕,您的应用可能会在 Apple 应用审核过程中被拒绝。
编写 GDPR 消息¶
访问 Google AdMob 控制台以编写 GDPR 消息。在编写 GDPR 消息之前,请参考GDPR 消息编写指南。
在起草GDPR消息时,您必须将您希望使用的调解添加到广告合作伙伴列表中。
以下是添加调解的方法。
1) 在 Google AdMob 仪表板中,转到 隐私与消息 > 欧洲法规 > 设置 选项卡,然后点击 '广告合作伙伴审核 > 自定义广告合作伙伴' 的编辑图标。 2) 检查所有根据 GDPR 认证的 Google 媒介合作伙伴以批量添加,或仅选择所需的媒介合作伙伴并点击 添加。
如果您已编写GDPR消息,则在初始化Adiz时,GDPR同意弹出窗口将自动出现。
GDPR同意/撤回功能的实现¶
GDPR同意弹窗中的项目必须提供用户随时修改其同意状态的能力。例如,用户可能最初没有同意GDPR,但可能希望再次同意以查看个性化广告;或者相反,用户可能最初同意了GDPR,但可能不再希望提供个人信息并想撤回其同意。为了应对这些情况,应用程序开发者必须实现允许用户重新同意每个项目或撤回其现有同意的功能。要实现GDPR同意/撤回功能,请按照以下步骤操作。
- 在应用中实现一个按钮 UI,可以重新打开 GDPR 同意弹窗。
- 在实现 Adiz 初始化 时,调用
isPrivacyOptionsRequired()
来向来自欧洲和英国的用户显示按钮 UI,其他情况下不显示。如果来自欧洲或英国的用户点击该按钮,调用showPrivacyOptionsForm
以重新打开 GDPR 同意弹窗。这允许用户随时通过按下应用中的“管理选项”按钮来修改他们对 GDPR 细节的同意。下面的showPrivacyOptionsForm
是一个为了示例目的而任意实现的方法,开发者可以根据需要更改实现。
import HiveAdiz
func initialize(_ appId: String) {
// ...
// isPrivacyOptionsRequired is default false
targetViewController.showPrivacyFormButton.isEnabled = AdizConsentManager.isPrivacyOptionsRequired()
// HiveAdiz 初始化
Adiz.initialize(targetViewController) { error, json in
// ...
// showPrivacyOptionsForm 按钮启用检查
targetViewController.showPrivacyFormButton.isEnabled = AdizConsentManager.isPrivacyOptionsRequired()
// ...
}
}
func showPrivacyOptionsForm(_ targetViewController: UIViewController) {
// 显示GDPR表单
if AdizConsentManager.isPrivacyOptionsRequired() {
AdizConsentManager.showPrivacyOptionsForm(targetViewController) { error in
// 无需进行任何错误处理。
}
}
}
#import <HiveAdiz/HiveAdiz-Swift.h>
- (void)initialize: (NSString *)appId {
// ...
// isPrivacyOptionsRequired is default false
targetViewController.showPrivacyFormButton.enabled = [AdizGDPRManager isPrivacyOptionsRequired];
// HiveAdiz 初始化
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
// 显示隐私选项表单按钮启用检查
targetViewController.showPrivacyFormButton.enabled = [AdizConsentManager isPrivacyOptionsRequired];
// ...
}];
}
- (void)showPrivacyOptionsForm: (UIViewController*) targetViewController {
// 显示GDPR表单
if ([AdizConsentManager isPrivacyOptionsRequired]) {
[AdizConsentManager showPrivacyOptionsForm: targetViewController handler:^(AdizError *error) {
// 无需进行任何错误处理。
}];
}
}
为GDPR同意年龄以下的用户设置标签 (TFUA)¶
您可以使用未成年同意标签(TFUA)将居住在欧洲经济区(EEA)、英国和瑞士的用户视为有限数据处理的对象,以进行广告请求。对于针对儿童的应用程序,您可以使用 AdizConsentManager.SetUserPrivacySettings
将用户设置为未满同意年龄。虽然欧洲各国之间存在一些差异,但GDPR将需要父母同意的年龄定义为16岁以下。未成年同意设置必须在执行 Adiz.initialize
之前配置。
Warning
同时将GDPR同意年龄标签setTagForUnderAgeOfConsent
和COPPA儿童目标设置setTagForChildDirectedTreatment
都设置为true
将导致COPPA儿童目标设置setTagForChildDirectedTreatment
优先。因此,请不要同时将两者都设置为true
并同时使用它们。
Note
Hive SDK v4 24.2.0 或更高版本,与 Adiz 2.0.1 或更高版本一起使用时,Hive SDK 的同意年龄设置将自动适用于同意年龄以下的用户。
然而,如果用户在执行 Adiz.initialize
之前直接调用 AdizConsentManager.setUserPrivacySettings
API,则 Hive SDK 定义的同意年龄设置将不适用,并且在 AdizConsentManager.setUserPrivacySettings
API 调用期间设置的值将优先考虑。
func initialize(_ appId: String) {
bool isTagForUnderAgeOfConsent = false // Change to true if underage
let privacySet = PrivacySettings.Builder()
.setTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)
AdizConsentManager.setUserPrivacySettings(privacySet.build())
// HiveAdiz 初始化
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
- (void)initialize: (NSString *)appId {
bool isTagForUnderAgeOfConsent = false; // Change to true if underage
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 测试设备。
- 通过初始化来初始化Adiz。这是一个初始化步骤,用于检查测试设备ID,无需编写GDPR同意消息。
检查调试日志以确认设备ID的消息。下面的消息是一个示例。
要为此设备启用调试模式,请设置:UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52] 检查消息中的设备ID(示例:
B74F6468-1516-467C-99AD-CC5973C5DB52
)。- 复制设备ID。
- 在现有的Adiz初始化代码中,在执行
Adiz.initialize
之前添加Adiz.setTestDevice(DEVICE_ID)
。 - 编写GDPR同意消息并重新初始化Adiz,以确保GDPR同意弹出窗口正确显示。
- (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 = '2.1.3'
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
设置中删除重复值,如下列表所示。
(Adiz 2.1.3 - 截至2025/01/21: 165)
<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>zmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ns5j362hk7.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() | 广告结束
| 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
错误代码¶
在接收到onFail()
于Adiz.Initialize
和AdizListener
时,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同意弹出窗口,或者处于不需要显示的状态 |
广告展示和广告终止¶
要展示和终止广告,请按照以下步骤操作。
- 为您想要显示的每种广告类型在广告类中创建一个广告实例。如果您想要显示的广告不是默认广告,则需要输入从初始化获得的广告密钥或投放 ID。如果您不输入广告密钥(
hiveAdKey
)或投放 ID(placementId
),将创建一个默认广告实例。投放 ID 可以在 Hive 控制台中设置,更多详细信息,请参阅控制台指南中的Admob 设置页面。 - 加载您想要显示的广告(
load()
)。 - 显示已加载的广告(
show()
)。要重新显示广告,您必须再次调用load()
,然后调用show()
。 - 要关闭广告,请调用
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() {
// 加载 AdizInterstitial
if let ad = self.interstitialAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 显示 AdizInterstitial
if let ad = self.interstitialAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 销毁 AdizInterstitial
self.interstitialAd?.destroy()
self.interstitialAd = nil
}
}
extension InitViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface InitViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizInterstitial* interstitialAd;
@end
@implementation InitViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
// 创建一个插页广告实例。
self.interstitialAd = [AdizInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizInterstitial 实例 (ViewController, placementId, AdizListener)
// 创建一个插页广告实例。
self.interstitialAd = [AdizInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizInterstitial
if (self.interstitialAd != nil && [self.interstitialAd isInitialized]) {
[self.interstitialAd load];
}
}
- (void) requestShowAd {
// 显示 AdizInterstitial
if (self.interstitialAd != nil && [self.interstitialAd isLoaded]) {
[self.interstitialAd show];
}
}
- (void) requestDestroyAd {
// 销毁 AdizInterstitial
if (self.interstitialAd != nil) {
[self.interstitialAd destroy];
self.interstitialAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
@end
横幅广告 (Banner)¶
这是一个显示特定尺寸横幅的广告。横幅广告不会接收 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
}
}
扩展 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()
来关闭广告。
当前模板支持small
或medium
尺寸。
尺寸点(宽 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() {
// Destroy AdizNative
self.nativeAd?.destroy()
self.nativeAd = nil
}
}
extension NativeViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface NativeViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizNative* nativeAd;
@end
@implementation NativeViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
}
else {
// 初始化默认的 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
self.nativeAd = [AdizNative initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizNative
if (self.nativeAd != nil && [self.nativeAd isInitialized]) {
[self.nativeAd load];
}
}
- (void) requestShowAd {
// 设置位置类型
PositionType position = PositionTypeTop;
// 显示 AdizNative
if (self.nativeAd != nil && [self.nativeAd isLoaded]) {
[self.nativeAd show: position];
}
}
- (void) requestDestroyAd {
// 销毁 AdizNative
if (self.nativeAd != nil) {
[self.nativeAd destroy];
self.nativeAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
@end
奖励广告¶
这是一个奖励广告,用户在观看广告一定时间后会获得奖励。一旦奖励被授予,奖励项目的信息将通过onRewarded()
回调接收。
import UIKit
import HiveAdiz
class RewardViewController: UIViewController {
// 创建 AdizRewarded 实例
var rewardAd: AdizRewarded?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// 初始化默认的 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
self.rewardAd = AdizRewarded.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
}
else {
// 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// Load AdizRewarded
if let ad = self.rewardAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 显示 AdizRewarded
if let ad = self.rewardAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 销毁 AdizRewarded
self.rewardAd?.destroy()
self.rewardAd = nil
}
}
扩展 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() {
// 加载 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() {
// 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