อะแดปเตอร์สื่อกลางจะได้รับข้อความและคำขอจาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google และสื่อสารกับ SDK เครือข่ายของบุคคลที่สามเพื่อดำเนินการตามคำขอเหล่านั้น
คู่มือนี้มีไว้สำหรับเครือข่ายโฆษณาที่ต้องการสร้างอะแดปเตอร์สื่อกลางโฆษณาที่มีการให้รางวัลสำหรับสื่อกลางโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google SDK ตัวอย่างจะใช้ในข้อมูลโค้ดด้านล่างเพื่อวัตถุประสงค์ในการสาธิต คุณสามารถดูการใช้งานอะแดปเตอร์อย่างสมบูรณ์ที่สร้างขึ้นสำหรับ SDK ตัวอย่างนี้ได้ในโปรเจ็กต์iOSสื่อกลาง คู่มือนี้จะอธิบายวิธีสร้างอะแดปเตอร์
กำหนดชื่อคลาสอะแดปเตอร์และพารามิเตอร์เซิร์ฟเวอร์
โดยทั่วไปแล้ว เครือข่ายโฆษณาที่ใช้สื่อกลางผ่านแพลตฟอร์มสื่อกลาง AdMob จะต้องใช้ตัวระบุอย่างน้อย 1 ตัวเพื่อระบุผู้เผยแพร่โฆษณา ตัวระบุเหล่านี้จะแสดงเป็นพารามิเตอร์ของเซิร์ฟเวอร์และได้รับการกำหนดเมื่อกำหนดค่าเครือข่ายโฆษณาบุคคลที่สามสำหรับสื่อกลางใน UI ของ AdMob
ก่อนที่จะพัฒนาอะแดปเตอร์สื่อกลาง คุณต้องแจ้งชื่อคลาสอะแดปเตอร์และพารามิเตอร์ที่จำเป็นอื่นๆ แก่ Google เพื่อให้มีสิทธิ์เข้าถึงเครือข่ายโฆษณา
สอดคล้องกับโปรโตคอล GADMediationAdapter
ขั้นตอนแรกคือกำหนดให้คลาสอะแดปเตอร์ใช้โปรโตคอล GADMediationAdapter
ดังนี้
#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end
การเปลี่ยนแปลงนี้ช่วยให้ชั้นเรียนของคุณใช้วิธีการต่างๆ ที่อธิบายไว้ด้านล่าง
รายงานชั้นเรียนเพิ่มเติม
หากเครือข่ายบุคคลที่สามต้องการอนุญาตให้ผู้เผยแพร่โฆษณาส่งพารามิเตอร์ที่ไม่บังคับเพิ่มเติมสำหรับคำขอโฆษณา จะต้องแสดงผลคลาส extras
จากเมธอด networkExtrasClass
แสดงผล Nil
หากบุคคลที่สามไม่รองรับที่ผู้เผยแพร่เนื้อหาจัดเตรียมให้
#import <GoogleMobileAds/GoogleMobileAds.h>
@interface SampleExtras : NSObject<GADAdNetworkExtras>
/// Use this to indicate if debug mode is on for logging.
@property(nonatomic) BOOL debugLogging;
/// Use this to indicate whether to mute audio for video ads.
@property(nonatomic) BOOL muteAudio;
@end
#import "GADMediationAdapterSampleAdNetwork.h"
@implementation GADMediationAdapterSampleAdNetwork
...
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
return [SampleExtras class];
}
...
@end
รายงานหมายเลขเวอร์ชัน
อะแดปเตอร์ต้องรายงานไปยัง Google Mobile Ads SDK ทั้งเวอร์ชันของตัวอะแดปเตอร์และเวอร์ชันของ SDK ของบุคคลที่สาม ระบบจะรายงานเวอร์ชันโดยใช้ GADVersionNumber
อะแดปเตอร์แบบโอเพนซอร์สและที่มีการกำหนดเวอร์ชันของ Google ใช้รูปแบบเวอร์ชันอะแดปเตอร์ 4 หลัก แต่ GADVersionNumber
อนุญาตให้ใช้ได้เพียง 3 หลักเท่านั้น เพื่อแก้ไขปัญหานี้ ขอแนะนำให้รวมตัวเลข 2 หลักสุดท้ายไว้ในเวอร์ชันแพตช์ตามที่แสดงด้านล่าง
#import "GADMediationAdapterSampleAdNetwork.h"
@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
NSString *versionString = SampleSDKVersion;
NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
GADVersionNumber version = {0};
if (versionComponents.count >= 3) {
version.majorVersion = [versionComponents[0] integerValue];
version.minorVersion = [versionComponents[1] integerValue];
version.patchVersion = [versionComponents[2] integerValue];
}
return version;
}
+ (GADVersionNumber)version {
NSString *versionString = SampleAdapterVersion;
NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
GADVersionNumber version = {0};
if (versionComponents.count >= 4) {
version.majorVersion = [versionComponents[0] integerValue];
version.minorVersion = [versionComponents[1] integerValue];
// Adapter versions have 2 patch versions. Multiply the first patch by 100.
version.patchVersion =
[versionComponents[2] integerValue] * 100 + [versionComponents[3] integerValue];
}
return version;
}
...
@end
เริ่มต้นอะแดปเตอร์
เมื่อแอปเริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ระบบจะเรียกใช้ setUpWithConfiguration:completionHandler:
ในอะแดปเตอร์ทั้งหมดที่กำหนดค่าไว้สำหรับแอปภายใน UI ของ AdMob
อาร์กิวเมนต์ GADMediationServerConfiguration
จะให้ข้อมูลเกี่ยวกับตำแหน่งทั้งหมดที่กำหนดค่าไว้สำหรับแอปภายใน UI ของ AdMob ใช้ข้อมูลนี้ในการเริ่มต้น SDK เครือข่ายโฆษณาของคุณ เมื่อ SDK เครือข่ายโฆษณาเริ่มต้นแล้ว ให้เรียกใช้อาร์กิวเมนต์ GADMediationAdapterSetUpCompletionBlock
การบล็อกนี้ช่วยให้คุณรายงานการเริ่มต้นที่สำเร็จหรือล้มเหลวไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้โดยเรียกใช้ตัวแฮนเดิลการเสร็จสมบูรณ์ด้วย nil
หรือออบเจ็กต์ NSError
#import "SampleAdapter.h"
@implementation SampleAdapter
...
+ (void)setUpWithConfiguration:(GADMediationServerConfiguration *)configuration
completionHandler:(GADMediationAdapterSetUpCompletionBlock)completionHandler {
// Since the Sample SDK doesn't need to be initialized, the completion
//handler is called directly here.
completionHandler(nil);
}
...
@end
ขอโฆษณาที่มีการให้รางวัล
เมื่อแอปโหลดโฆษณาที่มีการให้รางวัลด้วย SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ระบบจะเรียกใช้ loadRewardedAdForAdConfiguration:completionHandler:
ในอะแดปเตอร์หากเครือข่ายโฆษณาอยู่ในการแสดงโฆษณาสื่อกลางตามลำดับขั้น
GADRewardedLoadCompletionHandler
ช่วยให้คุณรายงานจำนวนโฆษณาที่สำเร็จไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้โดยการระบุการอ้างอิงไปยังออบเจ็กต์ที่สอดคล้องกับโปรโตคอล GADMediationRewardedAd
หรือจำนวนโฆษณาที่ล้มเหลวโดยระบุการอ้างอิง nil
และออบเจ็กต์ NSError
การเรียกใช้ตัวแฮนเดิลการเสร็จสิ้นการโหลดจะแสดงผล GADMediationRewardedAdEventDelegate
ซึ่งอะแดปเตอร์ควรเก็บไว้ตลอดอายุของโฆษณาเพื่อแจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เกี่ยวกับเหตุการณ์ที่ตามมา
#import "SampleAdapter.h"
@interface SampleAdapter () <GADMediationRewardedAd> {
/// Rewarded ads from Sample SDK.
SampleRewardedAd *_rewardedAd;
/// Handles any callback when the sample rewarded ad finishes loading.
GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;
/// Delegate for receiving rewarded ad notifications.
__weak id<GADMediationRewardedAdEventDelegate> _rewardedAdDelegate;
}
@end
@implementation SampleAdapter
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
completionHandler:
(GADMediationRewardedLoadCompletionHandler)completionHandler {
_loadCompletionHandler = completionHandler;
NSString *adUnit = adConfiguration.credentials.settings[SampleSDKAdUnitIDKey];
SampleExtras *extras = adConfiguration.extras;
_rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];
_rewardedAd.enableDebugLogging = extras.enableDebugLogging;
/// Check the extras to see if the request should be customized.
SampleAdRequest *request = [[SampleAdRequest alloc] init];
request.mute = extras.muteAudio;
/// Set the delegate on the rewarded ad to listen for callbacks from the Sample SDK.
_rewardedAd.delegate = self;
[_rewardedAd fetchAd:request];
}
...
@end
เหตุการณ์การโหลดโฆษณาแบบส่งต่อ
อะแดปเตอร์มีหน้าที่รับผิดชอบในการฟังการเรียกกลับของ SDK บุคคลที่สามและแมปกับโค้ดเรียกกลับของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ที่เหมาะสม
รายงานเหตุการณ์การโหลดโฆษณาของบุคคลที่สามที่สำเร็จหรือล้มเหลวโดยเรียกใช้ loadCompletionHandler
ด้วยโฆษณาหรือข้อผิดพลาด หากมีการเรียกใช้ตัวแฮนเดิลการเสร็จสมบูรณ์แบบมีโฆษณาและไม่มีข้อผิดพลาด ระบบจะแสดงผลออบเจ็กต์ Delegate เหตุการณ์โฆษณา ใช้การอ้างอิงถึงผู้ได้รับมอบสิทธิ์นี้เพื่อให้อะแดปเตอร์สามารถส่งต่อกิจกรรมการนำเสนอในภายหลังได้
- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
_rewardedAdDelegate = _loadCompletionHandler(self, nil);
}
- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
_loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
code:GADErrorNoFill
userInfo:nil]);
}
แสดงโฆษณา
เมื่อแอปขอให้ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google นำเสนอโฆษณาที่มีการให้รางวัล SDK จะเรียกใช้เมธอด presentFromViewController:
ในอินสแตนซ์ของ GADMediationRewardedAd
ที่ระบุไว้ในการเรียกใช้ตัวแฮนเดิลการเสร็จสิ้นการโหลด ซึ่งคุณควรนำเสนอโฆษณาที่มีการให้รางวัลดังนี้
- (void)presentFromViewController:(nonnull UIViewController *)viewController {
if (!_rewardedAd.isReady) {
NSError *error =
[NSError errorWithDomain:kAdapterErrorDomain
code:0
userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
[_rewardedAdDelegate didFailToPresentWithError:error];
return;
}
[_rewardedAd presentFromRootViewController:viewController];
}
รายงานเหตุการณ์โฆษณาไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่
หลังจากแสดงโฆษณาแล้ว อะแดปเตอร์ควรรายงานเหตุการณ์ในวงจรการนำเสนอโฆษณาโดยใช้การมอบสิทธิ์เหตุการณ์โฆษณาเดียวกันที่แสดงผลเมื่อโหลดโฆษณาสำเร็จ
- (void)rewardedAdDidPresent:(nonnull SampleRewardedAd *)rewardedAd {
[_rewardedAdDelegate willPresentFullScreenView];
[_rewardedAdDelegate didStartVideo];
[_rewardedAdDelegate reportImpression];
}
- (void)rewardedAdDidDismiss:(nonnull SampleRewardedAd *)rewardedAd {
[_rewardedAdDelegate willDismissFullScreenView];
[_rewardedAdDelegate didEndVideo];
[_rewardedAdDelegate didDismissFullScreenView];
}
- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
GADAdReward *aReward =
[[GADAdReward alloc] initWithRewardType:@"GADMediationAdapterSampleAdNetwork"
rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
[_rewardedAdDelegate didRewardUserWithReward:aReward];
}
รายละเอียดเหตุการณ์โฆษณาที่ควรรายงานไปยัง Google Mobile Ads SDK มีดังนี้
เหตุการณ์โฆษณา | คำอธิบาย |
---|---|
willPresentFullScreenView | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาจะแสดง |
didStartVideo | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเริ่มเล่น |
reportImpression | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการแสดงผลเกิดขึ้นในโฆษณา |
didEndVideo | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเล่นเสร็จแล้ว |
didRewardUserWithReward | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าผู้ใช้ได้รับรางวัล |
reportClick | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการคลิกโฆษณา |
willDismissFullScreenView | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาจะปิดลง |
didDismissFullScreenView | แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาได้ปิดแล้ว |