スタートガイド

このガイドは、AdMob で iOS アプリを収益化することをご希望のパブリッシャー様のうち、Firebase を使用されていない方を対象としています。アプリで Firebase を使用する予定がある場合(または使用を検討している場合)は、このガイドの Firebase を使った AdMob 向け のバージョンをご覧ください。

Google Mobile Ads SDK のアプリへの統合は、広告を表示して収益を得るための第一歩です。SDK を組み込んだら、サポート対象広告フォーマットの実装作業に進めます。

前提条件

  • Xcode 15.3 以降を使用していること
  • iOS 12.0 以降をターゲットとしていること

Mobile Ads SDK をインポートする

次のいずれかの方法で Google Mobile Ads SDK をインポートします。

CocoaPods(推奨)

iOS プロジェクトに SDK を簡単にインポートするには、CocoaPods を使う方法がおすすめです。プロジェクトの Podfile を開き、アプリのターゲットに次の行を追加します。

pod 'Google-Mobile-Ads-SDK'

コマンドラインから次のコマンドを実行します。

pod install --repo-update

CocoaPods を初めてご利用の場合は、CocoaPods の公式ドキュメントで Podfile の作成方法と使用方法をご確認ください。

Swift Package Manager

Google Mobile Ads SDK はバージョン 9.0.0 から Swift Package Manager に対応しています。Swift パッケージをインポートする手順は次のとおりです。

  1. Xcode で File > Add Packages... を開き、Google Mobile Ads の Swift パッケージをインストールします。

  2. 表示されたプロンプトで、Google Mobile Ads の Swift パッケージの GitHub リポジトリ(下記)を検索します。

    https://github.com/googleads/swift-package-manager-google-mobile-ads.git
    
  3. 使用する Google Mobile Ads の Swift パッケージのバージョンを選択します。新しいプロジェクトの場合は [Up to Next Major Version] を選択することをおすすめします。

完了すると、Xcode はパッケージの依存関係の解決とバックグラウンドでのダウンロードを開始します。パッケージの依存関係の追加について詳しくは、Apple の記事を参照してください。

手動ダウンロード

  1. Google Mobile Ads SDK をダウンロードし、次のフレームワークを Xcode プロジェクトに Embed & Sign します。

    • GoogleMobileAds.xcframework
    • UserMessagingPlatform.xcframework
  2. プロジェクトのビルド設定で、次の操作を行います。

    • /usr/lib/swift パスを [Runpath Search Paths] に追加します。
    • [Other Linker Flags] に -ObjC リンカー フラグを追加します。

Info.plist を更新する

アプリの Info.plist ファイルを更新し、次の 2 つのキーを追加します。

  1. AdMob app ID found in the AdMob UIの文字列値を含む GADApplicationIdentifier キー。

  2. Google の SKAdNetworkIdentifier 値(cstr6suwn9.skadnetwork)を含む SKAdNetworkItems キー。これらの値を Google に提供したサードパーティの購入者を選択します。

完全なスニペット

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
<array>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cstr6suwn9.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4fzdc2evr5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2fnua5tdw4.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ydx93a7ass.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>p78axxw29g.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v72qych5uu.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ludvb6z3bs.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>cp8zw746q7.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3sh42y64q3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>c6k4g5qg8m.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>s39g8k73mm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qy4746246.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>hs6bdukanm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>mlmmfzh3r3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v4nxqhlyqp.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>wzmmz9fp6w.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>su67r6k2v3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>yclnxrl5pm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>7ug5zh24hu.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>gta9lk7p23.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>vutu7akeur.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>y5ghdn5j9k.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>v9wttpbfk9.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>n38lu8286q.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>47vhws6wlr.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>kbd757ywx3.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>9t245vhmpl.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>a2p9lx4jpn.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>22mmun2rn5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4468km3ulz.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>2u9pt9hc89.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8s468mfl3y.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>ppxm28t8ap.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>uw77j35x4d.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>pwa73g5rt2.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>578prtvx9j.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>4dzt52r2t5.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>tl55sbb4fm.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>e5fvkxwrpn.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>8c4e2ghe7u.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3rd42ekr43.skadnetwork</string>
  </dict>
  <dict>
    <key>SKAdNetworkIdentifier</key>
    <string>3qcr597p9d.skadnetwork</string>
  </dict>
