【转】Google AdMob 广告 iOS 中级指南

转自: https://developers.google.com/mobile-ads-sdk/docs/ios/intermediate?hl=zh-cn

转载仅为防止被墙致无法查阅!

Google AdMob 广告 iOS 中级指南

横幅尺寸

除了 iPod Touch 和 iPhone 所显示的 320x50 外,Google AdMob 广告还支持 iPad 所用的三种平板电脑专用横幅广告尺寸:

尺寸(宽度x高度) 说明 适用范围 AdSize 常量
320x50 标准横幅广告 手机和平板电脑 GAD_SIZE_320x50
300x250 IAB 中矩形 平板电脑 GAD_SIZE_300x250
468x60 IAB 全尺寸横幅广告 平板电脑 GAD_SIZE_468x60
728x90 IAB 页首横幅 平板电脑 GAD_SIZE_728x90
SDK 会请求系统传回满足请求方 GADBannerView 要求的最大尺寸。如果您的视图尺寸太小,则不会返回任何广告。

广告刷新

如果您在服务器的 AdMob 帐户中指定了刷新率,横幅广告就会自动刷新,也可以通过加载新的请求以编程方式进行刷新。

注意:当前的刷新率范围是 12-120 秒

GADRequest

您可以先自定义 GADRequest,然后再将其传递给 GADBannerView.loadRequest:,这样 Google 就能更精确地定位广告。

GADRequest.testDevices

可以使用此参数指定要接收测试广告的一系列设备。您应该在开发过程中使用这一属性防止产生不适当的展示。要验证 SDK 已成功完成集成,请将您的测试设备添加到此列表,运行应用,然后点击所显示的测试广告。应用内浏览器应该向上滑动并覆盖整个屏幕。

设备标识符会标识设备(与向 Apple 注册的开发设备标识相同)。要获得此值,请打开 Organizer(Xcode 中的 Window > Organizer),用 Control 键或鼠标右键点击设备名,然后选择 Copy Device Identifier(复制设备标识符)。您也可以通过使用 [[UIDevice currentDevice] uniqueIdentifier] 的代码获得此值。

GADRequest *request = [GADRequest request];

request.testDevices = [NSArray arrayWithObjects:
    GAD_SIMULATOR_ID,                               // 模拟器
    @"TEST_DEVICE_ID",                              // 测试 iOS 设备
    nil];
广告定位

您还可以指定地理位置定位信息和根据受众特征定位的信息。出于对用户隐私权的尊重,Google 要求所指定的位置和受众特征数据必须来自您的应用已在使用的信息。

GADRequest *request = [GADRequest request];

request.gender = kGADGenderMale;

[request setLocationWithLatitude:locationManager_.location.coordinate.latitude
                       longitude:locationManager_.location.coordinate.longitude
                        accuracy:locationManager_.location.horizontalAccuracy];

[request setBirthdayWithMonth:3 day:13 year:1976];

[bannerView_ loadRequest:request];
如果不想使用 CoreLocation,您可以通过更宽泛的字词来指定位置:

[request setLocationWithDescription:@"94070 US"];
注意:setLocationWithDescription: 和 setLocationWithLatitude:longitude:accuracy: 相互排斥。

GADBannerViewDelegate

您可以选择实施全部或部分 GADBannerViewDelegate,以跟踪请求失败或“点击访问”等广告生命周期事件。

@protocol GADBannerViewDelegate <NSObject>
  @optional
  - (void)adViewDidReceiveAd:(GADBannerView *)bannerView;
  - (void)adView:(GADBannerView *)bannerView
      didFailToReceiveAdWithError:(GADRequestError *)error;

  - (void)adViewWillPresentScreen:(GADBannerView *)bannerView;
  - (void)adViewDidDismissScreen:(GADBannerView *)bannerView;
  - (void)adViewWillLeaveApplication:(GADBannerView *)bannerView;
@end
这些方法既可以在视图控制器等独立的对象中实施:

#import "GADBannerViewDelegate.h"

@interface NibExampleViewController : UIViewController <GADBannerViewDelegate> {
}

@end
也可以作为 GADBannerView 子类的一部分实施:

#import "GADBannerView.h"
#import "GADBannerViewDelegate.h"

@interface MyBannerView : GADBannerView <GADBannerViewDelegate> {
}

@end
在请求广告前,请务必先使用 setDelegate: 设置委托。

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
当 loadRequest: 成功时发送;如果发送者之前一直隐藏,这是将其添加到视图层级结构的好机会。要使横幅广告从视图控制器加载后就在屏幕上向上滑动,可以参考下例:
- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {
  [UIView beginAnimations:@"BannerSlide" context:nil];
  bannerView.frame = CGRectMake(0.0,
                                self.view.frame.size.height -
                                    bannerView.frame.size.height,
                                bannerView.frame.size.width,
                                bannerView.frame.size.height);
  [UIView commitAnimations];
}
- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error
当 loadRequest: 失败时发送。常见失败原因:网络故障、应用配置错误,或广告资源不足。您可以记下这些事件,以便进行调试:
- (void)adView:(GADBannerView *)bannerView
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@”adView:didFailToReceiveAdWithError:%@”, [error localizedDescription]);
}
- (void)adViewWillPresentScreen:(GADBannerView *)bannerView
在系统响应用户触摸发送者的操作而即将向其展示全屏广告用户界面时发送。与使用 UIApplicationDidEnterBackgroundNotification 时类似,此时应该暂停所有动画、计时器或其他可能会与用户互动的活动,并保存应用状态。
通常用户会简单浏览全屏广告然后关闭它,这样会生成 adViewDidDismissScreen: 并将控制权返回给您的应用。如果横幅广告的操作是 Click-to-App-Store 或 Click-to-iTunes,或者用户在广告内按“首页”键,则您的应用会转到后台运行或者可能终止运行。

如果使用 iOS 4.0+,在这些情况下,系统接着会相继调用根视图控制器的 applicationWillResignActive: 以及 adViewWillLeaveApplication: 这两个方法。

- (void)adViewDidDismissScreen:(GADBannerView *)bannerView
当用户已退出发送者的全屏用户界面时发送
- (void)adViewWillDismissScreen:(GADBannerView *)bannerView
在用户关闭发送者的全屏用户界面前发送,用以恢复您的应用和根视图控制器。这时应该重新启动 adViewWillPresentScreen: 执行期间暂停的任何前台活动。
- (void)adViewWillLeaveApplication:(GADBannerView *)bannerView
在应用因为用户触摸 Click-to-App-Store 或 Click-to-iTunes 横幅广告而转至后台或终止运行前发送。在此之前,先会有 applicationDidEnterBackground: 等常规 UIApplicationDelegate 通知显示。
在这些方法中,您可以通过查看 GADBannerView.hasAutoRefreshed 来判断是否有刷新操作触发了事件。

请注意,如果您将委托作为非 GADBannerView 子类的独特对象来实施,在发布视图前,请务必将 GADBannerView 的委托属性设为 nil。

- (void)viewDidUnload {
  bannerView_.delegate = nil;
  [bannerView_ release];
}

- (void)dealloc {
  [super dealloc];
}
Objective-C 委托不会保留,可能会在委托对象最终获得重新分配之前采用异步方式发送出去。

猜你喜欢

转载自bsr1983.iteye.com/blog/1724659