インタースティシャル広告は、アプリの画面全体を覆う形で表示される広告です。ゲームのレベル移行、コンテンツページの切り替えなど、アプリの自然な遷移ポイントで表示するのに適しています。
- 全画面を覆う没入型広告
- ユーザーが明示的に閉じるまで維持
- 画像および動画広告に対応
- 高い視覚的注目度
開発環境ではテストユニットIDを使用してください: PUBLIC_TEST_UNIT_ID_INTERSTITIAL
実装手順
インタースティシャル広告は次の4ステップで実装します:
- 初期化 - AdropInterstitialAdインスタンスの生成
- デリゲートの設定 - 広告イベント受信のためのデリゲート設定
- 広告の読み込み - 広告リクエストと受信
- 広告の表示 - 画面への広告表示
UIKit実装
基本実装
import AdropAds
class ViewController: UIViewController {
private var interstitialAd: AdropInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
loadInterstitialAd()
}
// 1. 広告の初期化と読み込み
private func loadInterstitialAd() {
interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
interstitialAd?.delegate = self
interstitialAd?.load()
}
// 2. 広告の表示
private func showInterstitialAd() {
guard let interstitialAd = interstitialAd,
interstitialAd.isLoaded else { return }
interstitialAd.show(fromRootViewController: self)
}
}
isLoadedプロパティ
広告が読み込まれたかを確認するプロパティです。show()呼び出し前にこの値を確認することをお勧めします。
if interstitialAd?.isLoaded == true {
interstitialAd?.show(fromRootViewController: self)
}
デリゲートの実装
extension ViewController: AdropInterstitialAdDelegate {
// 広告受信成功 (必須)
func onAdReceived(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告受信完了")
// 広告が準備できたら表示
showInterstitialAd()
}
// 広告受信失敗 (必須)
func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
print("インタースティシャル広告受信失敗: \(errorCode)")
}
// 広告表示 (オプション)
func onAdImpression(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告表示")
}
// 広告クリック (オプション)
func onAdClicked(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告クリック")
}
// インタースティシャル広告が表示される直前 (オプション)
func onAdWillPresentFullScreen(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告表示直前")
}
// インタースティシャル広告が表示された直後 (オプション)
func onAdDidPresentFullScreen(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告表示完了")
}
// インタースティシャル広告が閉じる直前 (オプション)
func onAdWillDismissFullScreen(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告閉じる直前")
}
// インタースティシャル広告が閉じた直後 (オプション)
func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
print("インタースティシャル広告閉じた")
// 次の広告を事前読み込み
loadInterstitialAd()
}
// インタースティシャル広告表示失敗 (オプション)
func onAdFailedToShowFullScreen(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
print("インタースティシャル広告表示失敗: \(errorCode)")
}
}
SwiftUI実装
SwiftUIではUIViewControllerRepresentableを使用するか、UIWindowからrootViewControllerを取得して表示できます。
方法1: ViewModelパターン
import SwiftUI
import AdropAds
// ViewModel
class InterstitialAdViewModel: ObservableObject {
@Published var isAdReady = false
@Published var isAdShowing = false
private var interstitialAd: AdropInterstitialAd?
init() {
loadAd()
}
func loadAd() {
interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
interstitialAd?.delegate = self
interstitialAd?.load()
}
func showAd() {
guard let interstitialAd = interstitialAd,
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let rootViewController = windowScene.windows.first?.rootViewController else {
return
}
interstitialAd.show(fromRootViewController: rootViewController)
}
}
// Delegate
extension InterstitialAdViewModel: AdropInterstitialAdDelegate {
func onAdReceived(_ ad: AdropInterstitialAd) {
DispatchQueue.main.async {
self.isAdReady = true
}
}
func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
print("広告受信失敗: \(errorCode)")
}
func onAdDidPresentFullScreen(_ ad: AdropInterstitialAd) {
DispatchQueue.main.async {
self.isAdShowing = true
}
}
func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
DispatchQueue.main.async {
self.isAdShowing = false
self.isAdReady = false
}
// 次の広告を事前読み込み
loadAd()
}
}
// View
struct ContentView: View {
@StateObject private var adViewModel = InterstitialAdViewModel()
var body: some View {
VStack {
Text("インタースティシャル広告サンプル")
.font(.title)
Button("インタースティシャル広告を表示") {
adViewModel.showAd()
}
.disabled(!adViewModel.isAdReady)
.padding()
}
}
}
デリゲートメソッド
必須メソッド
onAdReceived
(AdropInterstitialAd) -> Void
広告受信成功時に呼び出されます。この時点でshow()を呼び出して広告を表示できます。
onAdFailedToReceive
(AdropInterstitialAd, AdropErrorCode) -> Void
広告受信失敗時に呼び出されます。エラーコードを通じて失敗原因を確認できます。
オプションメソッド
onAdImpression
(AdropInterstitialAd) -> Void
広告インプレッションが記録されたときに呼び出されます。
onAdClicked
(AdropInterstitialAd) -> Void
ユーザーが広告をクリックしたときに呼び出されます。
onAdWillPresentFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が表示される直前に呼び出されます。アニメーションの一時停止などの作業を実行できます。
onAdDidPresentFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が画面に表示された直後に呼び出されます。
onAdWillDismissFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が閉じる直前に呼び出されます。
onAdDidDismissFullScreen
(AdropInterstitialAd) -> Void
インタースティシャル広告が閉じた直後に呼び出されます。次の広告を事前読み込みするのに適したタイミングです。
onAdFailedToShowFullScreen
(AdropInterstitialAd, AdropErrorCode) -> Void
広告表示失敗時に呼び出されます。エラーコードを通じて失敗原因を確認できます。
ベストプラクティス
1. 広告の事前読み込み
広告を表示する前に事前に読み込んでユーザー体験を向上させてください。
class GameViewController: UIViewController {
private var interstitialAd: AdropInterstitialAd?
private var isAdReady = false
override func viewDidLoad() {
super.viewDidLoad()
// 画面進入時に事前読み込み
preloadInterstitialAd()
}
private func preloadInterstitialAd() {
interstitialAd = AdropInterstitialAd(unitId: "YOUR_UNIT_ID")
interstitialAd?.delegate = self
interstitialAd?.load()
}
func onGameLevelComplete() {
// レベル完了時にすぐに表示
if isAdReady {
interstitialAd?.show(fromRootViewController: self)
}
}
}
extension GameViewController: AdropInterstitialAdDelegate {
func onAdReceived(_ ad: AdropInterstitialAd) {
isAdReady = true
}
func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
isAdReady = false
// 次の広告を事前読み込み
preloadInterstitialAd()
}
}
2. 適切な表示タイミング
アプリの自然な遷移ポイントで広告を表示してください。
// ✅ 良い例: ゲームレベルの移行
func onLevelComplete() {
saveProgress()
showInterstitialAd()
loadNextLevel()
}
// ✅ 良い例: コンテンツ閲覧完了
func onArticleFinished() {
showInterstitialAd()
}
// ❌ 悪い例: ユーザーアクション中
func onButtonTap() {
showInterstitialAd() // ユーザー体験の阻害
performAction()
}
3. 閉じた後の再読み込み
広告が閉じた後、次の広告を事前読み込みしてください。
func onAdDidDismissFullScreen(_ ad: AdropInterstitialAd) {
// すぐに次の広告を読み込み
loadInterstitialAd()
}
4. エラー処理
広告読み込み失敗に備えた処理を実装してください。
func onAdFailedToReceive(_ ad: AdropInterstitialAd, _ errorCode: AdropErrorCode) {
switch errorCode {
case .networkError:
print("ネットワークエラー: 後で再試行")
retryAfterDelay()
case .noFill:
print("表示する広告がありません")
continueWithoutAd()
default:
print("広告読み込み失敗: \(errorCode)")
}
}
private func retryAfterDelay() {
DispatchQueue.main.asyncAfter(deadline: .now() + 30) {
self.loadInterstitialAd()
}
}
次のステップ