מתאם גישור מקבל הודעות ובקשות מ-Google Mobile Ads SDK ומתקשר עם SDK של רשת של צד שלישי כדי למלא את הבקשות האלה.
מדריך זה מיועד לרשתות מודעות שמעוניינות לבנות מתאם גישור למודעות מתגמלות לצורך גישור של מודעות Google לנייד. בקטעי הקוד שבהמשך נעשה שימוש ב-SDK לדוגמה למטרות הדגמה. אפשר למצוא הטמעה מלאה של מתאם שנוצרה עבור ה-SDK לדוגמה הזה בפרויקט iOS תהליך בחירת הרשת. במדריך הזה מוסבר איך לבנות את המתאם.
הגדרת שם המחלקה של המתאם והפרמטרים של השרת
בדרך כלל, רשתות מודעות שמשתתפות דרך פלטפורמת הגישור של AdMob מחייבות מזהה אחד או יותר כדי לזהות בעל אתר. המזהים האלה מיוצגים כפרמטרים של שרת, ומוגדרים במהלך ההגדרה של רשת מודעות של צד שלישי לגישור בממשק המשתמש של AdMob.
לפני שאתם מפתחים מתאם גישור, עליכם לספק ל-Google את שם מחלקת המתאם ופרמטרים נדרשים אחרים כדי לקבל גישה לרשת המודעות שלכם.
התאמה לפרוטוקול GADMediationAdapter
בשלב הראשון, צריך להטמיע את מחלקת המתאם עם הפרוטוקול GADMediationAdapter
:
#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end
השינוי הזה מבטיח שבכיתה שלך יוטמעו כמה שיטות שמפורטות בהמשך.
דיווח על מחלקה
אם הרשת של הצד השלישי רוצה לאפשר לבעלי אתרים להעביר פרמטרים אופציונליים נוספים לבקשת מודעה, יש להחזיר את המחלקה extras
מ-method 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 ספרות. כדי לעקוף את הבעיה, מומלץ לשלב את שתי הספרות האחרונות בגרסת התיקון, כפי שמוצג כאן:
#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
לאתחל את המתאם
כשאפליקציה מפעילה את Google Mobile Ads SDK,
setUpWithConfiguration:completionHandler:
מופעל בכל המתאמים שהוגדרו לאפליקציה בממשק המשתמש של AdMob.
הארגומנט GADMediationServerConfiguration
מספק מידע על כל מיקומי המודעות שהוגדרו לאפליקציה בממשק המשתמש של AdMob. השתמשו במידע הזה כדי להפעיל את ה-SDK של רשת המודעות. אחרי שה-SDK של רשת המודעות מופעל, מפעילים את הארגומנט GADMediationAdapterSetUpCompletionBlock
. החסימה הזו מאפשרת לדווח על אתחול מוצלח או נכשל ל-Google Mobile Ads SDK על ידי הפעלת ה-handler להשלמה באמצעות אובייקט 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
בקשה למודעה מתגמלת
כשאפליקציה טוענת מודעה מתגמלת באמצעות Google Mobile Ads SDK,
loadRewardedAdForAdConfiguration:completionHandler:
מופעל באמצעות המתאם אם רשת המודעות נמצאת ברשימת הרשתות בתהליך בחירת הרשת.
באמצעות GADRewardedLoadCompletionHandler
אפשר לדווח ל-Google Mobile Ads SDK על כמות מודעות שנכשלה באמצעות הפניה לאובייקט שתואם לפרוטוקול GADMediationRewardedAd
, או על כשל של טעינת מודעה באמצעות הוספת קובץ עזר nil
ואובייקט NSError
. הפעלת ה-handler של השלמת הטעינה מחזירה GADMediationRewardedAdEventDelegate
שהמתאם צריך להחזיק בו למשך מחזור החיים של המודעה, כדי להודיע ל-Google Mobile Ads SDK על כל אירוע נוסף.
#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 של צד שלישי ולמפות אותן לקריאה החוזרת (callback) המתאימה של Google Mobile Ads SDK.
כדי לדווח על הצלחה או כישלון של אירועי טעינת מודעות של צד שלישי, צריך להפעיל את loadCompletionHandler
עם מודעה או שגיאה. אם ה-handler להשלמה נקרא עם מודעה וללא שגיאה, מוחזר אובייקט עם הרשאות לניהול אירועי מודעה. כדאי לשמור
הפניה לאדם הזה כדי שהמתאם יוכל להעביר אירועי מצגת מאוחר יותר.
- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
_rewardedAdDelegate = _loadCompletionHandler(self, nil);
}
- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
_loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
code:GADErrorNoFill
userInfo:nil]);
}
הצגת המודעה
כשהאפליקציה מבקשת מ-Google Mobile Ads SDK להציג את המודעה המתגמלת, ה-SDK קורא ל-method presentFromViewController:
במופע של
GADMediationRewardedAd
שצוין בקריאה ל-handler להשלמת הטעינה. בשלב הזה צריך להציג את המודעה המתגמלת:
- (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];
}
דיווח על אירועי מודעות ל-Mobile Ads 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 | מודיע ל-Google Mobile Ads SDK שהמודעה תוצג. |
didStartVideo | מודיע ל-Google Mobile Ads SDK שמודעה מתגמלת התחילה לפעול. |
reportImpression | מודיע ל-Google Mobile Ads SDK שהתקבלה חשיפה במודעה. |
didEndVideo | מודיע ל-Google Mobile Ads SDK שהמודעה המתגמלת הסתיימה. |
didRewardUserWithReward | תודיע ל-Google Mobile Ads SDK שהמשתמש הרוויח תגמול. |
reportClick | מודיע ל-Google Mobile Ads SDK שבוצע קליק על המודעה. |
willDismissFullScreenView | מודיע ל-Google Mobile Ads SDK שהמודעה תיסגר. |
didDismissFullScreenView | מודיע ל-Google Mobile Ads SDK שהמודעה נסגרה. |