</array>

AdMob アカウントの作成アプリの登録が済んでいない場合は、ここで行います。

実際のアプリでは、サンプルのアプリ ID を実際のAdMob アプリ ID に置き換えます。Hello World アプリで SDK を試すだけであれば、サンプル ID を使用できます。

Mobile Ads SDK を初期化する

広告を読み込む前に、GADMobileAds.sharedInstancestartWithCompletionHandler: メソッドを呼び出します。このメソッドは SDK を初期化し、初期化が完了(または 30 秒間のタイムアウトが経過)した時点で完了ハンドラをコールバックします。この処理が必要なのは 1 回のみで、アプリの起動時に行うのが理想的です。できるだけ早く startWithCompletionHandler: を呼び出してください。

AppDelegatestartWithCompletionHandler: メソッドを呼び出す方法の例を次に示します。

AppDelegate の例(抜粋)

Swift

import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    GADMobileAds.sharedInstance().start(completionHandler: nil)

    return true
  }
}

SwiftUI

import GoogleMobileAds

class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    GADMobileAds.sharedInstance().start(completionHandler: nil)

    return true
  }
}

@main
struct YourApp: App {
  // To handle app delegate callbacks in an app that uses the SwiftUI lifecycle,
  // you must create an application delegate and attach it to your `App` struct
  // using `UIApplicationDelegateAdaptor`.
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

  var body: some Scene {
    WindowGroup {
      NavigationView {
        ContentView()
      }
    }
  }
}

Objective-C

@import GoogleMobileAds;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  [GADMobileAds.sharedInstance startWithCompletionHandler:nil];
  return YES;
}

@end

広告フォーマットを選択します

Mobile Ads SDK がインポートされて初期化が完了したら、いよいよ広告を実装します。 AdMob には多様な広告フォーマットがあり、アプリのユーザー エクスペリエンスに合わせて最適なものを選べます。

SwiftUI デベロッパーの場合は、SwiftUI ガイドをご覧ください。

バナー広告ユニットには、アプリのレイアウト内の一部分を使用する長方形の広告が表示されます。設定した時間が経過すると自動的に更新されます。そのため、アプリで同じ画面を表示していてもユーザーには定期的に新しい広告が表示されます。また、バナー広告ユニットは最も簡単に実装できる広告フォーマットでもあります。

バナー広告を実装する

インタースティシャル

インタースティシャル広告ユニットでは、アプリに全画面広告が表示されます。この広告ユニットは、アプリの流れが自然に途切れるタイミングや画面の切り替え時(ゲームアプリでレベルをクリアした後など)に配置します。

インタースティシャル広告を実装する

ネイティブ

ネイティブ広告は、広告見出しや行動を促すフレーズなどのアセットをアプリに表示する方法をカスタマイズできる広告です。広告のスタイルを自分で設定することで、自然かつコンテンツの邪魔にならないように広告を表示し、ユーザー エクスペリエンスを向上させることができます。

ネイティブ広告を実装する

特典

リワード広告ユニットを使用すると、ゲームをプレイしたり、アンケートに答えたり、動画を視聴したりしたユーザーに報酬として、コイン、追加ライフ、ポイントなどのアプリ内アイテムを進呈できます。広告ユニットごとに異なる報酬を設定し、ユーザーが受け取る報酬の価値やアイテムを指定できます。

リワード広告を実装する

リワード インタースティシャル

リワード インタースティシャルは、アプリの画面が変わる自然なタイミングで自動的に表示される広告に対して報酬(例: コイン、追加ライフ)を提供できる、新しいタイプのインセンティブ広告フォーマットです。

リワード広告とは異なり、ユーザーはリワード インタースティシャルを表示するためにオプトインする必要はありません。

リワード広告のオプトイン プロンプトの代わりに、リワード インタースティシャルでは、報酬について通知し、ユーザーが希望する場合にはオプトアウトできる選択肢を提示する導入画面が必要です。

リワード インタースティシャル広告を実装する

アプリの起動

アプリ起動は、ユーザーがアプリを開いたときやアプリに戻ったときに表示される広告フォーマットです。広告は読み込み画面にオーバーレイ表示されます。

アプリ起動時広告を実装する