はじめに
個人開発しているアプリに広告を表示したく調べてやってみた内容をまとめました。
今回はAdMobを使ってみました。
Google AdMob はアプリの収益化にご利用いただけるモバイル広告プラットフォームです。
利用する上での条件はこちら
Xcode 13.2.1 以降を使用していること
iOS 10.0 以降をターゲットとしていること
推奨: AdMob アカウントを作成して、アプリを登録します。
公式ドキュメントを参考にやっていきます。
環境
Xcode 14.1
内容
AdMob アカウントを作成する
- ステップ 1: AdMob アカウントを作成する
- ステップ 2: Google アカウントを確認する
- ステップ 3: お支払い情報を入力する
アプリを登録する
すべてのアプリ画面から今回はiOSを選択して進めていく
AppStore公開済みのアプリなので検索したら表示されました
審査提出後のステップ
https://support.google.com/admob/answer/9363762?hl=ja
- app-ads.txt を設定
- ステップ 1: デベロッパー サイトを開設する
- ステップ 2: app-ads.txt ファイルを作成する
- ステップ 3: デベロッパー サイトで app-ads.txt ファイルを公開する
- ステップ 4: AdMob による app-ads.txt ファイルのクロールと検証が終わるのを待つ
- ステップ 5: app-ads.txt ファイルが AdMob アカウントで検証済みであることを確認する
この作業は必須ではなさそうですが、リリース後対応した方が良さそうですね
Mobile Ads SDK をインポートする
CocoaPodsを使ってpod install --repo-update
でインポートしていきます
pod 'Google-Mobile-Ads-SDK'
エラーが出る場合はターミナルをRosettaを使用して開く
(Finderのターミナルを右クリックから情報を見る
で変更)にチェックを入れて再度インポートしてみるといけるかもしれません
Swift Package Managerを使う場合は
Info.plistに追加する
SKAdNetworkIdentifier
には対象のものを追加する
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
</array>
キーポイント: 実際のアプリでは、上記の ID ではなく実際のAdMob アプリ ID を使用することが重要です。ただし、Hello World アプリで SDK を試すだけであれば、上記のサンプルのアプリ ID を使用できます。
ca-app-pub-3940256099942544~1458002511
この値を開発用で使う
リリース用の GADApplicationIdentifier
はアプリ設定画面から確認して入れておく
リリースと開発で値を変えるには
User-Defined
で設定値を定義してInfo.plistに$(ADMOB_APP_ID)
を追加する
<key>GADApplicationIdentifier</key>
<string>$(ADMOB_APP_ID)</string>
さらにDebug
とRelease
以外に設定を追加したい場合は
以前こちらの記事を書きました👇
Mobile Ads SDK を初期化する
+ import GoogleMobileAds
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
+ GADMobileAds.sharedInstance().start(completionHandler: nil)
return true
}
}
警告
startWithCompletionHandler: の呼び出し時に、Mobile Ads SDK またはメディエーション パートナーの SDK によって広告のプリロードが行われる場合があります。欧州経済領域(EEA)内のユーザーから同意を得る必要がある場合は、リクエスト固有のフラグ(tagForChildDirectedTreatment や tag_for_under_age_of_consent など)を設定するか、広告が読み込まれる前になんらかの対応策を取ったうえで、Mobile Ads SDK を初期化するようにしてください。
とのことなので、リリース状況によって注意が必要です
広告フォーマットを選択する
いくつか種類がありますが、今回はバナーを選択します。
デバイス画面の上部か下部に表示される長方形の広告です。 ユーザーがアプリを操作している間は画面に残り、一定の時間が経過すると自動的に更新されます。モバイル広告を初めてお使いの場合は、この広告から始めるのが最適です。
バナーを実装する
アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。実際の広告でテストすると、アカウントが停止される場合があります。
テスト広告ID ca-app-pub-3940256099942544/2934735716
を開発で使用
リリース用の広告IDを取得する
GADBannerView を作成
StoryboaedにView
を追加してGADBannerView
を指定
対象のViewControllerに紐付けておく
+ import GoogleMobileAds
+ @IBOutlet weak var bannerView: GADBannerView!
GADBannerView プロパティを設定
注: 広告ユニット ID は AdMob 管理画面で作成され、広告が表示されるアプリ内の場所を表します。たとえば、2 つのビュー コントローラでバナー広告を表示する場合、それぞれにひとつずつ広告ユニットを作成できます。
override func viewDidLoad() {
super.viewDidLoad()
...
+ bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
+ bannerView.rootViewController = self
}
上記の実装でテスト表示はできるが
広告IDも開発用とリリース用で別々の値を取得する必要があるので
GADApplicationIdentifier
と同じようにUser-Defined
で定義
Bundle.main.object(forInfoDictionaryKey: "AdMobSettingViewBannerAdUnitId") as? String
をbannerView.adUnitID
に渡すようにする
広告を読み込む
override func viewDidLoad() {
super.viewDidLoad()
...
bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
bannerView.rootViewController = self
+ bannerView.load(GADRequest())
}
その他
GADBannerViewDelegate
を実装することで広告表示のライフサイクルイベントで処理を追加することができる
以上の実装で
無事テスト用の広告が表示されました👏
サイズについてはこちらを参照したが、アダプティブ バナーとすることで自動調整されるようです
さいごに
広告表示の実装は思っていたより簡単でした。
SwiftUIで実装したアプリに導入して、また気付きポイントあればまとめてみたいと思います。