インタースティシャル広告は、ユーザーが閉じるまでアプリのインターフェース上に全画面表示される広告です。通常は、次のアクティビティに移行する前やゲームレベルをクリアした後の合間など、アプリの操作中に画面が切り替わるタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先 URL に移動するか、広告を閉じてアプリに戻るかを選択することになります。
このガイドでは、iOS アプリにインタースティシャル広告を組み込む方法について説明します。
前提条件
- Google Mobile Ads SDK 8.0.0 以降
- スタートガイドの手順を完了していること
常にテスト広告でテストする
アプリの開発とテストでは必ずテスト広告を使用し、配信中の実際の広告は使用しないでください。実際の広告でテストすると、アカウントが停止される場合があります。
テスト広告を読み込む際は、次に示す iOS インタースティシャル向けのテスト専用広告ユニット ID を使うと簡単です。
/6499/example/interstitial
この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、アプリを公開する前に、必ずテスト用 ID をご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。
実装
インタースティシャル広告を組み込む主な手順は、以下のとおりです。
- 広告を読み込む
- コールバックを登録する
- 広告を表示してリワード イベントを処理する
広告を読み込む
広告の読み込みは、GAMInterstitialAd
クラスで静的 loadWithAdUnitID:request:completionHandler:
メソッドを使用して行います。読み込みメソッドには、広告ユニット ID と GAMRequest
オブジェクトのほか、広告の読み込みの成功時または失敗時に呼び出される完了ハンドラが必要です。読み込まれた GAMInterstitialAd
オブジェクトは、完了ハンドラのパラメータとして提供されます。次の例は、ViewController
クラスで GAMInterstitialAd
を読み込む方法を示しています。
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var interstitial: GAMInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GAMRequest() GAMInterstitialAd.load(withAdUnitID:"/6499/example/interstitial", 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) GAMInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GAMRequest *request = [GAMRequest request]; [GAMInterstitialAd loadWithAdUnitID:@"/6499/example/interstitial" request:request completionHandler:^(GAMInterstitialAd *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: GAMInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GAMRequest() GAMInterstitialAd.load(withAdUnitID:"/6499/example/interstitial", 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) GAMInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GAMRequest *request = [GAMRequest request]; [GAMInterstitialAd loadWithAdUnitID:@"/6499/example/interstitial" request:request completionHandler:^(GAMInterstitialAd *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."); }
GAMInterstitialAd
は使い捨てオブジェクトです。つまり、インタースティシャル広告を一度表示すると、再度表示することはできません。おすすめの方法は、GADFullScreenContentDelegate
の adDidDismissFullScreenContent:
メソッドで別のインタースティシャル広告を読み込んでおくことです。この方法では、前のインタースティシャル広告の表示が終了したらすぐに次のインタースティシャル広告を読み込めます。
広告を表示する
インタースティシャルは、アプリの操作が一時中断するタイミングで表示される必要があります。ゲームレベルをクリアした後の合間やタスクが完了した直後などが適しています。次のコードは、UIViewController
のアクション メソッドの中でこの手順を行う方法を示しています。
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"); } }
広告が一切表示されず「Request Error: No ads to show」というエラーが表示された場合は、広告申込情報でクリエイティブのターゲットを適切なサイズに設定していることを確認してください。インタースティシャルのサイズは、スマートフォンでは 320×480 と 480×320、タブレットでは 1024×768 と 768×1024 です。デバイスに 1024×768 または 768×1024 のサイズが収まりきらない場合は、320×480 または 480×320 のサイズが使用されます。
おすすめの方法
- インタースティシャル広告が自分のアプリに適しているかどうかをよく見極めましょう。
- インタースティシャル広告は、画面の切り替わりがあるアプリに適しています。画像の共有やゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした切り替わりポイントになります。ユーザーも流れの中断を想定しているため、インタースティシャル広告を表示してもユーザー エクスペリエンスを損ないません。アプリ操作のどのタイミングでインタースティシャル広告を表示し、ユーザーからどのような反応が得られる可能性があるかをご検討ください。
- インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
- インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリにインタースティシャル広告を表示する際は、一部のリソースの使用を停止して、広告でそのリソースを利用できるようにすることも重要です。たとえば、インタースティシャル広告を表示するための呼び出しを行う場合は、アプリで行っている音声出力を一時停止してください。音声出力は
adDidDismissFullScreenContent:
イベント ハンドラで再開できます。このハンドラはユーザーが広告の操作を終了すると呼び出されます。また、広告の表示中は、計算の集中処理(ゲームループなど)を一時的に停止することをご検討ください。こうすることで、グラフィックの読み込みが遅れたり、反応が停止したり、動画が途切れたりしなくなります。 - 十分な読み込み時間を確保しましょう。
- インタースティシャル広告の読み込みに時間がかからないようにすることは、適切なタイミングで表示することと同じくらい重要です。広告の読み込みを事前に完了しておくと、表示の段階で待ち時間が発生しません。
- 過度に広告を表示しないよう注意しましょう。
- インタースティシャル広告の表示頻度を引き上げれば収益を効果的に増やせるように思えますが、ユーザー エクスペリエンスが損なわれてクリック率が低下する可能性もあります。ユーザーがアプリを楽しめなくなるため、過度に頻繁に広告を表示するのは避けてください。
- 読み込み完了コールバックを使用してインタースティシャルを表示しないようにしましょう。
- このイベントを使用すると、ユーザー エクスペリエンスが低下する可能性があります。代わりに、広告を表示する前にプリロードして、その広告が表示可能な状態かどうかを
GAMInterstitialAd
のcanPresentFromRootViewController:error:
メソッドで確認してください。
GitHub の例
- インタースティシャル広告の例: Swift | Objective-C
次のステップ
- 詳しくは、広告のターゲット設定とインタースティシャル広告に関するガイドラインをご覧ください。