Googleが提供しているモバイルアプリ向け広告「AdMob」をアプリに実装した際に遭遇したエラー対応のメモ。環境はXcode6.1。
photo credit: ShotokanZH via photopin cc
サマリー
1.AdMobの実装
2.AdMob実装後、実行時にThread 1 SIGABRT error
3.対応方法
1.AdMobの実装
実装にあたって必要となるのは下記の作業。
(1)AdMobのダウンロード
http://jp.admob.com/からダウンロード。GoogleAdsenseで使用しているユーザでのログインが求められる。使用していない場合は登録が必要となる。
ログイン後、自分のアプリを登録して初めて「パブリッシャーID」が与えられる。このIDはあとでコードに埋め込む必要がある。
(2)プロジェクトへ組み込み
ダウンロードしたzipを解凍し、Add-onsフォルダ意外を選択してプロジェクト組み込む。下記のように新規グループ「AdMob」を作成し、その中に組み込むとよい。
(3)ライブラリの設定
AdMobを使用するために必要な下記を、General->Linked Frameworks and Librariesにてライブラリ追加する。
- StoreKit
- AudioToolbox
- MessageUI
- SystemConfiguration
- CoreGraphics
- AdSupport
もう一つ、AddOtherにて(2)で組み込んだ「libGoogleAdMobAds.a」も追加しておく。
- libGoogleAdMobAds.a
(4)BuildSettings->otherLinkerFlagsに「-ObjC」をセット
(5)コードを書いていく。
viewController.h
#import "GADBannerView.h"
@interface ViewController : UIViewController <GADBannerViewDelegate>
{
GADBannerView *bannerView_;
}
ほかのDelegateと併行して書きたい場合は、下記のようにカンマ区切りで。
@interface ViewController : UIViewController <GKGameCenterControllerDelegate,ADBannerViewDelegate,GADBannerViewDelegate>
{
GADBannerView *bannerView_;
}
viewController.m
#import "GADBannerView.h"
viewDidLoad内
// adMob // サイズを指定して広告のインスタンス生成、ポートレイトで bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait]; // AdMobのパブリッシャーIDを指定 bannerView_.adUnitID = @"xxxxxxxxxxxxxxxxxxxx"; // AdMob広告を表示するUIViewController指定、広告追加 bannerView_.rootViewController = self; [self.view addSubview:bannerView_]; // 広告をビューの最下部表示 [bannerView_ setCenter:CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height-bannerView_.bounds.size.height/2)]; // 広告データ読み込み要求 [bannerView_ loadRequest:[GADRequest request]];
- (void)viewDidUnload { bannerView_.delegate = nil; [bannerView_ release]; } //loadRequest失敗 - (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error { NSLog(@"adView:didFailToReceiveAdWithError:%@", [error localizedDescription]); } //loadRequest成功 - (void)adViewDidReceiveAd:(GADBannerView *)bannerView { // 表示位置 [UIView animateWithDuration:0.3 animations:^{ bannerView.frame = CGRectMake(0.0, self.view.frame.size.height - bannerView.frame.size.height, bannerView.frame.size.width, bannerView.frame.size.height); }]; }
上記xxxxxxxxxxx…部にはAdMob登録時に取得したパブリッシャーIDを貼り付ける。ちなみにAdMobパブリッシャーIDは、GoogleAdsenseのパブリッシャーコードとは違うことに注意。
2.AdMob実装後、実行時にThread 1 SIGABRT error
上記作業後、ビルドしてみると下記の箇所にて「Thread 1 SIGABRT」エラーが。
bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
Thread 1 SIGABRTの時ってたいがいコードの記述ミスなどのような凡ミスによるエラーのイメージが多かったので、周辺のコードを時間をかけて調べたが間違いはない模様。
3.対応方法
更にいろいろ探っていくと1-(4)otherLinkerFlagsへ「-ObjC」をセットする作業に不備があったことに気付き(なぜか反映されていなかった)、そこをきちんとセットしたらエラーはすぐに解消。凡ミスが原因であったことには変わりない。
結果、下記のとおりAdMob広告が下部にきちんと表示された。個人的にはiAdに比べてコードだけの設定で済む(mainStoryBoardの設定が不要)ところがラクかなと。
- 作者: 荻原剛志
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/12/10
- メディア: 大型本
- この商品を含むブログ (2件) を見る
詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2014/12/13
- メディア: 単行本
- この商品を含むブログ (9件) を見る
- 作者: 高橋政明
- 出版社/メーカー: 有限会社 快技庵
- 発売日: 2014/09/04
- メディア: Kindle版
- この商品を含むブログを見る