Ios
Adiz iOS¶
Adiz iOS เป็นโมดูลโฆษณาสำหรับ iOS ที่จัดทำโดย Hive เพื่อทำให้การใช้ฟีเจอร์การแสดงโฆษณาที่มีให้โดย AdMob ง่ายขึ้น ประเภทของโฆษณาที่จัดทำโดย Adiz iOS มีดังนี้:
- โฆษณาแบบระหว่างหน้า
- โฆษณาแบบแบนเนอร์
- โฆษณาแบบเนทีฟ
- โฆษณาแบบให้รางวัล
- โฆษณาแบบระหว่างหน้าที่ให้รางวัล
- โฆษณาเปิดแอป
ในการติดตั้งและใช้ Adiz iOS โปรดดูคู่มือด้านล่างตามลำดับ
ข้อกำหนดเบื้องต้น¶
กำหนดค่า สภาพแวดล้อมการพัฒนา iOS ของ Adiz.
การติดตั้ง¶
เพิ่มคีย์ GADApplicationIdentifier
ลงในไฟล์ Info.plist ของโปรเจกต์ Xcode และเพิ่มค่า AdMobId
(รูปแบบ ca-app-pub-XXXXX~YYYYY) เป็นค่าของคีย์นี้
นอกจากนี้ บน iOS 14 ขึ้นไป โปรดดูที่คู่มือ Update your 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 'HiveAdizUnityPlugin', '2.0.1'
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 ใน Hive Console เพื่อแสดงโฆษณาทดสอบ ปิดโหมดทดสอบสำหรับการจัดจำหน่ายเชิงพาณิชย์.
Note
ถ้าคุณคลิกโฆษณามากเกินไปเมื่อไม่ได้อยู่ในโหมดทดสอบในระหว่างขั้นตอนการพัฒนา อาจถือว่าเป็นการเข้าชมที่ไม่ถูกต้องและบัญชี AdMob ของคุณอาจถูกแจ้งรายงาน ซึ่งจะทำให้คุณไม่สามารถแสดงโฆษณาได้
การตั้งค่าอุปกรณ์ทดสอบสำหรับการแสดงโฆษณา¶
คุณควรลงทะเบียนอุปกรณ์ทดสอบเพื่อแสดงโฆษณาทดสอบในสถานการณ์ต่อไปนี้:
- เมื่อต้องการทดสอบว่า AdMob ad key ที่ลงทะเบียนใน Hive Console ทำงานได้อย่างถูกต้อง
- เมื่อต้องการตรวจสอบว่า GDPR consent popup ทำงานอย่างถูกต้องหลังจากที่คุณเขียน GDPR message
- เมื่อต้องการเรียกใช้ Ad Inspector เพื่อวิเคราะห์และแก้ไขปัญหาคำขอโฆษณา
การทดสอบด้วยโฆษณาจริงโดยไม่ลงทะเบียนอุปกรณ์ทดสอบอาจถือเป็นการเข้าชมที่ไม่ถูกต้อง ซึ่งอาจทำให้บัญชี AdMob ของคุณถูกบล็อกและไม่สามารถแสดงโฆษณาได้อีกต่อไป เมื่อคุณลงทะเบียนอุปกรณ์ทดสอบ โหมดทดสอบหรือโฆษณาทดสอบ (สำหรับโฆษณาเนทีฟ) จะถูกแสดงระหว่างการแสดงโฆษณา อุปกรณ์ทดสอบควรถูกปิดใช้งานสำหรับการปรับใช้ในผลิตภัณฑ์
แบนเนอร์, อินเตอร์สติชัล, หรือโฆษณาแบบให้รางวัล
ในการลงทะเบียนอุปกรณ์ทดสอบ ให้ระบุหมายเลขประจำตัวอุปกรณ์ทดสอบก่อน หมายเลขประจำตัวอุปกรณ์ทดสอบ (เช่น B74F6468-1516-467C-99AD-CC5973C5DB52
) สามารถพบได้โดยใช้สองวิธีต่อไปนี้:
- ตรวจสอบบันทึก Logcat หลังจากเรียกใช้
Adiz.Initialize()
:
เพื่อเปิดใช้งานโหมดดีบักสำหรับอุปกรณ์นี้ ให้ตั้งค่า: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
- ตรวจสอบบันทึก Logcat หลังจากเรียกใช้
Adiz.Initialize()
และจากนั้นเรียกใช้initialize()
→load()
โดยไม่คำนึงถึงประเภทโฆษณา:
GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ "B74F6468-1516-467C-99AD-CC5973C5DB52" ]
หลังจากระบุรหัสอุปกรณ์ทดสอบแล้ว ให้เพิ่มบรรทัด Adiz.SetTestDevice(DEVICE_ID)
ก่อนที่จะดำเนินการ Adiz.initialize
ในโค้ดการเริ่มต้น Adiz ที่มีอยู่ เปลี่ยน DEVICE_ID
เป็นรหัสอุปกรณ์ทดสอบที่คัดลอกมา
การใช้เครื่องมือการตรวจสอบโฆษณา¶
เครื่องมือการตรวจสอบโฆษณาคือเครื่องมือที่เป็นเลเยอร์ในแอปพลิเคชันที่ช่วยให้สามารถวิเคราะห์กระบวนการขอและแสดงโฆษณาจริงบนอุปกรณ์ทดสอบได้แบบเรียลไทม์ มันจะแจ้งให้คุณทราบถึงเวลาที่ใช้ในการโหลดโฆษณา และหากการแสดงผลล้มเหลว มันจะให้เหตุผลสำหรับความล้มเหลว นอกจากนี้คุณยังสามารถระบุเครือข่ายโฆษณาเฉพาะเพื่อเช็คว่าโฆษณาแสดงผลอย่างถูกต้องหรือไม่ และหากมีปัญหาใด ๆ คุณสามารถดีบักที่ระดับโค้ดได้ ทั้งหมดนี้ดำเนินการผ่าน UI ของเครื่องมือการตรวจสอบโฆษณา มันรวมอยู่ใน Google Mobile Ads SDK iOS เวอร์ชัน 7.68.0 ขึ้นไป และสามารถใช้งานได้โดยการเรียกใช้ AdizDeveloperTool.OpenAdInspector
.
ในการใช้ Ad Inspector ต้องมีเงื่อนไขสองประการต่อไปนี้:
- ตั้งค่าอุปกรณ์ทดสอบด้วย
Adiz.setTestDevice
ที่นี่ - ทำการเริ่มต้นให้เสร็จสิ้นด้วย
Adiz.Initialize
ที่นี่
การตั้งค่า appID ของ Adiz¶
ตั้งค่า Adiz AppID ที่คุณลงทะเบียนใน Hive Console AppCenter หากไม่ได้ตั้งค่านี้ มันจะใช้ Bundle ID
การตั้งค่า Hive Console server¶
ตั้งค่า Hive Console server ที่คุณต้องการใช้ ค่าเริ่มต้นคือ real
แม้ว่าคุณจะใช้เซิร์ฟเวอร์เชิงพาณิชย์ โฆษณาทดสอบจะแสดงหากเปิดใช้งานโหมดทดสอบ
- Hive เซิร์ฟเวอร์คอนโซลทดสอบ:
AdizZoneType.test
- Hive เซิร์ฟเวอร์คอนโซลแซนด์บ็อกซ์:
AdizZoneType.sandbox
- Hive เซิร์ฟเวอร์คอนโซลเชิงพาณิชย์:
AdizZoneType.real
การเปิดเผยโฆษณาที่เฉพาะเจาะจงสำหรับผู้ใช้¶
ด้วยการแนะนำ ATT (App Tracking Transparency) ใน iOS 14.5+ การปกป้องความเป็นส่วนตัวได้รับการเสริมสร้างขึ้น ดังนั้นโฆษณาที่เฉพาะเจาะจงสำหรับผู้ใช้จึงสามารถเปิดเผยได้เฉพาะเมื่อผู้ใช้ยินยอมให้ติดตามกิจกรรมในป๊อปอัปการยินยอม ATT เท่านั้น เพื่อเพิ่มรายได้จากโฆษณาโดยการเปิดเผยโฆษณาที่เฉพาะเจาะจงสำหรับผู้ใช้ จำเป็นต้องสร้างข้อความ IDFA (Identifier for Advertisers)
สร้างและเผยแพร่ข้อความ IDFA ของคุณตามคำแนะนำในแดชบอร์ด AdMob
หลังจากสร้างและเผยแพร่ข้อความ IDFA แล้ว ให้ตั้งค่าการอนุญาตติดตามผู้ใช้ ปฏิบัติตามขั้นตอนด้านล่างเพื่อเพิ่มคีย์ไปยัง Info.plist。
- เลือกโปรเจกต์ของคุณในตัวนำทางโปรเจกต์ของหน้าต่างโปรเจกต์ Xcode.
- ในรายการ TARGETS ให้เลือกแอปของคุณ.
- คลิกที่แท็บ Info.
- คลิกที่ส่วน Custom iOS Target Properties ในแท็บ Info.
- คลิกขวาในรายการ Custom iOS Target Properties.
- คลิกที่เมนู Add Row.
- ป้อน NSUserTrackingUsageDescription ในฟิลด์ Key และเพิ่มค่าที่ระบุใน ไฟล์ Localization > โฟลเดอร์ Base.Iproj > InfoPlist.strings.
ถัดไป เขียนข้อความขออนุญาตจากผู้ใช้แอปตามที่ระบุในไฟล์การแปล (การตั้งค่าทั่วไป > การตั้งค่าการขออนุญาต) หากคุณไม่ป้อนข้อความป๊อปอัปขออนุญาต แอปอาจถูกปฏิเสธระหว่างกระบวนการตรวจสอบเนื่องจากขาดคำแนะนำเพิ่มเติมเกี่ยวกับสิทธิ์การเข้าถึงของผู้ใช้
เมื่อเสร็จสิ้นแล้ว ป๊อปอัพการยินยอม ATT จะถูกแสดงโดยอัตโนมัติเมื่อคุณ เริ่มต้น Adiz หากผู้ใช้คลิก "อนุญาต" บนป๊อปอัพการยินยอม ATT IDFA จะถูกเปิดใช้งาน ทำให้สามารถแสดงโฆษณาที่ปรับให้เหมาะสมกับผู้ใช้ได้
การแสดงป๊อปอัพความยินยอม GDPR (ยุโรปและสหราชอาณาจักร)¶
หากเกมของคุณมีเป้าหมายที่ยุโรปและสหราชอาณาจักร (EEA & สหราชอาณาจักร), จะต้องแสดงป๊อปอัปการยินยอมGDPR (กฎการคุ้มครองข้อมูลทั่วไป) ป๊อปอัปการยินยอมGDPR จะถูกแสดงเฉพาะเมื่อที่อยู่IP ของอุปกรณ์ของผู้ใช้มาจากยุโรปหรือสหราชอาณาจักร (EEA & สหราชอาณาจักร). Adiz รองรับGoogle's UMP (User Messaging Platform) สำหรับการแสดงป๊อปอัปการยินยอมGDPR.
หลังจากสร้าง ข้อความ GDPR ใน คอนโซล AdMob ข้อความป๊อปอัป GDPR จะถูกแสดงให้ผู้ใช้ที่เข้าถึงจากยุโรปและสหราชอาณาจักรเมื่อคุณ เริ่มต้น Adiz .
Warning
แม้ว่าคุณจะกำหนดเป้าหมายไปยังภูมิภาคนอกยุโรปและสหราชอาณาจักร คุณต้องสร้างข้อความ GDPR ในคอนโซล AdMob เพื่อให้การเริ่มต้นของ Adiz ทำงานได้อย่างถูกต้อง.
การสร้างข้อความ GDPR¶
เข้าถึงคอนโซล Google AdMob เพื่อสร้างข้อความ GDPR ก่อนที่จะสร้างข้อความ GDPR โปรดดูที่ คู่มือการสร้างข้อความ GDPR
หลังจากสร้างข้อความ GDPR แล้ว ป๊อปอัปการยินยอม GDPR จะถูกแสดงโดยอัตโนมัติในระหว่างการ เริ่มต้นของ Adiz
การดำเนินการตัวเลือกสำหรับการยินยอม/ถอนการยินยอมตาม 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 เป็นค่าเริ่มต้น false
targetViewController.showPrivacyFormButton.enabled = [AdizConsentManager isPrivacyOptionsRequired];
// HiveAdiz เริ่มต้น
[Adiz initialize: targetViewController handler:^(AdizError * error, NSDictionary<NSString *,id> * json) {
// ...
// ตรวจสอบการเปิดใช้งานปุ่ม showPrivacyOptionsForm
targetViewController.showPrivacyFormButton.enabled = [AdizConsentManager isPrivacyOptionsRequired];
// ...
}];
}
(void)showPrivacyOptionsForm: (UIViewController*) targetViewController {
// แสดงแบบฟอร์ม GDPR
if ([AdizConsentManager isPrivacyOptionsRequired]) {
[AdizConsentManager showPrivacyOptionsForm: targetViewController handler:^(AdizError *error) {
// ไม่จำเป็นต้องจัดการกับข้อผิดพลาดใดๆ
}];
}
}
การตั้งค่า tag สำหรับ under อายุ consent¶
การใช้ Tag สำหรับ Under อายุ Consent (TFUA) คุณสามารถกำหนดการขอข้อมูลโฆษณาให้ถือว่าผู้ใช้ที่อาศัยอยู่ในพื้นที่เศรษฐกิจยุโรป (EEA) สหราชอาณาจักร และสวิตเซอร์แลนด์ เป็นเรื่องที่มีการประมวลผลข้อมูลที่จำกัด สำหรับแอปที่ให้บริการเด็ก คุณสามารถตั้งค่าผู้ใช้ว่าอยู่ต่ำกว่าจำนวนอายุตามกฎหมายโดยใช้ AdizConsentManager.SetUserPrivacySettings
แม้ว่าจะมีความแตกต่างกันระหว่างประเทศในยุโรป GDPR กำหนดอายุที่ต้องได้รับความยินยอมจากผู้ปกครองว่าอยู่ต่ำกว่า 16 ปี การตั้งค่าอายุที่ต้องได้รับความยินยอมต้องถูกกำหนดก่อนที่จะดำเนินการ Adiz.initialize
.
Warning
หากแท็ก GDPR สำหรับผู้ใช้ที่อายุต่ำกว่าความยินยอม setTagForUnderAgeOfConsent
และแท็ก COPPA สำหรับการรักษาที่มุ่งเป้าไปที่เด็ก setTagForChildDirectedTreatment
ถูกตั้งค่าเป็น true
แท็ก COPPA จะมีความสำคัญมากกว่า ดังนั้นจึงไม่ควรใช้ทั้งสองอย่างพร้อมกันโดยตั้งค่าเป็น true
.
Note
เมื่อใช้ Hive SDK v4 24.2.0 หรือสูงกว่าร่วมกับ Adiz 2.0.1 หรือสูงกว่า, Hive SDK จะทำการใช้แท็กโดยอัตโนมัติสำหรับผู้ใช้ที่อายุต่ำกว่าความยินยอมตามอายุของผู้ใช้ ดังนั้นจึงไม่จำเป็นต้องเรียกใช้ AdizConsentManager.SetUserPrivacySettings
.
func initialize(_ appId: String) {
bool isTagForUnderAgeOfConsent = false // change this to true if the user is a child
let privacySet = PrivacySettings.Builder()
.setTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)
AdizConsentManager.setUserPrivacySettings(privacySet.build())
// HiveAdiz initialize
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
(void)initialize: (NSString *)appId {
bool isTagForUnderAgeOfConsent = false; // change this to true if the user is a child
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¶
ป๊อปอัปการยินยอม GDPR จะแสดงเฉพาะเมื่อที่อยู่ IP ของอุปกรณ์มาจากยุโรปหรือสหราชอาณาจักร ในระหว่างการพัฒนา คุณสามารถบังคับให้ป๊อปอัปการยินยอม GDPR แสดงขึ้นโดยไม่คำนึงถึงที่อยู่ IP ของอุปกรณ์เพื่อวัตถุประสงค์ในการทดสอบโดยการตั้งค่าอุปกรณ์ทดสอบ GDPR ทำตามขั้นตอนด้านล่างเพื่อตั้งค่าอุปกรณ์ทดสอบ GDPR เนื้อหาต่อไปนี้เหมือนกับ การแสดงโฆษณาบนอุปกรณ์ทดสอบ.
- เริ่มต้น Adiz. วัตถุประสงค์ของการเริ่มต้นนี้คือการตรวจสอบ ID อุปกรณ์ทดสอบ ดังนั้นคุณไม่จำเป็นต้องสร้างข้อความยินยอม GDPR ล่วงหน้า
-
ค้นหา ID อุปกรณ์ในผลลัพธ์ล็อก Logcat นี่คือตัวอย่างข้อความ:
To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
รับรหัสอุปกรณ์ (ตัวอย่าง:
B74F6468-1516-467C-99AD-CC5973C5DB52
). -
คัดลอก ID อุปกรณ์
- เพิ่ม
Adiz.setTestDevice(DEVICE_ID)
ก่อนที่จะดำเนินการAdiz.initialize
ในโค้ดการเริ่มต้น Adiz ที่มีอยู่ - สร้างข้อความขอความยินยอม GDPR และเริ่มต้น Adiz ใหม่เพื่อให้แน่ใจว่าหน้าต่างป๊อปอัพขอความยินยอม GDPR ปรากฏขึ้นอย่างถูกต้อง
(void)initialize: (NSString *)appId {
// ...
// ตั้งค่า TestDevice ก่อน Adiz.initialize. ตัวอย่าง @"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) กำหนด นักพัฒนาแอปสามารถระบุได้ว่า Google ควรจัดการเนื้อหาเป็นการมุ่งเป้าไปที่เด็กในระหว่างการร้องขอโฆษณาหรือไม่ โดยการตั้งค่าแท็ก tagForChildDirectedTreatment (TFCD) หากคุณต้องการจัดการเนื้อหาเป็นการมุ่งเป้าไปที่เด็ก คุณต้องเรียกใช้ AdizConsentManager.SetUserPrivacySettings
ก่อนที่จะดำเนินการ Adiz.initialize
เมื่อใช้ Adiz กับ SDK ของ Hive แท็กการรักษาที่มุ่งเป้าไปที่เด็กจะถูกนำไปใช้โดยอัตโนมัติ ดังนั้นจึงไม่จำเป็นต้องตั้งค่าเพิ่มเติม
func initialize(_ appId: String) {
bool isTagForChildDirectedTreatment = false // เปลี่ยนเป็น true สำหรับเด็ก
let privacySet = PrivacySettings.Builder()
.setTagForChildDirectedTreatment(isTagForUnderAgeOfConsent)
AdizConsentManager.setUserPrivacySettings(privacySet.build())
// HiveAdiz initialize
Adiz.initialize(targetViewController) { error, json in
// ...
}
}
- (void)initialize: (NSString *)appId {
bool isTagForChildDirectedTreatment = false; // Change to true 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) {
// ...
}];
}
เพิ่ม ad mediation¶
Adiz ช่วยให้คุณสามารถแสดงโฆษณาโดยใช้ AdMob mediation ได้ ทำตามขั้นตอนด้านล่างเพื่อเพิ่ม AdMob mediation.
เพิ่ม AdMob mediation¶
ดำเนินการทำงานรวมแหล่งโฆษณาในคอนโซล AdMob ตามตารางด้านล่าง
AppLovin | Pangle | Unity Ads | Meta | |
---|---|---|---|---|
ขั้นตอนที่ 1 | กำหนดค่า AppLovin | กำหนดค่า Pangle | กำหนดค่า Unity Ads | ตั้งค่าการกำหนดค่า Meta |
ขั้นตอนที่ 2 | เพิ่มแหล่งโฆษณา AppLovin ไปยัง AdMob | เพิ่มแหล่งโฆษณา Pangle ไปยัง AdMob | เพิ่มแหล่งโฆษณา Unity Ads ไปยัง AdMob | เพิ่มแหล่งโฆษณา Meta ไปยัง AdMob |
ขั้นตอนที่ 3 | เพิ่ม Adiz Adapter |
เพิ่ม adiz adapter¶
เพิ่ม dependencies ลงใน CocoaPods Podfile.
# ...
$HIVE_ADIZ_VERSION = '2.0.1'
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 ถูกนำไปใช้อย่างถูกต้อง ให้เรียกใช้แอปและตรวจสอบรายการการกำหนดค่าบนหน้าจอ Ad Inspector.
การเริ่มต้น Adiz¶
การเริ่มต้น Adiz เป็นขั้นตอนที่สำคัญก่อนที่จะเปิดเผยโฆษณาในรูปแบบใดก็ตาม เมื่อคุณเริ่มต้น Adiz คุณจะได้รับกุญแจโฆษณาที่จำเป็นเพื่อแสดงโฆษณา หากโหมดทดสอบเปิดใช้งาน คุณจะได้รับกุญแจทดสอบ หากคุณกำลังใช้ SDK Hive ให้ดำเนินการเริ่มต้น Adiz หลังจากเรียกใช้ AuthV4.setup
Note
หากเกมของคุณมุ่งเป้าไปที่ภูมิภาคยุโรปและอังกฤษ (EEA & UK) และคุณไม่ได้ใช้ Hive SDK คุณจะต้องขอความยินยอมตาม GDPR ก่อนที่จะดำเนินการเริ่มต้น Adiz สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการขอความยินยอมตาม GDPR โปรดตรวจสอบคู่มือ Google AdMob.
import HiveAdiz
// กำลังเริ่มต้น 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>
// กำลังเริ่มต้น 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
},
{
"mediation_id":4,
"key":"ca-app-pub-3940256099942544/5224354917",
"form":"rewarded",
"is_default":true
},
{
"mediation_id":3,
"key":"ca-app-pub-3940256099942544/2247696110",
"form":"native",
"is_default":true
},
{
"mediation_id":1,
"key":"ca-app-pub-3940256099942544/1033173712",
"form":"interstitial",
"is_default":true
},
{
"mediation_id":2,
"key":"ca-app-pub-3940256099942544/6300978111",
"form":"banner",
"is_default":true
},
{
"mediation_id":6,
"key":"ca-app-pub-3940256099942544/9257395921",
"form":"app_open",
"is_default":true
}
]
}
หากคุณเริ่มต้นในโหมดทดสอบ คุณจะได้รับรายการคีย์โฆษณาทดสอบแม้ว่าคุณจะยังไม่ได้ลงทะเบียนคีย์โฆษณา AdMob ใน Hive Console หากคุณเริ่มต้นในโหมดเชิงพาณิชย์ คุณจะได้รับรายการคีย์โฆษณา AdMob ที่ลงทะเบียนใน Hive Console
รูปแบบโฆษณาทุกแบบมีโฆษณาหนึ่งรายการเป็นโฆษณาเริ่มต้น (โฆษณาที่มี "is_default":true
) โฆษณาแรกที่ลงทะเบียนจะกลายเป็นโฆษณาเริ่มต้นสำหรับรูปแบบโฆษณานั้น คุณไม่จำเป็นต้องป้อนคีย์โฆษณา (hiveAdKey
) เมื่อสร้างอินสแตนซ์โฆษณา (initialize()
) สำหรับโฆษณาเริ่มต้น หากต้องการเปลี่ยนโฆษณาเริ่มต้น คุณต้องลบโฆษณาเริ่มต้นที่มีอยู่ใน Hive Console และลงทะเบียนโฆษณาใหม่
การตั้งค่าการฟังการเรียกกลับโฆษณา¶
คุณสามารถรับการเรียกกลับตามการเปลี่ยนแปลงสถานะของโฆษณาโดยการใช้ AdizListener
เมื่อสร้างตัวอย่างโฆษณาแต่ละตัว.
ชื่อ | คำอธิบาย | จำเป็น |
---|---|---|
onLoad() | โหลดโฆษณาสำเร็จ | O |
onFail(error: AdizError) | ล้มเหลว (คุณสามารถเข้าใจเหตุผลในการล้มเหลวผ่าน error.getCode() และ error.getMessage() ) | O |
onShow() | แสดงโฆษณาสำเร็จ | O |
onClick() | โฆษณาถูกคลิก | O |
onPaidEvent(_ revenueData: AdRevenueData) | นี่คือจุดที่ได้รับเหตุการณ์ที่ต้องชำระเงินหลังจากแสดงโฆษณา ในจุดนี้ ข้อมูลรายได้จากโฆษณาจะถูกส่งมอบ | O |
onClose() | โฆษณาถูกปิด * หลังจากปิดโฆษณา หากต้องการแสดงอินสแตนซ์โฆษณาเดียวกันอีกครั้ง คุณต้องเรียก load() และจากนั้นเรียก show() * หากคุณไม่ต้องการแสดงโฆษณาอีกต่อไป ให้เรียก destroy() เพื่อลบอินสแตนซ์โฆษณา | X |
onRewarded(_ rewardItem: RewardItem) | จุดที่ผู้ใช้ได้รับรางวัลหลังจากแสดงโฆษณาสำหรับโฆษณาที่ให้รางวัล (rewarded , rewarded interstitial ) | X |
import HiveAdiz
class TestAdizListener: AdizListener {
func onLoad() {
// Called when the ad is loaded.
// If the ad load is successful, you need to call the ad instance's .show() at the desired point to display the ad.
print("[\(delegateTypeName)] onLoad")
}
func onFail(_ error: AdizError) {
// Called if the ad load failed or the ad display failed for some other reason.
print("[\(delegateTypeName)] onFail: ")
print("(\(error.getCode())) \(error.getMessage() ?? "")")
}
func onShow() {
// Called when the ad is displayed.
print("[\(delegateTypeName)] onShow")
}
func onClick() {
// Called when the ad is clicked.
print("[\(delegateTypeName)] onClick")
}
func onPaidEvent(_ revenueData: AdRevenueData) {
// Called when the revenue for the ad is generated.
print("[\(delegateTypeName)] onPaidEvent: \(revenueData.getCurrency()) \(revenueData.getRevenue().description)")
var revenue = revenueData.getRevenue() // revenue when ad is exposed
var currency = revenueData.getCurrency() // currency code for revenue when ad is exposed
}
func onClose() {
// Called when the ad is closed.
// Banner, Native ads do not have an onClose callback.
print("[\(delegateTypeName)] onClose")
}
func onRewarded(_ rewardItem: RewardItem) {
// Called when a reward occurs for watching the ad in rewarded, rewarded interstitial ads.
print("[\(delegateTypeName)] onRewarded")
print("amount: \(rewardItem.getItemAmount()) type: \(rewardItem.getItemType())")
var itemType = rewardItem.getItemType() // Reward item type
var itemAmount = rewardItem.getItemAmount() // Reward item quantity }}
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface TestAdizListener : NSObject<AdizListener>
@end
@implementation TestAdizListener
- (void) onLoad {
// เรียกเมื่อโฆษณาถูกโหลด
// หากการโหลดโฆษณาสำเร็จ คุณต้องเรียก .show() ของอินสแตนซ์โฆษณาที่จุดที่ต้องการเพื่อแสดงโฆษณา
NSLog(@"[TestAdizListener] onLoad");
}
- (void) onFail:(AdizError *)error {
// Called if the ad load failed or the ad display failed for some other reason.
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 {
// Called when the ad is clicked.
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]; // Reward item type
NSInteger itemAmount = [rewardItem getItemAmount]; // Reward item type quantity
}
@end
รหัสข้อผิดพลาด¶
รหัสข้อผิดพลาดและข้อความข้อผิดพลาดสำหรับ Adiz.Initialize
และ AdizListener
เมื่อได้รับ onFail()
มีดังนี้:
รหัสทั่วไป¶
หมายเลข | กรณี | คำอธิบาย |
---|---|---|
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 | รหัสหน่วยไม่ถูกต้อง |
-107 | MediationNoFill | ตัวปรับการไกล่เกลี่ยไม่สามารถจัดการคำขอโฆษณาได้ |
-108 | AlreadyLoaded | โหลดแล้ว |
-109 | CannotRequestAds | ไม่สามารถขอโฆษณาได้ |
-201 | GdprConsentError | ข้อผิดพลาดการยินยอม GDPR |
-202 | IsNotPrivacyOptionsRequired | ไม่จำเป็นต้องแสดงหรือไม่สามารถแสดงป๊อปอัปการยินยอม GDPR |
การแสดงโฆษณาและการยุติ¶
เพื่อเปิดเผยและยุติโฆษณา ให้ทำตามขั้นตอนเหล่านี้:
- สร้างอินสแตนซ์โฆษณาจากคลาสโฆษณาสำหรับแต่ละประเภทของโฆษณาที่คุณต้องการเปิดเผย หากโฆษณาที่คุณต้องการเปิดเผยไม่ใช่ โฆษณาเริ่มต้น คุณต้องป้อนคีย์โฆษณาที่ได้รับจาก การเริ่มต้น หากคุณไม่ป้อนคีย์โฆษณา (
hiveAdKey
) จะมีการสร้างอินสแตนซ์โฆษณาเริ่มต้น - โหลด (
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 {
// Initialize AdizInterstitial Instance (ViewController, hiveAdKey, AdizListener)
self.interstitialAd = AdizInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// Initialize Default AdizInterstitial Instance (ViewController, AdizListener)
self.interstitialAd = AdizInterstitial.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// Load AdizInterstitial
self.interstitialAd?.load()
}
func requestShowAd() {
// แสดง AdizInterstitial
self.interstitialAd?.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 Instance (ViewController, hiveAdKey, AdizListener)
// สร้างอินสแตนซ์โฆษณาแบบเต็มหน้าจอ
self.interstitialAd = [AdizInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// เริ่มต้น AdizInterstitial Instance เริ่มต้น (ViewController, AdizListener)
self.interstitialAd = [AdizInterstitial initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// โหลด AdizInterstitial
if (self.interstitialAd != nil) {
[self.interstitialAd load];
}
}
- (void) requestShowAd {
// แสดง AdizInterstitial
if (self.interstitialAd != nil) {
[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 ความสูง) | คำอธิบาย | อุปกรณ์ที่รองรับ | คงที่ขนาดแบนเนอร์ |
---|---|---|---|
320x50 | แบนเนอร์ | โทรศัพท์มือถือและแท็บเล็ต | BannerSize.normal |
320x100 | แบนเนอร์ขนาดใหญ่ | โทรศัพท์มือถือและแท็บเล็ต | BannerSize.medium |
300x250 | IAB Medium Rectangle | โทรศัพท์มือถือและแท็บเล็ต | BannerSize.large |
468x60 | IAB Full-Size Banner | แท็บเล็ต | BannerSize.full |
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 Instance (ViewController, hiveAdKey, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
} else {
// เริ่มต้น Default AdizBanner Instance (ViewController, BannerSize, AdizListener)
self.bannerAd = AdizBanner.initialize(self, size: bannerSize, adizListener: self)
} } func requestLoadAd() {
// โหลด AdizBanner
self.bannerAd?.load()
} func requestShowAd() {
// ตั้งค่าประเภทตำแหน่ง
var position: PositionType = .top
// แสดง AdizBanner
self.bannerAd?.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:@""]) {
// Initialize AdizBanner Instance (ViewController, hiveAdKey, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
} else {
// Initialize Default AdizBanner Instance (ViewController, BannerSize, AdizListener)
self.bannerAd = [AdizBanner initialize:self size:bannerSize adizListener:self];
}} - (void) requestLoadAd {
// Load AdizBanner
if (self.bannerAd != nil) {
[self.bannerAd load];
}} - (void) requestShowAd {
// Set position type
PositionType position = PositionTypeTop;
// แสดง AdizBanner
if (self.bannerAd != nil) {
[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 ความสูง) | เทมเพลต | การจัดแนว | ค่าขนาดแบนเนอร์ |
---|---|---|---|
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 Instance
var nativeAd: AdizNative?
func requestInitAd(hiveAdKey: String?) {
// ตั้งค่าขนาดแบนเนอร์
var bannerSize: BannerSize = .normal
if let adKey = hiveAdKey,
adKey.count > 0 {
// เริ่มต้น AdizNative Instance (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = AdizNative.initialize(self, hiveAdKey: adKey, size: bannerSize, adizListener: self)
}
else {
// เริ่มต้น Default AdizNative Instance (ViewController, BannerSize, AdizListener)
self.nativeAd = AdizNative.initialize(self, size: bannerSize, adizListener: self)
}
}
func requestLoadAd() {
// โหลด AdizNative
self.nativeAd?.load()
}
func requestShowAd() {
// ตั้งค่าประเภทตำแหน่ง
var position: PositionType = .top
// แสดง AdizNative
self.nativeAd?.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 Instance (ViewController, hiveAdKey, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self hiveAdKey:hiveAdKey size: bannerSize adizListener:self];
}
else {
// เริ่มต้น Default AdizNative Instance (ViewController, BannerSize, AdizListener)
self.nativeAd = [AdizNative initialize:self size:bannerSize adizListener:self];
}
}
- (void) requestLoadAd {
// โหลด AdizNative
if (self.nativeAd != nil) {
[self.nativeAd load];
}
}
- (void) requestShowAd {
// ตั้งค่าประเภทตำแหน่ง
PositionType position = PositionTypeTop;
// แสดง AdizNative
if (self.nativeAd != nil) {
[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 Instance
var rewardAd: AdizRewarded?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// Initialize AdizRewarded Instance (ViewController, hiveAdKey, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// Initialize Default AdizRewarded Instance (ViewController, AdizListener)
self.rewardAd = AdizRewarded.initialize(self, adizListener: self)
}
}
func requestLoadAd() {
// โหลด AdizRewarded
self.rewardAd?.load()
}
func requestShowAd() {
// แสดง AdizRewarded
self.rewardAd?.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 Instance (ViewController, hiveAdKey, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// เริ่มต้น Default AdizRewarded Instance (ViewController, AdizListener)
self.rewardedAd = [AdizRewarded initialize:self adizListener:self];
}
}
- (void) requestLoadAd {
// โหลด AdizRewarded
if (self.rewardedAd != nil) {
[self.rewardedAd load];
}
}
- (void) requestShowAd {
// แสดง AdizRewarded
if (self.rewardedAd != nil) {
[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 {
// Initialize AdizRewardedInterstitial Instance (ViewController, hiveAdKey, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// Initialize Default AdizRewardedInterstitial Instance (ViewController, AdizListener)
self.rewardInterstitialAd = AdizRewardedInterstitial.initialize(self, adizListener: self)
} } func requestLoadAd() {
// Load AdizRewardedInterstitial
self.rewardInterstitialAd?.load()
} func requestShowAd() {
// Show AdizRewardedInterstitial
self.rewardInterstitialAd?.show()
} func requestDestroyAd() {
// Destroy AdizRewardedInterstitial
self.rewardInterstitialAd?.destroy()
self.rewardInterstitialAd = nil
}
}
extension RewardInterstitialViewController: AdizListener {
func onLoad() {
// requestShowAd()
} func onFail(_ error: AdizError) {
} func onShow() {
} func onClick() {
}
func onPaidEvent(_ revenueData: AdRevenueData) {
}
func onClose() {
// requestDestroyAd()
}
func onRewarded(_ rewardItem: RewardItem) {
}
}
#import <UIKit/UIKit.h>
#import <HiveAdiz/HiveAdiz-Swift.h>
@interface RewardedInterstitialViewController : UIViewController<AdizListener>
@property (nonatomic, strong) AdizRewardedInterstitial* rewardedInterstitialAd;
@end
@implementation RewardedInterstitialViewController
- (void) requestInitAd: (NSString*)hiveAdKey {
if (hiveAdKey != nil && ![hiveAdKey isEqualToString:@""]) {
// Initialize AdizRewardedInterstitial Instance (ViewController, hiveAdKey, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self hiveAdKey:hiveAdKey adizListener:self];
}
else {
// Initialize Default AdizRewardedInterstitial Instance (ViewController, AdizListener)
self.rewardedInterstitialAd = [AdizRewardedInterstitial initialize:self adizListener:self];
}} - (void) requestLoadAd {
// Load AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil) {
[self.rewardedInterstitialAd load];
}} - (void) requestShowAd {
// Show AdizRewardedInterstitial
if (self.rewardedInterstitialAd != nil) {
[self.rewardedInterstitialAd show];
}} - (void) requestDestroyAd {
// Destroy 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()
) เมื่อสถานะของแอปเปลี่ยนจากพื้นหลังเป็นพื้นหน้า หากเรียกใช้ show()
3 ชั่วโมงหลังจากที่โฆษณาถูกโหลด โฆษณาจะถูกโหลดใหม่โดยอัตโนมัติก่อนที่จะถูกแสดง เมื่อโฆษณาถูกแสดงอย่างน้อยหนึ่งครั้ง จะไม่ถูกโหลดโดยอัตโนมัติอีกต่อไป
import UIKit
import HiveAdiz
class AppOpenViewController: UIViewController {
// สร้าง AdizAppOpen Instance
var appOpenAd: AdizAppOpen?
func requestInitAd(hiveAdKey: String?) {
if let adKey = hiveAdKey,
adKey.count > 0 {
// Initialize AdizAppOpen Instance (ViewController, hiveAdKey, AdizListener)
self.appOpenAd = AdizAppOpen.initialize(self, hiveAdKey: adKey, adizListener: self)
}
else {
// Initialize Default AdizAppOpen Instance (ViewController, AdizListener)
self.appOpenAd = AdizAppOpen.initialize(self, adizListener: self)
} } func requestLoadAd() {
// Load AdizAppOpen
self.appOpenAd?.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 Instance (ViewController, hiveAdKey, AdizListener)
self.appOpenAd = [AdizAppOpen initialize:self hiveAdKey:hiveAdKey adizListener:self];
} else {
// เริ่มต้น Default AdizAppOpen Instance (ViewController, AdizListener)
self.appOpenAd = [AdizAppOpen initialize:self adizListener:self];
}} - (void) requestLoadAd {
// โหลด AdizAppOpen
if (self.appOpenAd != nil) {
[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