インタースティシャル広告は、それまでアプリのインターフェース上に全画面表示される広告です。 終了です。通常は画面が切り替わる際に アプリのフロー(アクティビティ間や次のアクティビティ間の一時停止時など) 獲得できます。アプリにインタースティシャル広告が表示される場合、ユーザーは選択肢を提示できます。 広告をタップしてリンク先に移動するか、広告を閉じて戻ります。 必要があります。 事例紹介。
このガイドでは、インタースティシャル広告を iOS アプリに組み込む方法について説明します。
前提条件
- Google Mobile Ads SDK 8.0.0 以降
- スタートガイドを完了している。
必ずテスト広告でテストする
アプリを作成、テストする際は、テスト広告ではなく、 配信します。実際の広告を使用すると、アカウントが停止される可能性があります。
テスト広告を読み込む際は、次に示す iOS インタースティシャル向けのテスト専用広告ユニット ID を使うと簡単です。
/21775744923/example/interstitial
すべてのリクエストに対してテスト広告を返すように特別に構成されており、 独自のアプリでコーディング、テスト、デバッグの際に自由に使用できます。作成するだけで アプリを公開する前に、必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、 テスト広告。
実装
インタースティシャル広告を実装する主な手順は次のとおりです。
- 広告を読み込みます。
- コールバックを登録します。
- 広告を表示し、報酬イベントを処理します。
広告を読み込む
広告の読み込みは、
次のオブジェクトの load(adUnitID:request)
メソッド:
GAMInterstitialAd
クラス。
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var interstitial: GAMInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GAMInterstitialAd.load(
withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
private var interstitialAd: GADInterstitialAd?
func loadAd() async {
do {
interstitialAd = try await GADInterstitialAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
interstitialAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
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 loadWithAdManagerAdUnitID:@"/21775744923/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
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var interstitial: GAMInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GAMInterstitialAd.load(
withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
interstitial?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
/// 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.")
}
}
SwiftUI
返された広告に fullScreenContentDelegate
プロパティを割り当てます。
interstitialAd?.fullScreenContentDelegate = self
プロトコルを実装します。
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GAMInterstitialAd *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GAMRequest *request = [GAMRequest request];
[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/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:
メソッドで別のインタースティシャル広告を読み込んでおくことです。この方法では、前のインタースティシャル広告の表示が終了したらすぐに次のインタースティシャル広告を読み込めます。
広告を表示する
インタースティシャルは、アプリの操作が一時停止する自然なタイミングで表示する必要があります。 ゲームのレベルが切り替わる合間やユーザーがタスクを完了した後などが良い例です。
Swift
guard let interstitial = interstitial else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
SwiftUI
ビューの UI イベントをリッスンして、広告を表示するタイミングを判断します。
var body: some View {
// ...
}
.onChange(of: countdownTimer.isComplete) { newValue in
showGameOverAlert = newValue
}
.alert(isPresented: $showGameOverAlert) {
Alert(
title: Text("Game Over"),
message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
dismissButton: .cancel(
Text("OK"),
action: {
viewModel.showAd()
}))
ビューモデルからインタースティシャル広告を表示します。
func showAd() {
guard let interstitialAd = interstitialAd else {
return print("Ad wasn't ready.")
}
interstitialAd.present(fromRootViewController: nil)
}
Objective-C
if (self.interstitial) {
// The UIViewController parameter is nullable.
[self.interstitial presentFromRootViewController:nil];
} else {
NSLog(@"Ad wasn't ready");
}
ベスト プラクティス
- インタースティシャル広告がアプリに適した広告タイプかどうかを検討します。
- インタースティシャル広告は、画面の切り替わりがあるアプリで最適に機能します。 画像の共有やアプリの完了といった、アプリ内のタスクの終了を ゲームレベルでは、そのようなポイントが生まれます。ユーザーが休憩を期待しているため ユーザーの操作を妨げずにインタースティシャル広告を 体験できますアプリのワークフローのどの時点で ユーザーの反応を予測します。
- インタースティシャル広告を表示する際はアクションを一時停止してください。
- インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリの画面にコードを表示する際は、
リソースの使用を中断して広告が
活用してください。たとえば、スペースを表示するための呼び出しを行うと、
アプリからの音声出力は、必ず一時停止してください。
次の場所で音声の再生を再開できます:
adDidDismissFullScreenContent:
イベント ハンドラ。ユーザーが操作を完了すると呼び出されます。 広告とともに配信されますさらに、負荷の高い計算処理を一時的に停止することも ユーザーの操作(ゲームループなど)を自動的に行うため。これにより、 グラフィックが遅い、反応しない、スムーズに再生されない 動画をご覧ください。 - 読み込み時間は十分に確保してください。
- インタースティシャル広告は一定の間隔で表示することが ユーザーに都合のよい時間を提供できるよう、 読み込みが完了するのを待ちます。広告の読み込みを事前に完了しておくと、表示の段階で待ち時間が発生しません。
- 大量の広告をユーザーに表示することは避けてください。
- アプリでインタースティシャル広告の表示頻度を増やすと、 ユーザーエクスペリエンスの低下にも つながります クリック率の低下につながりますユーザーがそれほど頻繁にアクセスしないようにします。 中断されることがなくなります。
- 読み込み完了コールバックをインタースティシャルの表示に使用しないでください。
- このイベントを使用すると、ユーザー エクスペリエンスが低下する可能性があります。広告の読み込み前に広告が
表示されます。次に、
canPresentFromRootViewController:error:
メソッドを確認します。 準備が整っているかどうかを確認(GAMInterstitialAd
) 表示されます。
GitHub の例
ご希望の言語でインタースティシャル広告のサンプル全体をご確認ください。
次のステップ
- 詳しくは、広告のターゲット設定と インタースティシャル広告に関するガイドラインをご覧ください。
- 詳しくは、ユーザーのプライバシーについての説明をご覧ください。