スプラッシュ広告は、アプリ起動時のスプラッシュ画面に表示される広告です。アプリのロゴと一緒に広告が表示され、自然なユーザー体験を提供します。
アプリ起動時の自然な広告表示
アプリロゴと一緒にブランドイメージを維持
360px × 270px固定サイズ
画像広告に対応
開発環境ではテストユニットIDを使用してください: PUBLIC_TEST_UNIT_ID_SPLASH
広告サイズ
スプラッシュ広告は固定サイズを使用します:
サイズ : 360px × 270px (幅 × 高さ)
広告は画面下部に表示され、上部にはアプリロゴが配置されます
実装方法
スプラッシュ広告は、アプリの要件に応じて3つの方法で実装できます:
AdropSplashAdViewControllerの使用 - 最も簡単な方法
AdropSplashAdViewの使用 - カスタムスプラッシュ画面の構成
SwiftUI実装 - SwiftUIアプリで使用
方法1: AdropSplashAdViewControllerの使用
最も簡単な実装方法です。AdropSplashAdViewControllerがスプラッシュ画面を自動的に管理します。
UIKit実装
import AdropAds
@main
class AppDelegate : UIResponder , UIApplicationDelegate {
var window: UIWindow ?
func application (
_ application : UIApplication,
didFinishLaunchingWithOptions launchOptions : [UIApplication.LaunchOptionsKey: Any ] ?
) -> Bool {
// Adrop SDKの初期化
Adrop. initialize ( production : false )
return true
}
}
SceneDelegateでスプラッシュ広告を表示
import UIKit
import AdropAds
class SceneDelegate : UIResponder , UIWindowSceneDelegate {
var window: UIWindow ?
func scene (
_ scene : UIScene,
willConnectTo session : UISceneSession,
options connectionOptions : UIScene.ConnectionOptions
) {
guard let windowScene = (scene as? UIWindowScene) else { return }
// Windowの設定
window = UIWindow ( windowScene : windowScene)
// スプラッシュ広告ビューコントローラーの生成
let splashViewController = AdropSplashAdViewController (
unitId : "YOUR_SPLASH_UNIT_ID"
)
splashViewController. logoImage = UIImage ( named : "app_logo" ) // アプリロゴ画像
splashViewController. delegate = self
// メインビューコントローラーの設定
splashViewController. mainViewController = MainViewController ()
// 表示時間の設定(非推奨 — コンソールで設定してください、デフォルト1秒)
splashViewController. displayDuration = 3.0
// スプラッシュ画面をルートに設定
window ? . rootViewController = splashViewController
window ? . makeKeyAndVisible ()
}
}
初期化パラメータ
パラメータ 型 説明 unitIdStringアドコントロールコンソールで作成したユニットID adRequestTimeoutTimeInterval広告リクエストタイムアウト(秒)。デフォルト1.0
プロパティ
プロパティ 型 説明 logoImageUIImage?アプリロゴ画像(initパラメータではなくプロパティとして設定)。nilの場合はロゴなしで表示 mainViewControllerUIViewController?広告終了後に遷移するメインビューコントローラー backgroundColorUIColor?スプラッシュ画面の背景色。nilの場合はsystemBackgroundを使用 displayDurationTimeInterval広告表示時間(秒)。デフォルト1.0。非推奨 — コンソールで設定してください
デリゲートの実装
// MARK: - AdropSplashAdDelegate
extension SceneDelegate : AdropSplashAdDelegate {
// スプラッシュ広告終了
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
print ( "スプラッシュ広告終了 - 表示: \( impressed ) " )
// メイン画面に遷移
let mainViewController = MainViewController ()
window ? . rootViewController = mainViewController
}
// 広告受信成功(オプション)
func onAdReceived ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告受信成功" )
}
// 広告受信失敗(オプション)
func onAdFailedToReceive ( _ ad : AdropSplashAd, _ errorCode : AdropErrorCode) {
print ( "スプラッシュ広告受信失敗: \( errorCode ) " )
// 広告失敗時もメイン画面に遷移します
}
// 広告表示(オプション)
func onAdImpression ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告表示" )
}
}
AdropSplashAdViewControllerは広告の読み込み、表示、タイマー管理を自動的に処理します。広告が読み込まれなくても自動的にonAdCloseが呼び出され、メイン画面に遷移します。
LaunchScreenとの連携
スプラッシュ広告を表示する前に、システムのLaunchScreenが先に表示されます。自然なユーザー体験のために、LaunchScreenとスプラッシュ広告画面のスタイルを一致させることをお勧めします。
LaunchScreen.storyboardの設定
LaunchScreen.storyboard を開き、背景色をスプラッシュ広告画面と同じに設定
アプリロゴを中央に配置(スプラッシュ広告のロゴ位置と一致)
Info.plistでUILaunchStoryboardNameがLaunchScreenに設定されていることを確認
< key > UILaunchStoryboardName </ key >
< string > LaunchScreen </ string >
LaunchScreenとスプラッシュ広告画面の背景色とロゴ位置が一致すると、アプリ起動時にスムーズな遷移が可能です。
方法2: AdropSplashAdViewの使用
カスタムスプラッシュ画面を直接構成したい場合に使用します。
import UIKit
import AdropAds
class CustomSplashViewController : UIViewController {
private var splashAdView: AdropSplashAdView ?
private let logoImageView = UIImageView ()
override func viewDidLoad () {
super . viewDidLoad ()
// AdropSplashAdViewは初期化時に自動的にロードを処理するため、先に生成します
splashAdView = AdropSplashAdView ( unitId : "YOUR_SPLASH_UNIT_ID" )
splashAdView ? . delegate = self
setupUI ()
}
private func setupUI () {
view. backgroundColor = . white
// アプリロゴの設定
logoImageView. image = UIImage ( named : "app_logo" )
logoImageView. contentMode = . scaleAspectFit
logoImageView. translatesAutoresizingMaskIntoConstraints = false
view. addSubview (logoImageView)
// スプラッシュ広告ビューの設定
guard let splashAdView = splashAdView else { return }
splashAdView. translatesAutoresizingMaskIntoConstraints = false
view. addSubview (splashAdView)
NSLayoutConstraint. activate ([
// ロゴ: 画面中央上部
logoImageView. centerXAnchor . constraint ( equalTo : view. centerXAnchor ),
logoImageView. topAnchor . constraint ( equalTo : view. safeAreaLayoutGuide . topAnchor , constant : 100 ),
logoImageView. widthAnchor . constraint ( equalToConstant : 200 ),
logoImageView. heightAnchor . constraint ( equalToConstant : 200 ),
// 広告: 画面下部
splashAdView. leadingAnchor . constraint ( equalTo : view. leadingAnchor ),
splashAdView. trailingAnchor . constraint ( equalTo : view. trailingAnchor ),
splashAdView. bottomAnchor . constraint ( equalTo : view. safeAreaLayoutGuide . bottomAnchor ),
splashAdView. heightAnchor . constraint ( equalToConstant : 270 ) // 固定高さ
])
}
}
// MARK: - AdropSplashAdViewDelegate
extension CustomSplashViewController : AdropSplashAdViewDelegate {
// スプラッシュ広告終了(必須)
func onAdClose ( _ adView : AdropSplashAdView, impressed : Bool ) {
print ( "スプラッシュ広告終了 - 表示: \( impressed ) " )
transitionToMainScreen ( impressed : impressed)
}
// 広告受信成功(オプション)
func onAdReceived ( _ adView : AdropSplashAdView) {
print ( "スプラッシュ広告ビュー受信成功" )
}
// 広告受信失敗(オプション)
func onAdFailedToReceive ( _ adView : AdropSplashAdView, _ errorCode : AdropErrorCode) {
print ( "スプラッシュ広告ビュー受信失敗: \( errorCode ) " )
// 失敗時はメイン画面に遷移
transitionToMainScreen ( impressed : false )
}
// 広告表示(オプション)
func onAdImpression ( _ adView : AdropSplashAdView) {
print ( "スプラッシュ広告ビュー表示" )
}
}
// MARK: - Navigation
extension CustomSplashViewController {
private func transitionToMainScreen ( impressed : Bool ) {
guard let window = view.window else { return }
let mainViewController = MainViewController ()
window. rootViewController = mainViewController
// スムーズな遷移アニメーション
UIView. transition (
with : window,
duration : 0.3 ,
options : . transitionCrossDissolve ,
animations : nil ,
completion : nil
)
}
}
AdropSplashAdViewを使用する場合は、AdropSplashAdViewDelegateを実装する必要があります。onAdClose(impressed:)メソッドは必須 です。
方法3: SwiftUI実装
SwiftUIアプリでスプラッシュ広告を実装する方法です。
SwiftUI Wrapper
import SwiftUI
import AdropAds
struct SplashAdView : UIViewControllerRepresentable {
let unitId: String
let logoImage: UIImage ?
@Binding var isPresented: Bool
func makeUIViewController ( context : Context) -> AdropSplashAdViewController {
let controller = AdropSplashAdViewController ( unitId : unitId)
controller. logoImage = logoImage
controller. delegate = context. coordinator
return controller
}
func updateUIViewController ( _ uiViewController : AdropSplashAdViewController, context : Context) {
// 更新不要
}
func makeCoordinator () -> Coordinator {
Coordinator ( isPresented : $isPresented)
}
class Coordinator : NSObject , AdropSplashAdDelegate {
@Binding var isPresented: Bool
init ( isPresented : Binding< Bool >) {
_isPresented = isPresented
}
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
print ( "スプラッシュ広告終了 - 表示: \( impressed ) " )
DispatchQueue. main . async {
self . isPresented = false
}
}
func onAdReceived ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告受信成功" )
}
func onAdFailedToReceive ( _ ad : AdropSplashAd, _ errorCode : AdropErrorCode) {
print ( "スプラッシュ広告受信失敗: \( errorCode ) " )
}
func onAdImpression ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告表示" )
}
}
}
SwiftUI Appで使用
import SwiftUI
import AdropAds
@main
struct MyApp : App {
init () {
// SDKの初期化
Adrop. initialize ( production : false )
}
var body: some Scene {
WindowGroup {
ContentView ()
}
}
}
struct ContentView : View {
@State private var showSplash = true
var body: some View {
ZStack {
if showSplash {
SplashAdView (
unitId : "YOUR_SPLASH_UNIT_ID" ,
logoImage : UIImage ( named : "app_logo" ),
isPresented : $showSplash
)
. ignoresSafeArea ()
} else {
MainView ()
}
}
}
}
struct MainView : View {
var body: some View {
NavigationView {
VStack {
Text ( "メイン画面" )
. font (. largeTitle )
}
. navigationTitle ( "ホーム" )
}
}
}
デリゲートメソッド
AdropSplashAdDelegate
AdropSplashAdを使用する場合のデリゲートです。
メソッド 必須 説明 onAdClose(impressed:)オプション スプラッシュ広告終了時に呼び出し。impressedパラメータで広告表示の有無を確認 onAdReceived(_:)オプション 広告受信成功時に呼び出し onAdFailedToReceive(_:_:)オプション 広告受信失敗時に呼び出し onAdImpression(_:)オプション 広告表示が記録された時に呼び出し
AdropSplashAdViewDelegate
AdropSplashAdViewを使用する場合のデリゲートです。
メソッド 必須 説明 onAdClose(impressed:)必須 スプラッシュ広告終了時に呼び出し。メイン画面への遷移処理が必要 onAdReceived(_:)オプション 広告受信成功時に呼び出し onAdFailedToReceive(_:_:)オプション 広告受信失敗時に呼び出し onAdImpression(_:)オプション 広告表示が記録された時に呼び出し
クロージャコールバック
デリゲートの代わりにAdropSplashAdでクロージャベースのコールバックを使用できます。
let splashAd = AdropSplashAd ( unitId : "YOUR_UNIT_ID" )
splashAd. onAdReceived = { ad in
print ( "スプラッシュ広告受信成功" )
}
splashAd. onAdFailedToReceive = { ad, errorCode in
print ( "スプラッシュ広告受信失敗: \( errorCode ) " )
}
splashAd. onAdImpression = { ad in
print ( "スプラッシュ広告表示" )
}
splashAd. onAdClose = { ad, impressed in
print ( "スプラッシュ広告終了 - 表示: \( impressed ) " )
}
デリゲートとクロージャの両方を設定すると、両方が呼び出されます。
impressedパラメータ
onAdClose(impressed:)メソッドのimpressedパラメータは、広告が実際にユーザーに表示されたかどうかを示します。
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
if impressed {
print ( "広告がユーザーに表示されました" )
// 広告表示後の処理ロジック
} else {
print ( "広告が表示されませんでした(ロード失敗またはスキップ)" )
// 広告未表示の処理ロジック
}
// メイン画面に遷移
transitionToMainScreen ()
}
impressedがfalseの場合
広告ロード失敗
ネットワークエラー
ユーザーが広告を見る前にスキップ
広告インベントリ不足
ベストプラクティス
1. 適切なタイマー設定
スプラッシュ広告は短すぎず長すぎず表示する必要があります。
// AdropSplashAdViewControllerは自動的にタイマーを管理します
// デフォルト: 1秒(広告ロード時間を含む)
2. ロゴ画像の最適化
アプリロゴは適切なサイズで準備し、ロード時間を最小化してください。
// 推奨ロゴサイズ: 200x200 〜 300x300ポイント
let logoImage = UIImage ( named : "app_logo" ) // @2x、@3xバージョンを準備
3. 失敗処理
広告ロード失敗時もアプリが正常に起動するように処理してください。
func onAdFailedToReceive ( _ ad : AdropSplashAd, _ errorCode : AdropErrorCode) {
print ( "広告ロード失敗: \( errorCode ) " )
// 失敗してもメイン画面に遷移
// AdropSplashAdViewControllerは自動的に処理
}
4. スムーズな画面遷移
メイン画面への遷移時に自然なアニメーションを使用してください。
private func transitionToMainScreen () {
guard let window = view.window else { return }
let mainViewController = MainViewController ()
UIView. transition (
with : window,
duration : 0.3 ,
options : . transitionCrossDissolve ,
animations : {
window. rootViewController = mainViewController
},
completion : nil
)
}
5. テスト環境と本番環境の分離
開発環境と本番環境を分けてテストしてください。
# if DEBUG
let splashUnitId = "PUBLIC_TEST_UNIT_ID_SPLASH"
let isProduction = false
# else
let splashUnitId = "YOUR_PRODUCTION_SPLASH_UNIT_ID"
let isProduction = true
# endif
// SDKの初期化
Adrop. initialize ( production : isProduction)
// スプラッシュ広告の作成
let splashViewController = AdropSplashAdViewController (
unitId : splashUnitId
)
splashViewController. logoImage = UIImage ( named : "app_logo" )
完全なSceneDelegateの例
import UIKit
import AdropAds
class SceneDelegate : UIResponder , UIWindowSceneDelegate {
var window: UIWindow ?
func scene (
_ scene : UIScene,
willConnectTo session : UISceneSession,
options connectionOptions : UIScene.ConnectionOptions
) {
guard let windowScene = (scene as? UIWindowScene) else { return }
// Windowの設定
window = UIWindow ( windowScene : windowScene)
# if DEBUG
let splashUnitId = "PUBLIC_TEST_UNIT_ID_SPLASH"
# else
let splashUnitId = "YOUR_PRODUCTION_SPLASH_UNIT_ID"
# endif
// スプラッシュ広告ビューコントローラーの生成
let splashViewController = AdropSplashAdViewController (
unitId : splashUnitId
)
splashViewController. logoImage = UIImage ( named : "app_logo" )
splashViewController. delegate = self
// ルートビューコントローラーの設定
window ? . rootViewController = splashViewController
window ? . makeKeyAndVisible ()
}
}
// MARK: - AdropSplashAdDelegate
extension SceneDelegate : AdropSplashAdDelegate {
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
print ( "スプラッシュ広告終了 - 表示: \( impressed ) " )
// メイン画面に遷移
let mainViewController = MainViewController ()
let navigationController = UINavigationController ( rootViewController : mainViewController)
guard let window = window else { return }
UIView. transition (
with : window,
duration : 0.3 ,
options : . transitionCrossDissolve ,
animations : {
window. rootViewController = navigationController
},
completion : nil
)
}
func onAdReceived ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告受信成功" )
}
func onAdFailedToReceive ( _ ad : AdropSplashAd, _ errorCode : AdropErrorCode) {
print ( "スプラッシュ広告受信失敗: \( errorCode ) " )
// AdropSplashAdViewControllerが自動的にonAdCloseを呼び出します
}
func onAdImpression ( _ ad : AdropSplashAd) {
print ( "スプラッシュ広告表示記録" )
}
}
テスト
テストユニットID
開発中はテストユニットIDを使用してください。
// テストユニットID
let testUnitId = "PUBLIC_TEST_UNIT_ID_SPLASH"
// またはAdropUnitIdを使用
let testUnitId = AdropUnitId. PUBLIC_TEST_UNIT_ID_SPLASH
本番リリース時は、必ずアドコントロールコンソールで作成した実際のユニットIDを使用してください。テストユニットIDでは広告収益が発生しません。
デバッグ
広告イベントをログで確認してください。
extension SceneDelegate : AdropSplashAdDelegate {
func onAdReceived ( _ ad : AdropSplashAd) {
# if DEBUG
print ( "スプラッシュ広告受信" )
# endif
}
func onAdFailedToReceive ( _ ad : AdropSplashAd, _ errorCode : AdropErrorCode) {
# if DEBUG
print ( "スプラッシュ広告失敗: \( errorCode ) " )
print ( " - ネットワーク状態を確認" )
print ( " - ユニットIDを確認: \( ad. unitId ) " )
# endif
}
func onAdImpression ( _ ad : AdropSplashAd) {
# if DEBUG
print ( "スプラッシュ広告表示" )
# endif
}
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
# if DEBUG
print ( "スプラッシュ広告終了" )
print ( " - 表示有無: \( impressed ) " )
# endif
}
}
トラブルシューティング
window.rootViewControllerが正しく設定されているか確認
SceneDelegateが有効になっているか確認(Info.plist)
SDKの初期化が完了しているか確認
ネットワーク接続状態を確認
ユニットIDが正しいか確認
テスト環境ではproduction: false設定を確認
onAdFailedToReceiveエラーコードを確認
onAdClose(impressed:) デリゲートが実装されているか確認
画面遷移コードがメインスレッドで実行されているか確認
func onAdClose ( _ ad : AdropSplashAd, impressed : Bool ) {
DispatchQueue. main . async {
// 画面遷移コード
}
}
AdropSplashAdView使用時にonAdCloseが呼び出されない
AdropSplashAdViewDelegateを実装しているか確認
splashAdView.delegate = selfが設定されているか確認
onAdClose(impressed:)メソッドは必須で実装する必要があります
次のステップ
インタースティシャル広告 画面遷移時のインタースティシャル広告の表示