คู่มือนี้มีไว้สําหรับเครือข่ายโฆษณาที่ต้องการสร้างอะแดปเตอร์สื่อกลาง หากคุณเป็นผู้เผยแพร่โฆษณา โปรดดูวิธีการสำหรับสื่อกลางของผู้เผยแพร่โฆษณา
อะแดปเตอร์สื่อกลางคือชั้นของการสื่อสารระหว่างเครือข่ายโฆษณากับสื่อกลางโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google อะแดปเตอร์จะแสดงโฆษณาจากเครือข่ายโฆษณาพร้อมกับ
ส่งต่อเหตุการณ์โฆษณาที่เกี่ยวข้องไปยัง AdMob อะแดปเตอร์มีหน้าที่รับผิดชอบในการใช้งานโปรโตคอล GADMAdNetworkAdapter
เพื่อให้แน่ใจว่ามีความสามารถที่จำเป็น
ข้อกำหนดเบื้องต้น
- Xcode 15.3 ขึ้นไป
- เป้าหมายการทำให้ใช้งานได้ 8.0 ขึ้นไป
- ส่วนหัวเพิ่มเติมจากโฟลเดอร์อะแดปเตอร์สื่อกลาง ของการดาวน์โหลด SDK iOS โฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
เครือข่ายโฆษณาของคุณต้องมีความสัมพันธ์ในการทำงานกับ Google เป็นอย่างดีเพื่อสร้างอะแดปเตอร์สื่อกลาง
เครือข่ายโฆษณาตัวอย่าง
คู่มือนี้สาธิตวิธีสร้างอะแดปเตอร์สำหรับเครือข่ายโฆษณาตัวอย่าง SDK เครือข่ายโฆษณาตัวอย่างประกอบด้วยคลาสที่เป็นตัวแทนของคลาสที่นำเสนอโดยเครือข่ายโฆษณาส่วนใหญ่ ดังนี้
@interface SampleBanner : UILabel
@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleBannerAdDelegate> delegate;
- (void)fetchAd:(SampleAdRequest *)request;
@end
typedef NS_ENUM(NSInteger, SampleErrorCode) {
SampleErrorCodeBadRequest = 0,
SampleErrorCodeUnknown = 1,
SampleErrorCodeNetworkError = 2,
SampleErrorCodeNoInventory = 3,
};
@interface SampleAdRequest : NSObject
@property(nonatomic, assign) BOOL testMode;
@property(nonatomic, copy) NSArray *keywords;
@end
@interface SampleInterstitial : NSObject
@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleInterstitialAdDelegate> delegate;
@property(nonatomic, assign, getter=isInterstitialLoaded) BOOL interstitialLoaded;
- (void)fetchAd:(SampleAdRequest *)request;
- (void)show;
@end
@protocol SampleBannerAdDelegate
- (void)bannerDidLoad:(SampleBanner *)banner;
- (void)banner:(SampleBanner *)banner didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)bannerWillLeaveApplication:(SampleBanner *)banner;
@end
@protocol SampleInterstitialAdDelegate<NSObject>
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial;
- (void)interstitial:(SampleInterstitial *)interstitial
didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial;
@end
ดูข้อมูลเพิ่มเติมเกี่ยวกับคลาสเหล่านี้ได้ในตัวอย่างการใช้งาน SDK ที่สมบูรณ์
ผู้ให้บริการเชื่อมต่อ
อะแดปเตอร์สื่อกลางจะโต้ตอบกับ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google โดยใช้ออบเจ็กต์ที่ใช้โปรโตคอล GADMAdNetworkConnector
จากนี้ไป เราจะเรียก
ออบเจ็กต์นี้ว่า "เครื่องมือเชื่อมต่อ" เครื่องมือเชื่อมต่อจะแสดงข้อมูลที่จำเป็นสำหรับคำขอโฆษณาและให้วิธีในการเรียกกลับไปยังสื่อกลางสำหรับเหตุการณ์โฆษณาและการโต้ตอบของผู้ใช้ เครื่องมือเชื่อมต่อจะมีให้กับอะแดปเตอร์สื่อกลาง ณ เวลาที่เริ่มต้น ตั้งค่าอะแดปเตอร์ให้จัดเก็บเครื่องมือเชื่อมต่อในตัวแปรอินสแตนซ์ ดังนี้
- (id)initWithGADMAdNetworkConnector:(id<GADMAdNetworkConnector>)c {
if ((self = [super init])) {
_connector = c;
}
return self;
}
พารามิเตอร์เซิร์ฟเวอร์
เครือข่ายโฆษณาอาจต้องใช้ตัวระบุเพื่อระบุผู้เผยแพร่โฆษณา ตัวอย่างเช่น เครือข่ายโฆษณาตัวอย่างต้องมีหน่วยโฆษณา ระบบจะส่งพารามิเตอร์เซิร์ฟเวอร์ที่จำเป็นเหล่านี้ให้กับอะแดปเตอร์ผ่านเมธอด credentials
ซึ่งจะแสดงผล NSDictionary
ของตัวระบุและค่าที่สอดคล้องกัน บรรทัดโค้ดต่อไปนี้จะเรียกพารามิเตอร์เซิร์ฟเวอร์ชื่อ ad_unit
ของเครือข่ายโฆษณาตัวอย่างจากเครื่องมือเชื่อมต่อ
self.interstitialAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];
การตั้งค่าเครือข่ายสื่อกลาง
เครือข่ายโฆษณาต้องแจ้ง AdMob เกี่ยวกับพารามิเตอร์เซิร์ฟเวอร์ที่จำเป็นสำหรับเครือข่าย วิธีนี้ช่วยให้ AdMob กำหนดค่าเครือข่ายของคุณในส่วนหน้าได้
เมื่อเปิดใช้เครือข่ายสำหรับสื่อกลางในส่วนหน้า AdMob กำหนดให้คุณต้องป้อนค่าที่จำเป็นในการสร้างอินสแตนซ์อะแดปเตอร์ ภาพหน้าจอด้านล่างแสดงให้เห็นว่า Application Placement Identifier (APID) ของ Millennial Media ต้องมีรหัสแอปสำหรับ InMobi
ไปที่บทความนี้สำหรับข้อมูลเพิ่มเติม เกี่ยวกับการกำหนดค่าเครือข่ายโฆษณาของสื่อกลาง
สร้างคำขอโฆษณาสื่อกลาง
คำขอแบนเนอร์
สำหรับคำขอแบนเนอร์สื่อกลาง ระบบจะเรียกใช้เมธอด getBannerWithSize
ทันทีหลังจากที่สร้างอินสแตนซ์อะแดปเตอร์แล้ว วิธีนี้จะไม่แสดงผลใดๆ เลย โดยจะส่งสัญญาณให้อะแดปเตอร์เริ่มการดึงโฆษณาแบบอะซิงโครนัสผ่านเครือข่าย ให้อะแดปเตอร์คอยฟังโค้ดเรียกกลับสำหรับ SDK หาก SDK ไม่รองรับขนาดโฆษณาที่ระบุหรือไม่รองรับโฆษณาแบนเนอร์ ให้เรียกใช้เมธอด adapter:didFailAd:
ในเครื่องมือเชื่อมต่อ
การติดตั้งใช้งาน getBannerWithSize
สำหรับเครือข่ายโฆษณาตัวอย่างจะมีลักษณะดังนี้
- (void)getBannerWithSize:(GADAdSize)adSize {
//The adapter should fail immediately if the adSize is not supported
if (!GADAdSizeEqualToSize(adSize, GADAdSizeBanner) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeMediumRectangle) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeFullBanner) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeLeaderboard)) {
NSString *errorDesc =
[NSString stringWithFormat:@"Invalid ad type %@, not going to get ad.",
NSStringFromGADAdSize(adSize)];
NSDictionary *errorInfo = [NSDictionary
dictionaryWithObjectsAndKeys:errorDesc, NSLocalizedDescriptionKey, nil];
NSError *error = [NSError errorWithDomain:GADErrorDomain
code:GADErrorMediationInvalidAdSize
userInfo:errorInfo];
[self.connector adapter:self didFailAd:error];
return;
}
self.bannerAd = [[SampleBanner alloc]
initWithFrame:CGRectMake(0, 0, adSize.size.width, adSize.size.height)];
self.bannerAd.delegate = self;
self.bannerAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];
// Setup request parameters.
SampleAdRequest *request = [[SampleAdRequest alloc] init];
request.testMode = self.connector.testMode;
request.keywords = self.connector.userKeywords;
[self.bannerAd fetchAd:request];
NSLog(@"Requesting banner from Sample Ad Network");
}
พารามิเตอร์การกำหนดเป้าหมายเพิ่มเติม
เครื่องมือเชื่อมต่อประกอบด้วยข้อมูลการกำหนดเป้าหมายทั่วไปบางส่วนที่คุณใช้อ้างอิงสำหรับการกำหนดเป้าหมายโฆษณาได้ ดังนี้
userKeywords
testMode
childDirectedTreatment
ส่วนเสริมสำหรับสื่อกลาง
ส่วนเสริมสื่อกลางทำให้เครือข่ายโฆษณารองรับพารามิเตอร์การกำหนดเป้าหมายเพิ่มเติมหรืออินพุตที่พารามิเตอร์คำขอเพิ่มเติมที่เครื่องมือเชื่อมต่อไม่ได้ครอบคลุม ฟังก์ชันการทำงานนี้จัดเตรียมได้ผ่านคลาสที่ใช้โปรโตคอล GADAdNetworkExtras
คลาส SampleAdNetworkExtras
แสดงตามตัวอย่างด้านล่างนี้
@interface SampleAdNetworkExtras : NSObject <GADAdNetworkExtras>
/// Should ad volume audio be muted.
@property(nonatomic, assign) BOOL muteAudio;
@end
ผู้เผยแพร่โฆษณาต้องผ่านอินสแตนซ์ของคลาสย่อย GADAdNetworkExtras
เมื่อส่งคำขอโฆษณา อินสแตนซ์ของคลาสย่อย GADAdNetworkExtras
นี้เข้าถึงได้ผ่านเครื่องมือเชื่อมต่อ วิธีใช้ส่วนเสริมสื่อกลางเมื่อสร้างคำขอโฆษณาสำหรับเครือข่ายของคุณมีดังนี้
SampleAdRequest *request = [[SampleAdRequest alloc] init];
SampleAdNetworkExtras *myAdNetworkExtras = [self.connector networkExtras];
request.muteAudio = myAdNetworkExtras.muteAudio;
[self.bannerAd fetchAd:request];
หากต้องการตรวจสอบว่าจะเข้าถึงคลาสย่อย GADAdNetworkExtras
ผ่านเครื่องมือเชื่อมต่อได้ โปรดติดตั้งใช้งาน networkExtrasClass
และแสดงผลคลาสย่อย GADAdNetworkExtras
ดังนี้
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
return [SampleAdNetworkExtras class];
}
หากอะแดปเตอร์ไม่ได้ใช้ส่วนเสริมสื่อกลาง เมธอด networkExtrasClass
จะแสดงผล Nil
แจ้งสื่อกลาง
ให้อะแดปเตอร์ใช้ Listener โฆษณาสำหรับเครือข่ายของคุณ และส่งต่อโค้ดเรียกกลับของเหตุการณ์โฆษณาที่เกี่ยวข้องผ่านเครื่องมือเชื่อมต่อ ตารางด้านล่างอธิบายกรณีที่ควรเรียกใช้เมธอดผู้รับมอบสิทธิ์แต่ละวิธี
วิธีการ | เวลาที่จะโทร |
---|---|
adapter:didReceiveAdView: |
ส่งคำขอแบนเนอร์สำเร็จแล้ว |
adapter:didFailAd: |
คำขอแบนเนอร์ล้มเหลว |
adapterDidGetAdClick: |
คลิกแบนเนอร์แล้ว |
adapterWillPresentFullScreenModal: |
แบนเนอร์จะแสดงการวางซ้อนในแอป |
adapterWillDismissFullScreenModal: |
การวางซ้อนในแอปจะปิดลง |
adapterDidDismissFullScreenModal: |
ปิดการวางซ้อนในแอปแล้ว |
adapterWillLeaveApplication: |
แอปพลิเคชันจะวางอยู่ในพื้นหลังหรือสิ้นสุดลงเนื่องจากผู้ใช้คลิกที่โฆษณาที่จะเปิดใช้งานแอปพลิเคชันอื่น |
ตัวอย่างต่อไปนี้ใช้อินเทอร์เฟซ SampleBannerAdDelegate
จากเครือข่ายโฆษณาตัวอย่างเพื่อส่งต่อข้อความแสดงข้อผิดพลาดและข้อความสถานะ
- (void)bannerDidLoad:(SampleBanner *)banner {
[self.connector adapter:self didReceiveAdView:banner];
}
- (void)banner:(SampleBanner *)banner didFailWithError:(SampleErrorCode)error {
[self.connector adapter:self
didFailAd:[NSError errorWithDomain:@"Ad request failed"
code:error
userInfo:nil]];
}
- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
[self.connector adapterDidGetAdClick:self];
[self.connector adapterWillLeaveApplication:self];
}
เปิดการวางซ้อนในแอปเทียบกับแอปพลิเคชันภายนอก
เมื่อมีการคลิกแบนเนอร์ โฆษณาอาจเปิดโฆษณาซ้อนทับแบบเต็มหน้าจอหรือแอปพลิเคชันภายนอก (เช่น Safari หรือ App Store) การเรียกกลับของเครื่องมือเชื่อมต่อที่จะเรียกใช้ ในสองกรณีนี้จะแตกต่างกัน
หากการคลิกแบนเนอร์จะเปิดโฆษณาซ้อนทับแบบเต็มหน้าจอ ให้เรียกใช้ adapterWillPresentFullScreenModal:
เมื่อนำเสนอการวางซ้อน เมื่อการวางซ้อนปิดอยู่ ให้เรียกทั้ง adapterWillDismissFullScreenModal:
และ adapterDidDismissFullScreenModal:
หากการคลิกแบนเนอร์ (หรือการคลิกวางซ้อนแบบเต็มหน้าจอ) ทำให้ผู้ใช้ออกจากแอปพลิเคชัน ให้เรียกใช้โค้ดเรียกกลับ adapterWillLeaveApplication:
ตอนนี้คุณมีอะแดปเตอร์สื่อกลางที่ใช้งานได้สำหรับแบนเนอร์แล้ว ดูการใช้งาน SampleAdapter
แบบสมบูรณ์ได้ใน GitHub
ใช้อะแดปเตอร์คั่นระหว่างหน้า
การใช้งานอะแดปเตอร์สำหรับโฆษณาคั่นระหว่างหน้าจะคล้ายกับโฆษณาแบนเนอร์ ระบบจะเรียกใช้เมธอด getInterstitial
ทันทีหลังจากที่ระบุอะแดปเตอร์แล้ว วิธีนี้ไม่แสดงข้อมูลใดๆ อะแดปเตอร์จะเริ่มต้นการดึงข้อมูลโฆษณาแบบไม่พร้อมกันผ่านเครือข่าย ให้อะแดปเตอร์ทำหน้าที่เป็น
มอบสิทธิ์ให้กับ SDK สำหรับการฟังโค้ดเรียกกลับ หาก SDK ไม่รองรับโฆษณาคั่นระหว่างหน้า ให้เรียกใช้เมธอด adapter:didFailAd:
ของเครื่องมือเชื่อมต่อดังนี้
- (void)getInterstitial {
self.interstitialAd = [[SampleInterstitial alloc] init];
self.interstitialAd.delegate = self;
self.interstitialAd.adUnit =
[[self.connector credentials] objectForKey:@"ad_unit"];
SampleAdRequest *request = [[SampleAdRequest alloc] init];
// Setup request parameters.
request.testMode = self.connector.testMode;
request.keywords = self.connector.userKeywords;
[self.interstitialAd fetchAd:request];
NSLog(@"Requesting interstitial from Sample Ad Network");
}
คุณจะได้รับการระบุผู้เผยแพร่โฆษณาและข้อมูลการกำหนดเป้าหมายโฆษณาจากเครื่องมือเชื่อมต่อเช่นเดียวกับ MediationBannerAdapter
แจ้งสื่อกลาง
ให้อะแดปเตอร์ใช้การมอบสิทธิ์โฆษณาสำหรับเครือข่ายของคุณ และส่งต่อโค้ดเรียกกลับของเหตุการณ์โฆษณาที่เกี่ยวข้องผ่านเครื่องมือเชื่อมต่อ ตารางด้านล่างอธิบายกรณีที่จะเรียก เมธอดการมอบสิทธิ์แต่ละวิธี
วิธีการ | เวลาที่จะโทร |
---|---|
adapterDidReceiveInterstitial: |
ส่งคำขอคั่นระหว่างหน้าสำเร็จแล้ว |
adapter:didFailInterstitial: |
ส่งคำขอคั่นระหว่างหน้าไม่สำเร็จ |
adapterDidGetAdClick: |
โฆษณาคั่นระหว่างหน้าถูกคลิก |
adapterWillPresentInterstitial: |
โฆษณาคั่นระหว่างหน้าจะปรากฏขึ้น |
adapterWillDismissInterstitial: |
โฆษณาคั่นระหว่างหน้าจะปิดลง |
adapterDidDismissInterstitial: |
ปิดโฆษณาคั่นระหว่างหน้าแล้ว |
adapterWillLeaveApplication: |
แอปพลิเคชันจะทำงานอยู่เบื้องหลังหรือสิ้นสุดลงเนื่องจากผู้ใช้คลิกโฆษณาที่จะเปิดใช้งานแอปพลิเคชันอื่น |
ตัวอย่างต่อไปนี้ใช้อินเทอร์เฟซ SampleInterstitialAdDelegate
ของเครือข่ายโฆษณาตัวอย่างเพื่อส่งต่อข้อความแสดงข้อผิดพลาดและข้อความสถานะ
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
[self.connector adapterDidReceiveInterstitial:self];
}
- (void)interstitial:(SampleInterstitial *)interstitial
didFailWithError:(SampleErrorCode)error {
[self.connector adapter:self
didFailInterstitial:[NSError errorWithDomain:@"Ad request failed"
code:error
userInfo:nil]];
}
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
[self.connector adapterWillPresentInterstitial:self];
}
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
[self.connector adapterWillDismissInterstitial:self];
}
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
[self.connector adapterDidDismissInterstitial:self];
}
แสดงโฆษณาคั่นระหว่างหน้า
เมื่ออะแดปเตอร์เรียกใช้ adapterDidReceiveInterstitial
ให้รอเพื่อแสดงโฆษณาคั่นระหว่างหน้าจนกว่าจะมีการเรียก presentInterstitialFromRootViewController
นักพัฒนาแอปเป็นผู้ตัดสินใจว่าจะแสดงโฆษณาคั่นระหว่างหน้าเมื่อใด ซึ่งอาจใช้เวลาหลายนาทีหลังจากได้รับโฆษณา
การติดตั้งใช้งาน presentInterstitialFromRootViewController:
สำหรับเครือข่ายโฆษณาตัวอย่างมีดังนี้
- (void)presentInterstitialFromRootViewController:
(UIViewController *)rootViewController {
if ([self.interstitialAd isLoaded]) {
[self.interstitialAd show];
}
}
อะแดปเตอร์สื่อกลางพร้อมจัดการกับโฆษณาคั่นระหว่างหน้าแล้ว เพื่อเป็นข้อมูลอ้างอิง คุณสามารถดูการติดตั้งใช้งาน SampleAdapter
อย่างสมบูรณ์ได้ใน GitHub
คำถามที่พบบ่อย
- ฉันควรรวมอะแดปเตอร์ไว้เป็นส่วนหนึ่งของไลบรารี SDK หรือเป็นไลบรารีแยกต่างหาก
- เราขอแนะนำให้ใส่อะแดปเตอร์ไว้เป็นส่วนหนึ่งของไลบรารี SDK เพื่อให้นักพัฒนาซอฟต์แวร์ใช้ไลบรารีเพียง 1 รายการเท่านั้นในการรวมเครือข่ายของคุณ
- ฉันควรทำอย่างไรหากอะแดปเตอร์รองรับเฉพาะโฆษณาแบนเนอร์
หากอะแดปเตอร์รองรับเฉพาะแบนเนอร์ ให้ส่งต่อเหตุการณ์ข้อผิดพลาดไปยังสื่อกลางสําหรับคําขอโฆษณาคั่นระหว่างหน้า
- (void)getInterstitial { NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" }; NSError *error = [NSError errorWithDomain:GADErrorDomain code:GADErrorInvalidRequest userInfo:errorInfo]; [self.connector adapter:self didFailInterstitial:error]; return; }
- ฉันควรทำอย่างไรหากอะแดปเตอร์รองรับเฉพาะโฆษณาคั่นระหว่างหน้าเท่านั้น
หากอะแดปเตอร์รองรับเฉพาะโฆษณาคั่นระหว่างหน้า ให้ส่งต่อเหตุการณ์ข้อผิดพลาดไปยังสื่อกลางสำหรับคำขอแบนเนอร์
- (void)getBannerWithSize:(GADAdSize)adSize { NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" }; NSError *error = [NSError errorWithDomain:GADErrorDomain code:GADErrorInvalidRequest userInfo:errorInfo]; [self.connector adapter:self didFailAd:error]; return; }