1. 集成 AdMob 广告
请按照将AdMob广告集成到应用中的相同说明操作。要集成非插页式广告(横幅尺寸、页首横幅尺寸等),请遵照admob里集成KeyMob横幅式广告教程说明。要集成插页式广告(占据整个屏幕的全屏广告),请遵照admob里集成KeyMob插页式广告教程说明。完成这些集成步骤之后,您需要执行下文介绍的一些小修改,将AdMob广告展示位置改为中介展示位置,从而展示来自多个广告网络的广告。2. 添加广告网络适配器和SDK现在您可以下载并向项目中添加相关广告网络的适配器和 SDK,以便投放来自这些广告网络的广告。您可以在中介网络页面上找到这些广告网络的链接。要在Xcode中添加您下载的广告网络适配器/SDK,请右键点击您的项目,然后点击Add Files to <project>(将文件添加到 <项目>)3.添加必需的链接器标记现在您需要将-ObjC添加到应用目标的构建设置中的 Other Linker Flags(其他链接器标记):1:在 Xcode 的项目导航器中,按蓝色的顶级项目图标。2:依次点击目标和Build Settings(构建设置)标签。3:在Other Linker Flags(其他链接器标记)下,将-ObjC同时添加至 Debug(调试 )和 Release(发布)。4. 加入广告网络配置您需要加入所选的广告网络要求的框架、编译器标记或链接器标记。为方便您查阅,中介网络页面中提供了相应链接,指向针对每个广告网络的具体说明。您无需撰写额外的代码来创建每个广告网络的广告视图。AdMob Mediation SDK 会根据需要调用每个广告网络的适配器和 SDK 以创建广告。下文将介绍如何设置中介监听器,以便您收到所有广告网络的广告事件通知。5.(可选)指定其他请求参数您可以视需要在请求中添加用户的地理位置、性别和生日。这些不是必需的参数,但是广告网络可以使用它们投放定位更精确的广告。我们提供了用于设置生日和地理位置的方法,还提供了用于设置性别的属性。系统会将这些信息传递给所有接受这些参数的广告网络。请查看以下示例:- (void)setBirthdayWithMonth:(NSInteger)m day:(NSInteger)d year:(NSInteger)y;- (void)setLocationWithLatitude:(CGFloat)latitude longitude:(CGFloat)longitude accuracy:(CGFloat)accuracyInMeters;@property (nonatomic, assign) GADGender gender;typedef enum { kGADGenderUnknown, kGADGenderMale, kGADGenderFemale} GADGender;一些广告网络接受用户收入或横幅广告颜色等其他参数。广告网络会逐渐在它们的中介适配器中添加对这些具体参数的支持,不过目前还无法传递针对特定广告网络的参数。6.(可选)设置事件通知要收到有关广告生命周期事件(例如展示)的通知,您可以实现GADBannerViewDelegate。在使用中介时,此委托会自动将您正在中介的所有广告网络的事件通知给您。例如,来自任意广告网络的展示会通过GADBannerViewDelegate的方法adViewDidReceiveAd进行报告。7.(可选)实现自定义事件利用自定义事件,您可以投放来自您的广告服务器的广告,或投放来自AdMob中介不支持的广告网络的广告,或者调用您选择的任何其他代码。要创建自定义事件,请定义一个实现GADCustomEventBanner的类。自定义事件必须在成功收到广告或无法收到广告时向GADCustomEventBannerDelegate回报。为此,您需要调用合适的委托方法(如下所示)。如果无法做到这一点,中介按序调用备用广告的功能就无法正确运行。理想情况下,您的自定义事件还应通知委托,以报告点击次数和点击操作的结果(呈现全屏模式或退出应用)。这样一来,您的报告中将会显示点击统计信息,您设置的所有事件监听器都会正确运行。我们会在运行时实例化您的GADCustomEventBanner,并为您设置GADCustomEventBannerDelegate,您无需自行实例化这些类。下面是一个自定义事件示例:@implementation MyCustomEventBanner// Will be set by the SDK.@synthesize delegate = delegate_;#pragma mark -#pragma mark GADCustomEventBanner- (void)requestBannerAd:(GADAdSize)adSize parameter:(NSString *)serverParameter label:(NSString *)serverLabelrequest:(GADCustomEventRequest *)request { // TODO: Use the parameters and self.delegate to make a banner request to your// ad network. Remember to set this class to be your banner's delegate.}#pragma mark -#pragma mark MyBanner Callbacks- (void)adViewDidReceiveAd:(MyBanner *)view { [self.delegate customEventBanner:self didReceiveAd:view];}- (void)adView:(MyBanner *)viewdidFailToReceiveAdWithError:(NSError *)error { [self.delegate customEventBanner:self didFailAd:error];}- (void)adViewWillPresentScreen:(MyBanner *)adView { [self.delegate customEventBannerWillPresentModal:self];}- (void)adViewWillDismissScreen:(MyBanner *)adView { [self.delegate customEventBannerWillDismissModal:self];}- (void)adViewDidDismissScreen:(MyBanner *)adView { [self.delegate customEventBannerDidDismissModal:self];}- (void)adViewWillLeaveApplication:(MyBanner *)adView { [self.delegate customEventBannerWillLeaveApplication:self];} 有关详情,请参阅GADCustomEventBanner.h和GADCustomEventBannerDelegate.h文件。自定义事件可以调用广告请求的方法以访问年龄或性别等请求参数。有关详情,请参阅GADCustomEventRequest.h。要创建占据整个屏幕的插页式广告自定义事件,而不是横幅广告视图中的自定义事件,请使用GADCustomEventInterstitial取代GADCustomEventBanner(有关详情,请参阅GADCustomEventInterstitial.h和GADCustomEventInterstitialDelegate.h文件)。8. (可选)检查 adNetworkClassName的值您可以视需要检查GADBannerView的adNetworkClassName属性,此属性可返回在调用adViewDidReceiveAd回调后提取了当前横幅广告的广告网络的广告网络类名称:- (void)adViewDidReceiveAd:(GADBannerView *)bannerView { NSLog(@"Banner adapter class name: %@", bannerView.adNetworkClassName);}同样,对于插页式广告,请在interstitialDidReceiveAd中检查GADInterstitial的adNetworkClassName属性:- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial { NSLog(@"Interstitial adapter class name: %@", interstitial.adNetworkClassName);}对于标准Google AdMob广告和通过中介投放的 Google AdMob 广告,adNetworkClassName会返回GADMAdapterGoogleAdMobAds。对于通过自定义事件获取的广告,该属性会返回GADMAdapterCustomEvents。9.(可选)处理旋转和全宽横向广告智能横幅广告仍然属于新鲜事物,因此来自其他广告网络的中介支持较为有限。不过,有几个广告网络支持“细长”的广告格式(在 iPhone 上展示的 480x32 和在 iPad 上展示的 1024x66)。对于这些广告网络,您可以在UIViewController中指定kGADAdSizeSmartBannerLandscape智能横幅广告尺寸,以便在横向模式中投放这些细长的广告尺寸。请参见以下示例代码:1:定义 adSizeForOrientation:// Define a common function for choosing an ad size based on the device's// orientation.- (GADAdSize)adSizeForOrientation:(UIInterfaceOrientation)orientation { // Landscape.// Only some networks support a thin landscape size// (480x32 on iPhone or 1024x90 on iPad).if (UIInterfaceOrientationIsLandscape(orientation)) { return kGADAdSizeSmartBannerLandscape; } // Portrait. // Most networks support banner (320x50) and Leaderboard (728x90) // sizes. if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { return kGADAdSizeLeaderboard; } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { return kGADAdSizeBanner; } // Unknown idiom. return kGADAdSizeBanner;}2:在创建广告时调用尺寸选择函数:{ // Call the common function you've defined to choose the appropriate ad size// at ad creation time.GADAdSize adSize = [self adSizeForOrientation:self.interfaceOrientation];GADBannerView *adView = [[GADBannerView alloc] initWithAdSize:adSize];// Request ad}3:针对不同的屏幕方向设置广告尺寸:// In the code of your UIViewController that handles interface rotation, set the// appropriate ad size.-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration { self.adView.adSize = [self adSizeForOrientation:orientation];}