トップ «前の日記(2012-02-19) 最新 次の日記(2012-02-21)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|

2012-02-20 [iOS]AdMob

Google AdMobの魅力は、容易に自分のアプリケーションに組み込む事が出来る事だ。

以前は、使用しているオープンソースのフレームワークも一緒に組み込む等、面倒な部分があったが、現在はアーカイブのライブラリとヘッダファイルを追加するだけでOK。組み込むソースコードも、AdMobサイトで丁寧に説明してある。なので、ここで組み込む手順を説明するまでもないので、自分が工夫していることについて説明する。

AdMobは使い始めたら直ぐに広告が表示されるようになる訳ではないのと、小数の同じ端末から何度も広告が表示されると、不正な操作と判断されるということからだと思うが、デバッグ時は明示的にそのことを設定する必要がある。

著者は、Supporting Filesの<アプリ名>-Prefix.pchで、デバッグ出力用のマクロの定義時に、AdMob試験用のマクロを定義している。

#ifdef	DEBUG
#define	DBGMSG(...)	NSLog(__VA_ARGS__)
#define	ADMOB_TESTDRIVE
#else	/* DEBUG */
#define	DBGMSG(...)
#endif	/* DEBUG */

ViewControllerにAdMobのプロパティを定義する。

@interface MyViewController : UIViewController 
@property (strong, nonatomic) GADBannerView             *bannerView;
@end

ViewControllerの-(void)viewDidLoadメソッドでインスタンスを生成する。

- (void)viewDidLoad
{
    [super viewDidLoad];
 
    self.bannerView = [[GADBannerView alloc]
                   initWithFrame:CGRectMake(0.0,
                                            self.view.frame.size.height -
                                            GAD_SIZE_320x50.height,
                                            GAD_SIZE_320x50.width,
                                            GAD_SIZE_320x50.height)];
    self.bannerView.adUnitID = @"自分のAdMobパグリッシャーID";
    self.bannerView.rootViewController = self;
    [self.view addSubview:self.bannerView];
#ifdef	ADMOB_TESTDRIVE
    GADRequest  *request = [GADRequest request];
    request.testDevices = [NSArray arrayWithObjects:
                           GAD_SIMULATOR_ID,
                           @"デバイスID(1)",
                           @"デバイスID(2)",
                           nil];
    [bannerView_ loadRequest:request];
#else   /* ADMOB_TESTDRIVE */
    [self.bannerView loadRequest:[GADRequest request]];
#endif  /* ADMOB_TESTDRIVE */
    self.bannerView.delegate = self;
}

その際、ADMOB_TESTDRIVEが定義されている。つまりデバッグ時は、デバッグで使用する自分のデバイスIDを上記のコードのように設定する。

広告が表示される場合と、表示されない場合で、画面レイアウトを変更する場合があると思が、以下のそれの例。

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
{
    [UIView beginAnimations:@"BannerSlideOn" context:nil];
    bannerView.frame = CGRectMake(0.0,
                                  self.view.frame.size.height - bannerView.frame.size.height,
                                  bannerView.frame.size.width,
                                  bannerView.frame.size.height);
    self.コントロール.frame = CGRectMake(self.コントロール.frame.origin.x,
                                      元のY座標の値 - bannerView.frame.size.height,
                                      self.コントロール.frame.size.width,
                                      self.コントロール.frame.size.height);
    [UIView commitAnimations];
}
 
- (void)adView:(GADBannerView *)bannerView
didFailToReceiveAdWithError:(GADRequestError *)error
{
    [UIView beginAnimations:@"BannerSlideOff" context:NULL];
    self.コントロール.frame = CGRectMake(self.コントロール.frame.origin.x,
                                      元のY座標の値,
                                      self.コントロール.frame.size.width,
                                      self.コントロール.frame.size.height);
     [UIView commitAnimations];
}

上記の例では、ボタン等の<コントロール>を広告の表示/非表示に合わせて位置を変更している。全てを計算で求めると、トラブルで順番が狂うとおかしくなるので、ハードコーディングしている。

_ ソースコード

AdMobが組み込まれていないプロジェクトだと、しょうがないので、今回はソースコードはなしだ。

_ 関連情報

Google AdMob
Google AdMob Ads iOS Fundamentals
Google AdMobのサイト。

トップ «前の日記(2012-02-19) 最新 次の日記(2012-02-21)» 編集