こんにちは、コン(@pippi_kon)です。
この記事では、『SwiftでiPhoneアプリにAdMob広告をお手軽に設置できる便利な自作関数』についてご紹介します。
すでにバリバリアプリ開発をされている方には特に有益な情報はないと思います。
これからiPhoneアプリ開発でアプリの収益化を行うと思っている方や、アプリ開発のたびに毎回広告を貼るのに苦労しているという方向けの記事です。
関数作成の背景
iPhoneアプリにAdMob広告を設置するのって結構面倒ですよね。
特に広告設置場所の計算。
画面下に配置するときは、画面全体の高さから広告の高さを引いた位置を広告表示の開始地点とし…ってシンプルだけど面倒。
画面上に配置したいときは?上下両方のときは?
さらに、iPhoneXの登場でSafeAreaという概念が登場し、このエリアを考慮した座標計算が必要になりますます面倒に…。
一度コードを作り上げてしまえばあとはコピペして使い回せばいいのですが、ダラダラ書かれたコードを毎回コピペするのはスマートじゃないし、もっとスッキリさせたい。
こう、一発で広告を設置できるような関数ないかなぁ?
しかも、引数で広告配置場所を選択できるようなやつ。
テスト広告と本番広告も切り替えられるといいなぁ。
ないかぁ…
…
なければ作ればいいじゃん!
関数を使ってできること
今回ご紹介する私の自作関数を使えば以下のような問題を解決できます!
- 面倒な座標計算をしなくていい
- コピペの煩わしさを解消
- テスト/本番広告の入れ替えがラク
面倒な座標計算をしなくていい
例えば、広告をアプリ画面下に配置するとします。
ここで大変というか面倒なのが広告を表示する座標の計算。
まず画面全体の高さを取得して、そこから広告の高さとSafeAreaの高さを減算しなければいけません。
やってることはただの引き算なので簡単ですが、こんなことが起きます。
- それぞれの項目値を取得する方法がわからない。
- 取得方法を調べるのがめんどくさい。
- おいおいSafeAreaって何だよ?
しかし、今回ご紹介する関数を使えば、この面倒な計算を自動で実施してくれます!
値の取得方法を調べたり、SafeAreaの意味を調べたりする必要はありません。
iPhoneXにだってちゃんと表示してみせます!
しかも!関数の引数で広告の位置を設定できるんです。
設定といっても指定できるのは「画面上」と「画面下」の2箇所のみだけですけど。
汎用性を持たせるとかえって難しくなってしまいますからね。
コピペの煩わしさを解消
一度広告設置用コードを作り上げてしまえば、あとはそれをコピペして使い回せます。
一見お手軽に見えますが、こんな経験はありませんか?
- コピー元のソースコードが見つからない。(探すのが大変)
- コピーするコードが1箇所にまとまってないので何回も往復しなければいけない。
- 最新のソースコードかと思ったら古いものだった。
今回ご紹介する関数を使えば、このような煩わしさを解消できます!
必要なコードは全て1つのファイルに収めているので、これをインポートして呼び出すだけです。
ソースコードを探したり、最新のものかをチェックしたりする必要はありません。
テスト/本番広告の入れ替えがラク
アプリを作成しているとき、誤って自分の広告をクリックしてしまうとGoogleから制裁(広告停止)を受けてしまいます。
これを防止するために用意されているのがテスト用広告。
普段アプリ開発中はこのテスト広告を使ってテストしていると思います。
でも時々ちゃんと広告が表示されるか気になって本番用広告に差し替えたりしてませんか?
その度に長い広告IDをコピペして切り替えたりしてませんか?
本関数を使えば、このテスト用広告と本番用広告の切り替えが簡単にできます!
関数の引数でテストモードを指定(true/false)してあげるだけです。
もう長い広告IDのコピペは不要です!
関数の仕様
書式
イニシャライザー
init(id: String, test: Bool)
関数名 | init |
---|---|
引数 | id: String 本番用広告ユニットIDを指定する。 |
test: Bool テストモードかどうかを指定する。 true:テスト広告表示 false:本番用広告表示 |
|
戻り値 | なし |
特記事項 | なし |
広告表示関数
func putAdMobVer1(vc: UIViewController, adpos: Int)
関数名 | putAdMobVer1 |
---|---|
引数 | vc: UIViewController 広告を表示するViewControllerを指定する。 |
adpos: Int 広告表示位置を指定する。(定数指定) adposTop:画面上 adposBottom:画面下 |
|
戻り値 | なし |
特記事項 | 広告IDはイニシャライザーで指定する。 |
ソースコード
import UIKit import Foundation import GoogleMobileAds class MyAdMob{ // 広告ID let AdMobID: String let TEST_ID = "ca-app-pub-3940256099942544/2934735716" // テストモード判定フラグ let AdMobTest:Bool // 広告表示位置の定数 let adposTop = 1 let adposBottom = 2 //--------------------------------------------------------------------------- // 目的:イニシャライザ // 引数:id:広告ユニットID // test:テストモードにするかどうか // (true:テスト広告表示、false:本番用広告表示) // 戻値:なし // 特記:なし // 履歴:2018/05/26 新規作成 //--------------------------------------------------------------------------- init(id: String, test: Bool){ AdMobID = id AdMobTest = test } //--------------------------------------------------------------------------- // 目的:広告表示 // 引数:vc:広告を表示するViewController // adpos:広告表示位置(広告表示位置の定数を指定する) // 戻値:なし // 特記:viewDidLayoutSubviews()から呼び出すこと。 // 履歴:2018/05/26 新規作成 //--------------------------------------------------------------------------- func putAdMobVer1(vc: UIViewController, adpos: Int) { // 広告インスタンス作成 var admobView = GADBannerView() admobView = GADBannerView(adSize:kGADAdSizeBanner) // 広告位置設定 switch adpos { case adposTop: // 画面上部 let safeArea = vc.view.safeAreaInsets.top admobView.frame.origin = CGPoint(x:0, y:safeArea) case adposBottom: // 画面下部 let safeArea = vc.view.safeAreaInsets.bottom admobView.frame.origin = CGPoint(x:0, y:vc.view.frame.size.height - safeArea - admobView.frame.height) default: // それ以外はエラー(画面下部に設定しておく) print("adpos error. adpos = ", adpos) let safeArea = vc.view.safeAreaInsets.bottom admobView.frame.origin = CGPoint(x:0, y:vc.view.frame.size.height - safeArea - admobView.frame.height) } admobView.frame.size = CGSize(width:vc.view.frame.width, height:admobView.frame.height) // 広告設定ID(テスト/本番) if AdMobTest { admobView.adUnitID = TEST_ID }else{ admobView.adUnitID = AdMobID } // 広告表示 admobView.rootViewController = vc admobView.load(GADRequest()) vc.view.addSubview(admobView) } }
使い方
アプリ画面下に本番用広告を表示する場合の使い方です。
①「MyAdMob.swift」という名称のファイルを新規作成し、そこに上記ソースコードをコピーして保存します。
②Xcodeに「MyAdMob.swift」を追加します。
Xcodeのツリーメニューで、swiftのファイルが多数ぶら下がっているフォルダの上で右クリックし、「Add files to 〜」を選択。
その後、先ほど作成した「MyAdMob.swift」を選択。
③「ViewController.swift」に以下を追記。
override func viewDidLayoutSubviews(){ let ad = MyAdMob(id: "広告ユニットIDを指定", test: false) ad.putAdMobVer1(vc: self, adpos: ad.adposBottom) }
④以上で設定完了です。シミュレータを実行してみてください。
なお、広告を画面上に表示させたい場合は、③の
ad.putAdMobVer1(vc: self, adpos: ad.adposBottom)
を
ad.putAdMobVer1(vc: self, adpos: ad.adposTop)
にしてください。
上下両方に表示したい場合は、
ad.putAdMobVer1(vc: self, adpos: ad.adposBottom) ad.putAdMobVer1(vc: self, adpos: ad.adposTop)
と2回記述すればOKです。
テスト用広告に切り替えたい場合は、③の
let ad = MyAdMob(id: "広告ユニットIDを指定", test: false)
を
let ad = MyAdMob(id: "広告ユニットIDを指定", test: true)
にしてください。
最後に
今回は、『SwiftでiPhoneアプリにAdMob広告をお手軽に設置できる便利な自作関数』についてご紹介しました。
どなかのご参考になれば幸いです。