インタースティシャル広告は、ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。通常は、アプリ使用フローの自然な切れ目(アクティビティとレベルが切り替わる合間、ゲームのステージが切り替わる合間など)に表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先に移動するか、広告を閉じてアプリに戻るかを選択できます。 事例紹介。
このガイドでは、インタースティシャル広告を iOS アプリに組み込む方法について説明します。
前提条件
- Google Mobile Ads SDK 8.0.0 以降
- スタートガイドの手順を完了していること。
テストは必ずテスト広告で行う
アプリの作成とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。実際の広告を使用すると、アカウントが停止される可能性があります。
テスト広告は、次に示す iOS インタースティシャル向けのテスト専用広告ユニット ID を使うと簡単に読み込むことができます。
ca-app-pub-3940256099942544/4411468910
この ID は、すべてのリクエストに対してテスト広告を返すように構成されており、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、テスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。
実装
インタースティシャル広告を組み込む主な手順は、以下のとおりです。
- 広告を読み込みます。
- コールバックを登録します。
- 広告を表示してリワード イベントを処理します。
広告を読み込む
広告の読み込みは、GADInterstitialAd
クラスで静的 loadWithAdUnitID:request:completionHandler:
メソッドを使用して行います。読み込みメソッドには、広告ユニット ID と GADRequest
オブジェクトのほか、広告の読み込みの成功時または失敗時に呼び出される完了ハンドラが必要です。読み込まれた GADInterstitialAd
オブジェクトは、完了ハンドラのパラメータとして提供されます。次の例は、ViewController
クラスで GADInterstitialAd
を読み込む方法を示しています。
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var interstitial: GADInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load interstitial ad with error: \(error.localizedDescription)") return } interstitial = ad } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]); return; } self.interstitial = ad; }]; }
コールバックを登録する
表示イベントの通知を受け取るには、GADFullScreenContentDelegate
プロトコルを実装し、返される広告の fullScreenContentDelegate
プロパティに割り当てる必要があります。GADFullScreenContentDelegate
プロトコルは、広告の表示が成功または失敗した場合と、広告が閉じられた場合のコールバックを処理します。次のコードは、プロトコルを実装して広告に割り当てる方法を示しています。
Swift
class ViewController: UIViewController, GADFullScreenContentDelegate { private var interstitial: GADInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GADRequest() GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load interstitial ad with error: \(error.localizedDescription)") return } interstitial = ad interstitial?.fullScreenContentDelegate = self } ) } /// Tells the delegate that the ad failed to present full screen content. func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Ad did fail to present full screen content.") } /// Tells the delegate that the ad will present full screen content. func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad will present full screen content.") } /// Tells the delegate that the ad dismissed full screen content. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did dismiss full screen content.") } }
Objective-C
@interface ViewController ()<GADFullScreenContentDelegate> @property(nonatomic, strong) GADInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GADRequest *request = [GADRequest request]; [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]); return; } self.interstitial = ad; self.interstitial.fullScreenContentDelegate = self; }]; } /// Tells the delegate that the ad failed to present full screen content. - (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad didFailToPresentFullScreenContentWithError:(nonnull NSError *)error { NSLog(@"Ad did fail to present full screen content."); } /// Tells the delegate that the ad will present full screen content. - (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad will present full screen content."); } /// Tells the delegate that the ad dismissed full screen content. - (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad did dismiss full screen content."); }
GADInterstitialAd
は使い捨てオブジェクトです。一度インタースティシャル広告を表示した後、再度表示することはできません。GADFullScreenContentDelegate
の adDidDismissFullScreenContent:
メソッドで別のインタースティシャル広告を読み込むことをおすすめします。そうすることで、前のインタースティシャル広告が閉じられたら次のインタースティシャル広告の読み込みが開始します。
広告を表示する
インタースティシャル広告は、アプリ使用の流れが自然に一時停止するタイミングで表示しましょう。ゲームのレベルが切り替わる合間や、ユーザーがタスクを完了した後などが、その一例です。UIViewController
のアクション メソッドの 1 つでこれを行う方法を示す例を次に示します。
Swift
@IBAction func doSomething(_ sender: Any) { if interstitial != nil { interstitial.present(fromRootViewController: self) } else { print("Ad wasn't ready") } }
Objective-C
- (IBAction)doSomething:(id)sender { ... if (self.interstitial) { [self.interstitial presentFromRootViewController:self]; } else { NSLog(@"Ad wasn't ready"); } }
ベスト プラクティス
- インタースティシャル広告が自分のアプリに適しているかどうかをよく見極めましょう。
- インタースティシャル広告は、自然な移行ポイント(画面の切り替わりなど)があるアプリに適しています。 画像の共有やゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした移行ポイントになります。ユーザーも流れの中断を想定しているため、インタースティシャル広告を表示しても操作性を損ないません。アプリのワークフローのどの時点でインタースティシャル広告を表示するか、ユーザーがそれにどう反応しそうかをよく検討してください。
- インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
- インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリでインタースティシャル広告を表示する際に、一部のリソースの使用も一時停止して、広告がそれらのリソースを活用できるようにすることが重要です。たとえば、インタースティシャル広告を表示するための呼び出しを行う場合は、アプリによる音声出力を一時停止します。音声の再生は
adDidDismissFullScreenContent:
イベント ハンドラで再開できます。イベント ハンドラはユーザーが広告の操作を完了すると呼び出されます。また、負荷の大きい計算処理(ゲームループなど)も、広告の表示中は一時的に止めておくことを検討しましょう。これにより、グラフィックが遅い、反応しない、動画が途切れるといった事態を回避できます。 - 読み込みに十分な時間を確保してください。
- インタースティシャル広告を適切なタイミングで表示することも重要ですが、読み込みを待たなくても済むようにすることも重要です。表示する前に広告を事前に読み込んでおくことで、インタースティシャル広告を表示するタイミングになったときに、読み込みが完了したインタースティシャル広告を事前に準備しておくことができます。
- 過度に広告を表示しないよう注意しましょう。
- インタースティシャル広告の表示頻度を上げることは、収益を増やすうえでは魅力的に思えるかもしれませんが、ユーザー エクスペリエンスの低下やクリック率の低下にもつながります。ユーザーがアプリを楽しめなくなるほど頻繁に広告を挟むことは避けましょう。
- インタースティシャルの表示に読み込み完了コールバックを使用しないでください。
- ユーザー エクスペリエンスが低下する可能性があります。代わりに、表示が必要になる前に広告を事前に読み込みます。次に、
GADInterstitialAd
のcanPresentFromRootViewController:error:
メソッドをチェックして、表示できる準備ができているかどうかを確認します。
補足資料
GitHub の例
- インタースティシャル広告の例: Swift | Objective-C
Mobile Ads Garage の動画チュートリアル
成功事例
次のステップ
- まだ作成していない場合は、AdMob 管理画面で独自のインタースティシャル広告ユニットを作成します。
- 詳しくは、広告のターゲット設定とインタースティシャル広告のガイドラインをご覧ください。*. 詳しくは、ユーザーのプライバシーをご覧ください。