iOS
Adiz iOS¶
Adiz iOS是AdMob提供的广告展示功能的iOS广告模块,旨在更方便地使用Hive平台提供的服务。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() 方法¶
測試設備的廣告曝光¶
在以下情況下,必須註冊測試設備以顯示測試廣告。
<
測試設備上顯示廣告的方法有兩種。
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。
廣告檢查器活用¶
廣告檢查器是一個在測試設備上實際請求廣告後,實時分析廣告曝光過程的應用內疊加工具。它告訴您加載廣告所需的時間,如果曝光失敗,則會告訴您失敗的原因。您還可以指定特定的廣告網絡,以確認廣告是否能夠良好曝光,如果有問題,可以在代碼層面進行調試。這一切過程都與廣告檢查UI一起進行。它包含在 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支持GDPR同意彈出窗口的顯示,使用Google UMP(用戶消息平台)。在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 是默認為 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
PrivacySettingsBuilder* privacySet = [[PrivacySettingsBuilder alloc] init];
privacySet = [builder setTagForUnderAgeOfConsent: isTagForUnderAgeOfConsent];
[AdizConsentManager setUserPrivacySettings: [privacySet build]];
// HiveAdiz 初始化
[Adiz 初始化: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
}];
}
GDPR 測試設備設定¶
GDPR 同意彈出窗口僅在設備 IP 地址為歐洲及英國 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 步 | 將 AppLovin 廣告來源添加到 AdMob | 將 Pangle 廣告來源添加到 AdMob | 將 Unity Ads 廣告來源添加到 AdMob | 將 Meta 廣告來源添加到 AdMob |
第 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 {
// Called when the ad is displayed.
NSLog(@"[TestAdizListener] onShow");
}
- (void) onClick {
// 被点击广告时调用。
NSLog(@"[TestAdizListener] onClick");
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
// 當廣告產生收益時被調用。
NSLog(@"[TestAdizListener] onPaidEvent: %@ %f", [revenueData getCurrency], [revenueData getRevenue]);
double revenue = [revenueData getRevenue]; // 廣告曝光時的收益
NSString* currency = [revenueData getCurrency]; // 廣告曝光時的收益貨幣代碼
}
- (void) onClose {
// 當廣告關閉時調用。
// 橫幅廣告和原生廣告沒有 onClose 回調。
NSLog(@"[TestAdizListener] onClose");
}
- (void) onRewarded:(RewardItem *)rewardItem {
// 當觀看廣告時獲得獎勵時調用。
NSLog(@"[TestAdizListener] onRewarded");
NSLog(@"金額: %ld 類型: %@", (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
}
}
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 常數 |
---|---|---|
最上方對齊 | 指定以 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() {
// Destroy 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() {
// Load AdizNative
if let ad = self.nativeAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 設定位置類型
var position: PositionType = .top
// 顯示 AdizNative
if let ad = self.nativeAd,
ad.isLoaded() {
ad.show(position)
}
}
func requestDestroyAd() {
// 銷毀 AdizNative
self.nativeAd?.destroy()
self.nativeAd = nil
}
}
extension NativeViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface NativeViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizNative* nativeAd;
@end
@implementation NativeViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
// 設定橫幅大小
BannerSize bannerSize = BannerSizeNormal;
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
// 設定橫幅大小
BannerSize bannerSize = BannerSizeNormal;
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizNative 实例 (ViewController, placementId, BannerSize, AdizListener)
self.nativeAd = [AdizNative initializeWithPlacementId:self placementId:placementId size: bannerSize adizListener:self];
}
else {
// 初始化默认 AdizNative 实例 (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestLoadAd {
// 載入 AdizNative
if (self.nativeAd != nil && [self.nativeAd isInitialized]) {
[self.nativeAd load];
}
}
- (void) requestShowAd {
// 設定位置類型
PositionType position = PositionTypeTop;
// 顯示 AdizNative
if (self.nativeAd != nil && [self.nativeAd isLoaded]) {
[self.nativeAd show: position];
}
}
- (void) requestDestroyAd {
// 銷毀 AdizNative
if (self.nativeAd != nil) {
[self.nativeAd destroy];
self.nativeAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
@end
獎勵型廣告 (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() {
// 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() {
// Destroy AdizRewarded
self.rewardAd?.destroy()
self.rewardAd = nil
}
}
extension RewardViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
func onRewarded(_ rewardItem: RewardItem) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface RewardedViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewarded* rewardedAd;
@end
@implementation RewardedViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizRewarded 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认的 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizRewarded 实例 (ViewController, placementId, AdizListener)
self.rewardedAd = [AdizRewarded initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认 AdizRewarded 实例 (ViewController, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 載入 AdizRewarded
if (self.rewardedAd != nil && [self.rewardedAd isInitialized]) {
[self.rewardedAd load];
}
}
- (void) requestShowAd {
// 顯示 AdizRewarded
if (self.rewardedAd != nil && [self.rewardedAd isLoaded]) {
[self.rewardedAd show];
}
}
- (void) requestDestroyAd {
// 銷毀 AdizRewarded
if (self.rewardedAd != nil) {
[self.rewardedAd destroy];
self.rewardedAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
- (void) onRewarded:(RewardItem *)rewardItem {
}
@end
獎勵型插頁廣告 (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() {
// Load AdizRewardedInterstitial
if let ad = self.rewardInterstitialAd,
ad.isInitialized() {
ad.load()
}
}
func requestShowAd() {
// 顯示 AdizRewardedInterstitial
if let ad = self.rewardInterstitialAd,
ad.isLoaded() {
ad.show()
}
}
func requestDestroyAd() {
// 銷毀 AdizRewardedInterstitial
self.rewardInterstitialAd?.destroy()
self.rewardInterstitialAd = nil
}
}
extension RewardInterstitialViewController: AdizListener {
func onLoad() {
// requestShowAd()
}
func onFail(_ error: AdizError) {
}
func onShow() {
}
func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
func onRewarded(_ rewardItem: RewardItem) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface RewardedInterstitialViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewardedInterstitial* rewardedInterstitialAd;
@end
@implementation RewardedInterstitialViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, hiveAdKey, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// 初始化默认的 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
}
}
- (void) requestInitAdWithPlacementId: (NSString*)placementId {
if (placementId != nil && ![placementId isEqualToString:@""]) {
// 初始化 AdizRewardedInterstitial 实例 (ViewController, placementId, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initializeWithPlacementId:self placementId:placementId adizListener:self];
}
else {
// 初始化默认的 AdizRewardedInterstitial 实例 (ViewController, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// 加載 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isInitialized]) {
[self.rewardedInterstitialAd load];
}
}
- (void) requestShowAd {
// 顯示 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil && [self.rewardedInterstitialAd isLoaded]) {
[self.rewardedInterstitialAd show];
}
}
- (void) requestDestroyAd {
// 銷毀 AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil) {
[self.rewardedInterstitialAd destroy];
self.rewardedInterstitialAd = nil;
}
}
#pragma mark - AdizListener
- (void) onLoad {
// [self requestShowAd];
}
- (void) onFail:(AdizError *)error {
}
- (void) onShow {
}
- (void) onClick {
}
- (void) onPaidEvent:(AdRevenueData *)revenueData {
}
- (void) onClose {
// [self requestDestroyAd];
}
- (void) onRewarded:(RewardItem *)rewardItem {
}
@end
應用程式開啟廣告 (AppOpen)¶
當應用程式狀態從背景切換到前景時,顯示預先加載的(load()
)廣告的應用程式開啟廣告。廣告加載後經過3小時後調用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() {
// Destroy 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