2日目にして早くも iOS Advent Calendar 2nd が途切れそうなので急遽書かせて頂きます!
iAdの実装方法
一昔前
#import <iAd/iAd.h>
adView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
adView.frame = CGRectMake(0, self.view.frame.size.height -
adView.frame.size.height, adView.frame.size.width, adView.frame.size.height);
adView.autoresizesSubviews = YES;
adView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
adView.delegate = self;
[self.view addSubview:adView];
バナーオブジェクトを生成して、表示位置を表示して、回転時の表示に対応して、、いろいろ大変でした。
今
import iAd
self.canDisplayBannerAds = true
たったこれだけ!
画面の最下部にAdを表示してくれます。(表示位置は変えられないようです)
ちなみに、canDisplayBannerAds
プロパティは iOS 7 から UIViewControlleriAdAdditions
に追加されています。
@available(iOS 7.0, *)
public var canDisplayBannerAds: Bool
インタースティシャルにも対応
あらかじめAdを読み込んでおき、
UIViewController.prepareInterstitialAds()
interstitialPresentationPolicy
に Automatic
を指定します。
self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Automatic
これだといつ表示されるかわからないので、任意のタイミングで表示することもできます。
self.interstitialPresentationPolicy = ADInterstitialPresentationPolicy.Manual
let displayed = self.requestInterstitialAdPresentation()
どうやってAdを表示してるのか
試しに View UI Hierarchy で表示してみました。
UIViewController の subview として ADBannerView
を addSubview しているようですね。
(lldb) po self.view.subviews
▿ 2 elements
- [0] : <UITableView: 0x7f959983c600; frame = (0 0; 375 617); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7f95995685d0>; layer = <CALayer: 0x7f95995597b0>; contentOffset: {0, -64}; contentSize: {375, 880}>
- [1] : <ADBannerView: 0x7f959943bb30; frame = (0 617; 375 50); clipsToBounds = YES; layer = <CALayer: 0x7f959942e0c0>>
ちなみに、Ad表示前にもともと表示していたビュー(上の例だとUITableView)には self.originalContentView
でアクセスできます。
(lldb) po self.originalContentView
<UITableView: 0x7f959983c600; frame = (0 0; 375 617); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7f95995685d0>; layer = <CALayer: 0x7f95995597b0>; contentOffset: {0, -64}; contentSize: {375, 880}>
サンプルコード
ちょっと試してみたい方はこちら
https://github.com/koogawa/iAdSample
肝心のフィルレートは…?
その話はやめておきます。