iOS 版
Adiz iOS¶
Adiz iOS是AdMob提供的广告展示功能,旨在更方便地使用Hive平台提供的iOS广告模块。Adiz iOS提供的广告形式如下。
- 全屏广告(Interstitial)
- 横幅广告(Banner)
- 原生广告(Native)
- 奖励广告(Rewarded)
- 奖励全屏广告(Rewarded Interstitial)
- 应用开启广告(AppOpen)
请按照以下指南逐步参考以安装和使用Adiz iOS。
预备工作¶
Adiz iOS 开发环境的配置。
安装¶
在 Xcode 项目的 Info.plist 文件中添加 GADApplicationIdentifier
键,并将 AdMobId
值(格式为 ca-app-pub-XXXXX~YYYYY)输入为该键的值。
另外,在 iOS 14 及以上版本中,请参考 更新您的 info.plist 指南,将 SKAdNetwork
列表添加到 Info.plist 文件中。
接下来,在项目的 CocoaPods 设置(Podfile)中添加以下内容。
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git'
platform :ios, '12.0'
target 'UnityFramework' do
pod 'HiveAdiz', '2.1.0'
end
target 'Unity-iPhone' do
end
use_frameworks!
# 修复在使用项目时 pods 中的 dyld 问题
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# xcode 15 工具链问题
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
# 结束
config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 12.0
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
通过$pod install
应用CocoaPod设置。
测试广告设置¶
Adiz可以通过两种方式展示测试广告。
- 启用测试模式:仅显示AdMob发放的测试广告
- 注册测试设备后显示广告:为了测试实际广告,进行测试以避免无效流量,并注册将显示测试广告的设备进行操作
测试模式激活¶
在开发阶段,为了确保点击测试广告不会向广告主收费,激活测试模式。激活测试模式后,只会显示测试广告。在测试模式下,即使不在控制台中输入 AdMob 广告密钥,也会显示测试广告。在商业发布时,请禁用测试模式。
测试模式激活方法有两种。
Note
在开发阶段,如果不是测试模式,过多点击广告将被视为无效流量,可能会导致 AdMob 账户被举报,从而无法展示广告。
使用 Adiz.setTestMode() 方法¶
测试设备广告曝光¶
在以下情况下,需要注册测试设备以展示测试广告。
<
测试设备上展示广告的方法有两种。
-
在注册测试设备到 Hive 控制台后,将其设置为 广告单元 ID 使用(推荐):
请参考控制台指南中的 测试设备管理 内容。 -
使用Adiz类的
setTestDevice()
方法:
请参考下面的示例代码。
Note
如果在未注册测试设备的情况下进行实际广告展示的测试,将被视为无效流量,可能导致AbMob账户被封禁,并且无法再展示广告。注册测试设备后,广告展示时将显示“测试模式”或“测试广告”(原生广告)。在商业发布时,必须禁用测试设备。
使用 Adiz.setTestDevice() 方法¶
要注册测试设备,首先需要确认测试设备 ID。测试设备 ID(例如:B74F6468-1516-467C-99AD-CC5973C5DB52
)可以通过以下两种方法确认。
Adiz.Initialize()
调用后检查 Logcat 日志:Adiz.Initialize()
调用后,无论广告类型如何,initialize()
→load()
调用后检查 Logcat 日志:
在确认测试设备 ID 后,在现有的 HiveAdiz 初始化代码中,在执行 Adiz.initialize
之前添加 Adiz.SetTestDevice(DEVICE_ID)
行。DEVICE_ID
中输入复制的测试设备 ID。
广告检查器使用¶
广告检查器是一个在测试设备上请求实际广告并实时分析曝光过程的应用内覆盖工具。它会告诉您加载广告所需的时间,如果曝光失败,它会告知失败原因。您还可以指定特定的广告网络,以检查广告是否正常曝光,如果有问题,可以在代码级别进行调试。所有这些过程都与广告检查用户界面一起进行。它包含在 Google Mobile Ads SDK iOS 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(广告标识符)消息。
AdMob 仪表板中,请按照以下 IDFA 消息编写指南编写并发布消息。
编写和发布 IDFA 消息后,设置用户追踪访问权限。请按照以下步骤在 Info.plist 中添加键。
- 在 Xcode 项目窗口的项目导航器中选择您的项目。
- 在 TARGETS 列表中选择您的应用。
- 点击 Info 选项卡。
- 点击 Info 选项卡中的 Custom iOS Target Properties 项目。
- 在 Custom iOS Target Properties 列表中右键点击。
- 点击 Add Row 菜单。
- 在 Key 项中输入 NSUserTrackingUsageDescription,并在 Value 项中添加 多语言设置文件 > Base.Iproj 文件夹 > InfoPlist.strings 中指定的值。
接下来,请编写请求多语言设置文件中(常规设置 > 访问权限请求设置)指定的应用用户的权限批准消息。如果不输入权限批准请求弹窗消息,将缺少对正在使用的用户访问权限的额外说明指南,导致应用审核时被拒绝(Reject)。
如果到这里都完成了,Adiz 初始化 时会自动显示 ATT 同意弹窗。在 ATT 同意弹窗中,用户点击“允许”后,IDFA 将被激活,用户特定广告将被显示。
GDPR同意弹窗展示(欧洲,英国)¶
如果游戏针对欧洲和英国(EEA & UK),则必须展示GDPR(欧洲联盟通用数据保护条例)同意弹窗。GDPR同意弹窗仅在用户设备的IP地址为欧洲和英国(EEA & UK)IP地址时展示。Adiz支持通过Google UMP(用户消息平台)展示GDPR同意弹窗。在AdMob控制台中编写GDPR消息后,初始化Adiz,GDPR弹窗将展示给来自欧洲和英国地区的用户。
Warning
针对欧洲及英国以外的地区,例如如果只计划在国内提供服务,可以跳过GDPR同意弹窗曝光(欧洲,英国)步骤,并使用Adiz.initializeForNonGDPR()
方法进行初始化。
如果使用Adiz.initialize()
方法进行初始化,则必须在AdMob控制台中编写GDPR消息,才能正常进行Adiz初始化。
GDPR 消息编写¶
访问 Google AdMob 控制台以编写 GDPR 消息。在编写 GDPR 消息之前,请先参考 GDPR 消息编写指南。
如果您编写了 GDPR 消息,Adiz 初始化 时将自动显示 GDPR 同意弹窗。
Warning
如果使用Hive SDK,则必须在完成Hive Adiz初始化后执行AuthV4.setup
。如果在显示ATT(应用追踪透明度)同意通知后出现GDPR同意屏幕,Apple应用审核可能会拒绝该应用。
实现 GDPR 同意/撤回功能¶
GDPR 同意弹窗中的项目应提供用户随时修改同意状态的功能。例如,用户最初可能不同意 GDPR,但为了查看个性化广告希望再次同意,或者相反,用户最初同意了 GDPR,但不再希望提供个人信息而希望撤回同意。为了应对这些情况,应用开发者需要实现各项的重新同意或撤回现有同意的功能。要实现 GDPR 同意/撤回功能,请按照以下步骤进行。
- 在应用程序中实现一个按钮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 初始化: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
// 显示隐私选项表单按钮启用检查
targetViewController.showPrivacyFormButton.enabled = [AdizConsentManager isPrivacyOptionsRequired];
// ...
}];
}
- (void)showPrivacyOptionsForm: (UIViewController*) targetViewController {
// 显示GDPR表单
if ([AdizConsentManager isPrivacyOptionsRequired]) {
[AdizConsentManager showPrivacyOptionsForm: targetViewController handler:^(AdizError *error) {
// 无需进行任何错误处理。
}];
}
}
GDPR 同意年龄以下用户的标签(TFUA)设置¶
可以使用GDPR同意年龄以下用户的标签(Tag For Under the Age of Consent, TFUA)在广告请求时将居住在欧洲经济区(EEA)、英国和瑞士的用户视为有限数据处理对象。对于面向儿童的应用,可以使用AdizConsentManager.SetUserPrivacySettings
来设置用户的同意年龄以下。虽然各欧洲国家之间存在一些差异,但GDPR规定16岁以下需要父母同意。必须在执行Adiz.initialize
之前设置同意年龄以下的设置。
Warning
如果同时将GDPR同意年龄以下标签设置为setTagForUnderAgeOfConsent
和COPPA儿童目标设置为setTagForChildDirectedTreatment
设置为true
,则COPPA儿童目标设置setTagForChildDirectedTreatment
将优先应用,因此请勿同时将它们设置为true
。
Note
Hive SDK v4 24.2.0 以上和 Adiz 2.0.1 以上一起使用时,Hive SDK 设置的同意年龄以下用户状态会自动应用,因此无需调用 AdizConsentManager.SetUserPrivacySettings
。
func initialize(_ appId: String) {
bool isTagForUnderAgeOfConsent = false // 如果是儿童则更改为 true
let privacySet = PrivacySettings.Builder()
.setTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)
AdizConsentManager.setUserPrivacySettings(privacySet.build())
// HiveAdiz 初始化
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
- (void)initialize: (NSString *)appId {
bool isTagForUnderAgeOfConsent = false; // 如果是儿童则更改为 true
隐私设置构建器* privacySet = [[隐私设置构建器 alloc] init];
privacySet = [builder setTagForUnderAgeOfConsent: isTagForUnderAgeOfConsent];
[AdizConsentManager setUserPrivacySettings: [privacySet build]];
// HiveAdiz 初始化
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
}];
}
GDPR 测试设备设置¶
GDPR 同意弹窗仅在设备 IP 地址为欧洲和英国 IP 地址时才会显示。在开发阶段,可以强制显示 GDPR 同意弹窗以测试弹窗的显示,因此需要设置 GDPR 测试设备。请按照以下步骤设置 GDPR 测试设备。
- 初始化 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 同意弹窗是否正常显示。
```swift
func initialize(_ appId: String) {
// ...
// 在 Adiz.initialize 之前设置 TestDevice。示例 @"B74F6468-1516-467C-99AD-CC5973C5DB52"
Adiz.setTestDevice("B74F6468-1516-467C-99AD-CC5973C5DB52")
// HiveAdiz 初始化
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
```
```obj
- (void)initialize: (NSString *)appId {
// ...
// 在 Adiz.initialize 之前设置 TestDevice。示例 @"B74F6468-1516-467C-99AD-CC5973C5DB52"
[Adiz setTestDevice: @"B74F6468-1516-467C-99AD-CC5973C5DB52"];
// HiveAdiz 初始化
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
}];
}
```
COPPA儿童目标处理标签设置¶
根据儿童在线隐私保护法(COPPA)的目的,应用开发者可以通过儿童目标处理标签设置(tagForChildDirectedTreatment, TFCD)来指定Google在广告请求时是否将内容处理为儿童内容。如果希望将其处理为儿童内容,则必须在执行Adiz.initialize
之前调用AdizConsentManager.SetUserPrivacySettings
。在同时使用Adiz和Hive SDK时,儿童目标处理标签会自动应用,因此无需单独设置。
```swift
func initialize(_ appId: String) {
bool isTagForChildDirectedTreatment = false // 如果是儿童则更改为 true
let privacySet = PrivacySettings.Builder()
.setTagForChildDirectedTreatment(isTagForUnderAgeOfConsent)
AdizConsentManager.setUserPrivacySettings(privacySet.build())
// HiveAdiz 初始化
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
```
```obj
- (void)initialize: (NSString *)appId {
bool isTagForChildDirectedTreatment = false; // 如果是儿童则更改为 true
PrivacySettingsBuilder* privacySet = [[PrivacySettingsBuilder alloc] init];
privacySet = [builder setTagForChildDirectedTreatment: isTagForChildDirectedTreatment];
[AdizConsentManager setUserPrivacySettings: [privacySet build]];
// HiveAdiz 初始化
[Adiz 初始化: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
}];
}
```
添加广告调解¶
Adiz可以使用AdMob调解来展示广告。要添加AdMob调解,请遵循以下步骤。
添加 AdMob 中介¶
在 AdMob 控制台中进行广告源集成工作。按照下面的表格进行操作。
AppLovin | Pangle | Unity Ads | Meta | |
---|---|---|---|---|
步骤 1 | 设置 AppLovin 配置 | 设置 Pangle 配置 | 设置 Unity Ads 配置 | 设置 Meta 配置 |
步骤 2 | 向 AdMob 添加 AppLovin 广告源 | 向 AdMob 添加 Pangle 广告源 | 向 AdMob 添加 Unity Ads 广告源 | 向 AdMob 添加 Meta 广告源 |
步骤 3 | 添加 Adiz 适配器 |
添加 Adiz 适配器¶
在CocoaPods Podfile中添加依赖。
# ...
$HIVE_ADIZ_VERSION = '2.1.0'
def adiz
pod 'HiveAdiz', $HIVE_ADIZ_VERSION
end
def adizAdapter
pod 'HiveAdizAdapterAppLovin', $HIVE_ADIZ_VERSION
pod 'HiveAdizAdapterPangle', $HIVE_ADIZ_VERSION
pod 'HiveAdizAdapterUnityAds', $HIVE_ADIZ_VERSION
pod 'HiveAdizAdapterMeta', $HIVE_ADIZ_VERSION
end
target 'MyGame-mobile' do
adiz
adizAdapter
end
# ...
为了确认 Adiz 适配器配置是否正确应用,请在运行应用后在 广告检查器 屏幕上检查配置列表。
Adiz 初始化¶
这是在展示所有类型广告之前必须执行的步骤。进行 Adiz 初始化后,可以获得展示广告所需的广告密钥。如果处于测试模式,将会获得测试密钥。如果使用 Hive SDK,则在调用 AuthV4.setup
之后进行 Adiz 初始化。
Warning
如果使用GDPR设置,则在完成Hive Adiz初始化后必须执行AuthV4.setup
。如果在显示ATT(应用追踪透明度)同意通知后出现GDPR同意屏幕,应用可能会在Apple应用审核中被拒绝。
import HiveAdiz
// 初始化 Hive Adiz
Adiz.initialize(targetViewController) { error, json in
if error.isSuccess,
let responseList = json?["keys"] as? [[String:Any]] {
var interstitialKeyList = [String]()
var bannerKeyList = [String]()
var nativeKeyList = [String]()
var rewardedKeyList = [String]()
var rewardedInterstitialKeyList = [String]()
var appOpenKeyList = [String]()
for response in responseList {
if let isDefault = response["is_default"] as? Bool,
isDefault == false {
let hiveAdKey = response["key"] as? String ?? ""
let hiveForm = response["form"] as? String ?? ""
switch hiveForm {
case "interstitial": interstitialKeyList.append(hiveAdKey)
case "banner": bannerKeyList.append(hiveAdKey)
case "native": nativeKeyList.append(hiveAdKey)
case "rewarded": rewardedKeyList.append(hiveAdKey)
case "rewarded_interstitial": rewardedInterstitialKeyList.append(hiveAdKey)
case "app_open": appOpenKeyList.append(hiveAdKey)
default: break
}
}
}
print("interstitialKeyList \(interstitialKeyList)");
print("bannerKeyList \(bannerKeyList)");
print("nativeKeyList \(nativeKeyList)");
print("rewardedKeyList \(rewardedKeyList)");
print("rewardedInterstitialKeyList \(rewardedInterstitialKeyList)");
print("appOpenKeyList \(appOpenKeyList)");
}
}
#import <HiveAdiz/HiveAdiz-Swift.h>
// 初始化 Hive Adiz
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
if([error isSuccess] && json[@"keys"] != nil) {
NSArray* responseList = json[@"keys"];
NSMutableArray<NSString*> *interstitialKeyList = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *bannerKeyList = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *nativeKeyList = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *rewardedKeyList = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *rewardedInterstitialKeyList = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *appOpenKeyList = [[NSMutableArray alloc] init];
for (NSDictionary* response in responseList) {
// 这是一个设置广告键列表的示例(is_default = false),当您想直接放置广告键时。
if (response[@"is_default"] != nil && [response[@"is_default"] boolValue] == false) {
NSString* hiveAdKey = response[@"key"];
NSString* hiveForm = response[@"form"];
if ([hiveForm isEqualToString: @"interstitial"]) {
[interstitialKeyList addObject: hiveAdKey];
} else if ([hiveForm isEqualToString: @"banner"]) {
[bannerKeyList addObject: hiveAdKey];
} else if ([hiveForm isEqualToString: @"native"]) {
[nativeKeyList addObject: hiveAdKey];
} else if ([hiveForm isEqualToString: @"rewarded"]) {
[rewardedKeyList addObject: hiveAdKey];
} else if ([hiveForm isEqualToString: @"rewarded_interstitial"]) {
[rewardedInterstitialKeyList addObject: hiveAdKey];
} else if ([hiveForm isEqualToString: @"app_open"]) {
[appOpenKeyList addObject: hiveAdKey];
}
}
}
NSLog(@"interstitialKeyList %@", interstitialKeyList);
NSLog(@"bannerKeyList %@", bannerKeyList);
NSLog(@"nativeKeyList %@", nativeKeyList);
NSLog(@"rewardedKeyList %@", rewardedKeyList);
NSLog(@"rewardedInterstitialKeyList %@", rewardedInterstitialKeyList);
NSLog(@"appOpenKeyList %@", appOpenKeyList);
}
}];
初始化执行时作为回调接收的 JSON 文件中包含广告键列表。广告键列表的格式如下。
{
"keys":[
{
"mediation_id":5,
"key":"ca-app-pub-3940256099942544/5354046379",
"form":"rewarded_interstitial",
"is_default":true,
"placement_id":"lobby01"
},
{
"mediation_id":4,
"key":"ca-app-pub-3940256099942544/5224354917",
"form":"rewarded",
"is_default":true,
"placement_id":"game02"
},
{
"mediation_id":3,
"key":"ca-app-pub-3940256099942544/2247696110",
"form":"native",
"is_default":true,
"placement_id":"event01"
},
{
"mediation_id":1,
"key":"ca-app-pub-3940256099942544/1033173712",
"form":"interstitial",
"is_default":true,
"placement_id":"mission01"
},
{
"mediation_id":2,
"key":"ca-app-pub-3940256099942544/6300978111",
"form":"banner",
"is_default":true,
"placement_id":"main01"
},
{
"mediation_id":6,
"key":"ca-app-pub-3940256099942544/9257395921",
"form":"app_open",
"is_default":true,
"placement_id":"appopen01"
}
]
}
在测试模式下初始化时,即使没有在控制台注册AdMob广告密钥,也会收到测试广告密钥列表。在商业模式下初始化时,会收到在控制台注册的AdMob广告密钥列表。
每种广告形式(form
)都使用一个广告作为默认广告(即"is_default":true
的广告)。在首次注册某种广告形式时,首次注册的广告将成为默认广告。默认广告在创建广告实例(initialize()
)时不需要输入广告键(hiveAdKey
)。要更改默认广告,必须在控制台中删除现有的默认广告并重新注册广告。
广告回调监听器设置¶
每次创建广告实例时,实现 AdizListener
可以根据广告状态变化接收回调。
名称 | 描述 | 必需实现 |
---|---|---|
onLoad() | 广告加载成功 | O |
onFail(error: AdizError) | 失败(可以通过error.getCode() 和error.getMessage() 了解失败原因) | O |
onShow() | 广告展示成功 | O |
onClick() | 广告点击 | O |
onPaidEvent(_ revenueData: AdRevenueData) | 广告曝光后收到付费事件的时刻,广告收入信息被传递 | O |
onClose() | 广告结束
| X |
onRewarded(_ rewardItem: RewardItem) | 在奖励广告(rewarded , rewarded interstitial )展示广告后,用户获得奖励的时刻 | X |
import HiveAdiz
class TestAdizListener: AdizListener {
func onLoad() {
// 当广告加载时调用。
// 如果广告加载成功,您需要在合适的时机调用广告实例的 .show() 来显示广告。
print("[\(delegateTypeName)] onLoad")
}
func onFail(_ error: AdizError) {
// 如果广告加载失败或由于其他原因广告显示失败时调用。
print("[\(delegateTypeName)] onFail: ")
print("(\(error.getCode())) \(error.getMessage() ?? "")")
}
func onShow() {
// 当广告显示时调用。
print("[\(delegateTypeName)] onShow")
}
func onClick() {
// 当广告被点击时调用。
print("[\(delegateTypeName)] onClick")
}
func onPaidEvent(_ revenueData: AdRevenueData) {
// 当广告产生收入时调用。
print("[\(delegateTypeName)] onPaidEvent: \(revenueData.getCurrency()) \(revenueData.getRevenue().description)")
var revenue = revenueData.getRevenue() // 广告曝光时的收入
var currency = revenueData.getCurrency() // 广告曝光时的收入货币代码
}
func onClose() {
// 当广告关闭时调用。
// 横幅广告、原生广告没有 onClose 回调。
print("[\(delegateTypeName)] onClose")
}
func onRewarded(_ rewardItem: RewardItem) {
// 当观看广告获得奖励时调用,适用于奖励广告和奖励插播广告。
print("[\(delegateTypeName)] onRewarded")
print("amount: \(rewardItem.getItemAmount()) type: \(rewardItem.getItemType())")
var itemType = rewardItem.getItemType() // 奖励物品类型
var itemAmount = rewardItem.getItemAmount() // 奖励物品数量 }}
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface TestAdizListener : NSObject<AdizListener>
@end
@implementation TestAdizListener
- (void) onLoad {
// 当广告加载时调用。
// 如果广告加载成功,您需要在所需位置调用广告实例的 .show() 来显示广告。
NSLog(@"[TestAdizListener] onLoad");
}
- (void) onFail:(AdizError *)error {
// 如果广告加载失败或由于其他原因广告显示失败,则调用此方法。
NSLog(@"[TestAdizListener] onFail: ");
NSLog(@"errorCode: %ld, errorMessage: %@", (long)[error getCode], [error getMessage]);
}
- (void) onShow {
// 当广告显示时调用。
NSLog(@"[TestAdizListener] onShow");
}
- (void) onClick {
// 点击广告时调用。
NSLog(@"[TestAdizListener] onClick");
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
// 当广告产生收入时调用。
NSLog(@"[TestAdizListener] onPaidEvent: %@ %f", [revenueData getCurrency], [revenueData getRevenue]);
double revenue = [revenueData getRevenue]; // 广告曝光时的收入
NSString* currency = [revenueData getCurrency]; // 广告曝光时的收入货币代码
}
- (void) onClose {
// 广告关闭时调用。
// 横幅广告和原生广告没有 onClose 回调。
NSLog(@"[TestAdizListener] onClose");
}
- (void) onRewarded:(RewardItem *)rewardItem {
// 当观看广告时发生奖励时调用,适用于奖励和奖励插页广告。
NSLog(@"[TestAdizListener] onRewarded");
NSLog(@"amount: %ld type: %@", (long)[rewardItem getItemAmount], [rewardItem getItemType]);
NSString* itemType = [rewardItem getItemType]; // 奖励物品类型
NSInteger itemAmount = [rewardItem getItemAmount]; // 奖励物品数量
}
@end
错误代码¶
当在 Adiz.Initialize
和 AdizListener
中接收到 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 同意弹窗或无需展示的状态 |
广告曝光与广告结束¶
要曝光和结束广告,请按照以下步骤操作。
- 根据要展示的广告形式,在广告类中创建广告实例。如果要展示的广告不是默认广告,则需要输入在初始化中获得的广告键或位置 ID。如果不输入广告键(
hiveAdKey
)或位置 ID(placementId
),将创建默认广告实例。位置 ID 可以在 Hive 控制台中设置,更多详细信息请参阅控制台指南中的Admob 设置页面。 - 加载要展示的广告(
load()
)。 - 展示加载的广告(
show()
)。要重新展示广告,必须先调用load()
,然后再调用show()
。 - 要结束广告,请调用
destroy()
。
全屏广告 (Interstitial)¶
占据整个屏幕的全屏广告。
import UIKit
import HiveAdiz
class InitViewController: UIViewController {
// 创建一个插页式广告实例。
var interstitialAd: AdizInterstitial?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
self.interstitialAd = AdizInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = AdizInterstitial.initialize(self, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizInterstitial 实例 (ViewController, placementId, AdizListener)
self.interstitialAd = AdizInterstitial.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = AdizInterstitial.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// Load AdizInterstitial
if let ad = self.interstitialAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 显示 AdizInterstitial
if let ad = self.interstitialAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 销毁 AdizInterstitial
self.interstitialAd?.destroy()
self.interstitialAd = nil
}
}
扩展 InitViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface InitViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizInterstitial* interstitialAd;
@end
@implementation InitViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
// 创建一个插页广告实例。
self.interstitialAd = [AdizInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizInterstitial 实例 (ViewController, placementId, AdizListener)
// 创建一个插页广告实例。
self.interstitialAd = [AdizInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizInterstitial 实例 (ViewController, AdizListener)
self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizInterstitial
if (self.interstitialAd != nil && [self.interstitialAd isInitialized]) {
[self.interstitialAd load];
}
}
- (void) requestShowAd {
// 显示 AdizInterstitial
if (self.interstitialAd != nil && [self.interstitialAd isLoaded]) {
[self.interstitialAd show];
}
}
- (void) requestDestroyAd {
// 销毁 AdizInterstitial
if (self.interstitialAd != nil) {
[self.interstitialAd destroy];
self.interstitialAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
@end
横幅广告 (Banner)¶
这是显示特定尺寸横幅的横幅广告。横幅广告不接收 onClose()
回调。因此,必须在其他位置调用 destroy()
来结束广告。
BannerSize
遵循标准横幅尺寸。
尺寸点 (宽度x高度) | 说明 | 支持对象 | BannerSize 常量 |
---|---|---|---|
320x50 | 横幅 | 手机和平板 | BannerSize.normal |
320x100 | 大型横幅 | 手机和平板 | BannerSize.medium |
300x250 | IAB 中型矩形 | 手机和平板 | BannerSize.large |
468 x 60 | IAB 全尺寸横幅 | 平板 | BannerSize.full |
PositionType
是最上面或最下面。默认值是最下面。
对齐 | 描述 | PositionType 常量 |
---|---|---|
最顶部对齐 | 指定相对于 SafeArea 的屏幕最顶部对齐 | PositionType.top |
最底部对齐(默认值) | 指定相对于 SafeArea 的屏幕最底部对齐 | PositionType.bottom |
import UIKit
import HiveAdiz
class BannerViewController: UIViewController {
// 创建 AdizBanner 实例
// 创建一个横幅广告实例。
var bannerAd: AdizBanner?
func requestInitAd(hiveAdKey: String?) { // 设置横幅大小
var bannerSize: BannerSize = .normal
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizBanner 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
}
else {
// 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initialize(self, size: bannerSize, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) { // 设置横幅大小
var bannerSize: BannerSize = .normal
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizBanner 实例 (ViewController, placementId, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initializeWithPlacementId(self, placementId: placementId, size: bannerSize, adizListener: self)
}
else {
// 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initialize(self, size: bannerSize, adizListener: self)
}
}
func requestLoadAd() {
// 加载 AdizBanner
if let ad = self.bannerAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 设置位置类型
var position: PositionType = .top
// 显示 AdizBanner
if let ad = self.bannerAd,
ad.isLoaded() {
ad.show(position)
}
}
func requestDestroyAd() {
// 销毁 AdizBanner
self.bannerAd?.destroy()
self.bannerAd = nil
}
}
extension BannerViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface BannerViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizBanner* bannerAd;
@end
@implementation BannerViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizBanner 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
} else {
// 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizBanner 实例 (ViewController, placementId, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
} else {
// 初始化默认 AdizBanner 实例 (ViewController, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizBanner
if (self.bannerAd != nil && [self.bannerAd isInitialized]) {
[self.bannerAd load];
}
}
- (void) requestShowAd {
// 设置位置类型
PositionType position = PositionTypeTop;
// 显示 AdizBanner
if (self.bannerAd != nil && [self.bannerAd isLoaded]) {
[self.bannerAd show: position];
}
}
- (void) requestDestroyAd {
// 销毁 AdizBanner
if (self.bannerAd != nil) {
[self.bannerAd destroy];
self.bannerAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
@end
原生广告 (Native)¶
这是展示特定尺寸的原生模板的原生广告。原生广告经过优化,适合在竖屏游戏(竖屏游戏)中使用。原生广告不接收 onClose()
回调。因此,必须在其他位置调用 destroy()
来结束广告。
当前模板支持small
或medium
尺寸。
尺寸点 (宽度x高度) | 模板 | 对齐 | BannerSize 常量 |
---|---|---|---|
355x91 (比例调整) | 小尺寸 | 顶部 / 底部 | BannerSize.normal |
355x370 (比例调整) | 中尺寸 | 居中 (固定) | BannerSize.medium, BannerSize.large, BannerSize.full |
small
模板中的 PositionType
是最顶部或最底部,默认值是最底部。
对齐 | 说明 | PositionType 常量 |
---|---|---|
最顶部对齐 | 指定屏幕最顶部对齐 | PositionType.top |
最底部对齐(默认值) | 指定屏幕最底部对齐 | PositionType.bottom |
medium
模板无法选择对齐方式,默认使用居中对齐。
import UIKit
import HiveAdiz
class NativeViewController: UIViewController {
// 创建 AdizNative 实例
var nativeAd: AdizNative?
func requestInitAd(hiveAdKey: String?) {
// 设置横幅大小
var bannerSize: BannerSize = .normal
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = AdizNative.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = AdizNative.initialize(self, size: bannerSize, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
// 设置横幅大小
var bannerSize: BannerSize = .normal
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
self.nativeAd = AdizNative.initializeWithPlacementId(self, placementId: placementId, size: bannerSize, adizListener: self)
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = AdizNative.initialize(self, size: bannerSize, adizListener: self)
}
}
func requestLoadAd() {
// 加载 AdizNative
if let ad = self.nativeAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 设置位置类型
var position: PositionType = .top
// 显示 AdizNative
if let ad = self.nativeAd,
ad.isLoaded() {
ad.show(position)
}
}
func requestDestroyAd() {
// 销毁 AdizNative
self.nativeAd?.destroy()
self.nativeAd = nil
}
}
extension NativeViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface NativeViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizNative* nativeAd;
@end
@implementation NativeViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
// 设置横幅大小
BannerSize bannerSize = BannerSizeNormal;
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
self.nativeAd = [AdizNative initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
}
else {
// 初始化默认的 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizNative
if (self.nativeAd != nil && [self.nativeAd isInitialized]) {
[self.nativeAd load];
}
}
- (void) requestShowAd {
// 设置位置类型
PositionType position = PositionTypeTop;
// 显示 AdizNative
if (self.nativeAd != nil && [self.nativeAd isLoaded]) {
[self.nativeAd show: position];
}
}
- (void) requestDestroyAd {
// 销毁 AdizNative
if (self.nativeAd != nil) {
[self.nativeAd destroy];
self.nativeAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
@end
奖励广告 (Rewarded)¶
用户在观看广告超过一定时间后会获得奖励的奖励广告。当奖励发放完成后,会通过 onRewarded()
回调接收到奖励项目的信息。
import UIKit
import HiveAdiz
class RewardViewController: UIViewController {
// 创建 AdizRewarded 实例
var rewardAd: AdizRewarded?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
self.rewardAd = AdizRewarded.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
}
else {
// 初始化默认的 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// 加载 AdizRewarded
if let ad = self.rewardAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 显示 AdizRewarded
if let ad = self.rewardAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 销毁 AdizRewarded
self.rewardAd?.destroy()
self.rewardAd = nil
}
}
extension RewardViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
func onRewarded(_ rewardItem: RewardItem) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface RewardedViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewarded* rewardedAd;
@end
@implementation RewardedViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
self.rewardedAd = [AdizRewarded initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizRewarded
if (self.rewardedAd != nil && [self.rewardedAd isInitialized]) {
[self.rewardedAd load];
}
}
- (void) requestShowAd {
// 显示 AdizRewarded
if (self.rewardedAd != nil && [self.rewardedAd isLoaded]) {
[self.rewardedAd show];
}
}
- (void) requestDestroyAd {
// 销毁 AdizRewarded
if (self.rewardedAd != nil) {
[self.rewardedAd destroy];
self.rewardedAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
- (void) onRewarded:(RewardItem *)rewardItem {
}
@end
奖励型插页广告 (Rewarded Interstitial)¶
用户在观看广告超过一定时间后可以获得奖励的奖励型插页广告。完成奖励发放后,将通过 onRewarded()
回调接收奖励项目的信息。
import UIKit
import HiveAdiz
class RewardInterstitialViewController: UIViewController {
// 创建 AdizRewardedInterstitial 实例
var rewardInterstitialAd: AdizRewardedInterstitial?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// 初始化默认的 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, placementId, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
}
else {
// 初始化默认 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// 加载 AdizRewardedInterstitial
if let ad = self.rewardInterstitialAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 显示 AdizRewardedInterstitial
if let ad = self.rewardInterstitialAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 销毁 AdizRewardedInterstitial
self.rewardInterstitialAd?.destroy()
self.rewardInterstitialAd = nil
}
}
extension RewardInterstitialViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
func onRewarded(_ rewardItem: RewardItem) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface RewardedInterstitialViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewardedInterstitial* rewardedInterstitialAd;
@end
@implementation RewardedInterstitialViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, placementId, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isInitialized]) {
[self.rewardedInterstitialAd load];
}
}
- (void) requestShowAd {
// 显示 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isLoaded]) {
[self.rewardedInterstitialAd show];
}
}
- (void) requestDestroyAd {
// 销毁 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil) {
[self.rewardedInterstitialAd destroy];
self.rewardedInterstitialAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
- (void) onRewarded:(RewardItem *)rewardItem {
}
@end
应用启动广告 (AppOpen)¶
当应用状态从后台切换到前台时,显示预先加载的(load()
)广告的应用启动广告。在广告加载后经过3小时后调用show()
,将自动重新加载广告并显示广告。一旦广告显示过一次后,广告将不会自动加载。
import UIKit
import HiveAdiz
class AppOpenViewController: UIViewController {
// 创建 AdizAppOpen 实例
var appOpenAd: AdizAppOpen?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// 初始化 AdizAppOpen 实例 (ViewController, hiveAdKey, AdizListener)
self.appOpenAd = AdizAppOpen.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// 初始化默认的 AdizAppOpen 实例 (ViewController, AdizListener)
self.appOpenAd = AdizAppOpen.initialize(self, adizListener: self)
}
}
func requestInitAdWithPlacementId(placementId: String?) {
if let placementId = placementId,
placementId.count > 0 {
// 初始化 AdizAppOpen 实例 (ViewController, placementId, AdizListener)
self.appOpenAd = AdizAppOpen.initializeWithPlacementId(self, placementId: placementId, adizListener: self)
}
else {
// 初始化默认 AdizAppOpen 实例 (ViewController, AdizListener)
self.appOpenAd = AdizAppOpen.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// 加载 AdizAppOpen
if let ad = self.appOpenAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
print("[appOpenAd] appOpenAd don't request Show")
}
func requestDestroyAd() {
// 销毁 AdizAppOpen
self.appOpenAd?.destroy()
self.appOpenAd = nil
}
}
extension AppOpenViewController: AdizListener {
func onLoad() {
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface AppOpenViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizAppOpen* appOpenAd;
@end
@implementation AppOpenViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizAppOpen 实例 (ViewController, hiveAdKey, AdizListener)
self.appOpenAd = [AdizAppOpen initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认 AdizAppOpen 实例 (ViewController, AdizListener)
self.appOpenAd = [AdizAppOpen initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizAppOpen 实例 (ViewController, placementId, AdizListener)
self.appOpenAd = [AdizAppOpen initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizAppOpen 实例 (ViewController, AdizListener)
self.appOpenAd = [AdizAppOpen initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加载 AdizAppOpen
if (self.appOpenAd != nil && [self.appOpenAd isInitialized]) {
[self.appOpenAd load];
}
}
- (void) requestShowAd {
NSLog(@"[appOpenAd] appOpenAd don't request Show");
}
- (void) requestDestroyAd {
// 销毁 AdizAppOpen
if (self.appOpenAd != nil) {
[self.appOpenAd destroy];
self.appOpenAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
@end