メインコンテンツへスキップ

概要

スプラッシュ広告(Splash Ad)は、アプリ起動時にスプラッシュ画面に表示される広告です。アプリのロゴと一緒に広告が表示され、自然なユーザー体験を提供します。

特徴

  • アプリ起動時の自然な広告露出
  • アプリロゴと共にブランドイメージを維持
  • 360dp × 270dpの広告領域、288dp × 288dpのロゴ領域
  • 画像広告サポート
  • Android 12+システムスプラッシュスクリーンサポート
開発環境ではテストユニットIDを使用してください:PUBLIC_TEST_UNIT_ID_SPLASH

広告とロゴのサイズ

スプラッシュ広告は決まった領域を使用します:
  • ロゴ領域:288dp × 288dp(画面中央)
  • 広告領域:360dp × 270dp(画面下部)
  • 広告は画面下部に表示され、上部にはアプリロゴが配置されます

実装方法

スプラッシュ広告は、アプリの要件に応じて2つの方法で実装できます:
  1. AdropSplashAdを使用 - システムスプラッシュスクリーンと統合(Android 12+)
  2. AdropSplashAdViewを使用 - カスタムスプラッシュ画面構成

方法1:AdropSplashAdを使用(システムスプラッシュ統合)

Android 12(API 31)以上でシステムスプラッシュスクリーンと統合する方法です。AdropSplashAdActivityがスプラッシュ画面を自動的に管理します。

ステップ1:strings.xmlの設定

app/src/main/res/values/strings.xmlファイルに以下の設定を追加します。
res/values/strings.xml
<resources>
    <!-- アプリ名 -->
    <string name="app_name">My App</string>

    <!-- スプラッシュ広告ユニットID -->
    <string name="adrop_splash_ad_unit_id" translatable="false">YOUR_SPLASH_UNIT_ID</string>

    <!-- スプラッシュ終了後に移動するActivity -->
    <string name="adrop_splash_ad_next_activity" translatable="false">com.yourcompany.yourapp.MainActivity</string>
</resources>
テスト時にはYOUR_SPLASH_UNIT_IDの代わりにPUBLIC_TEST_UNIT_ID_SPLASHを使用してください。

ステップ2:スプラッシュロゴ画像の追加

アプリロゴをres/drawable/フォルダに追加します。
app/src/main/res/drawable/splash_logo.png
推奨サイズ:288dp × 288dp(@2x:576px、@3x:864px)

ステップ3:AndroidManifest.xmlの設定

AdropSplashAdActivityをランチャーアクティビティとして設定します。
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:name=".MyApplication"
        android:theme="@style/Theme.App">

        <!-- スプラッシュ広告Activity -->
        <activity
            android:name="io.adrop.ads.splash.AdropSplashAdActivity"
            android:theme="@style/Theme.App.Splash"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- メインActivity(スプラッシュ終了後に移動) -->
        <activity
            android:name=".MainActivity"
            android:exported="false" />

    </application>
</manifest>
AdropSplashAdActivityandroid:exported="true"設定が必要です。

ステップ4:スプラッシュテーマの設定

res/values/themes.xmlファイルにスプラッシュテーマを追加します。
res/values/themes.xml
<resources>
    <!-- アプリデフォルトテーマ -->
    <style name="Theme.App" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- アプリテーマ設定 -->
    </style>

    <!-- スプラッシュテーマ(Android 12+) -->
    <style name="Theme.App.Splash" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/white</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/splash_logo</item>
        <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
</resources>
Android 12未満の端末ではシステムスプラッシュが表示されず、直接AdropSplashAdActivityが表示されます。

ステップ5:レイアウトのカスタマイズ(オプション)

デフォルトレイアウトを使用せずカスタムレイアウトを希望する場合、アプリのres/layout/フォルダにactivity_adrop_splash_ad.xmlファイルを作成します。
res/layout/activity_adrop_splash_ad.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:paddingHorizontal="24dp"
    android:fitsSystemWindows="true">

    <!-- アプリロゴ(中央) -->
    <ImageView
        android:src="@drawable/splash_logo"
        android:layout_width="288dp"
        android:layout_height="288dp"
        android:scaleType="fitXY"
        android:layout_centerInParent="true"/>

    <!-- 広告領域(下部) - 必須 -->
    <ImageView
        android:id="@+id/adrop_splash_ad_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"/>
</RelativeLayout>
android:id="@+id/adrop_splash_ad_image"を持つImageViewは必須です。このビューに広告が表示されます。

ステップ6:ApplicationでSDKを初期化

MyApplication.kt
import android.app.Application
import io.adrop.ads.Adrop

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        // SDK初期化
        Adrop.initialize(this, production = false)
    }
}

ステップ7:AdropSplashAdリスナーの実装(オプション)

スプラッシュ広告イベントを受信するには、Applicationクラスでリスナーを設定します。
import android.app.Application
import io.adrop.ads.Adrop
import io.adrop.ads.splash.AdropSplashAd
import io.adrop.ads.splash.AdropSplashAdListener
import io.adrop.ads.model.AdropErrorCode

class MyApplication : Application() {
    private lateinit var splashAd: AdropSplashAd

    override fun onCreate() {
        super.onCreate()

        // SDK初期化
        Adrop.initialize(this, production = false)

        // スプラッシュ広告設定
        splashAd = AdropSplashAd(this) { splashAd ->
            // shouldSkip:スプラッシュ広告をスキップするかどうかを決定
            // trueを返すと広告を表示せずに直接メイン画面に移動
            checkShouldSkipSplash()
        }

        splashAd.splashAdListener = object : AdropSplashAdListener {
            override fun onAdReceived(ad: AdropSplashAd) {
                println("スプラッシュ広告受信成功")
            }

            override fun onAdFailedToReceive(ad: AdropSplashAd, errorCode: AdropErrorCode) {
                println("スプラッシュ広告受信失敗:$errorCode")
            }

            override fun onAdImpression(ad: AdropSplashAd) {
                println("スプラッシュ広告インプレッション")
            }

            override fun onAdClose(ad: AdropSplashAd, impressed: Boolean) {
                println("スプラッシュ広告終了 - インプレッション:$impressed")
            }
        }
    }

    private fun checkShouldSkipSplash(): Boolean {
        // 例:ディープリンクで進入した場合や特定の条件でスプラッシュをスキップ
        // プッシュ通知でアプリが起動された場合など
        return false
    }
}

AdropSplashAdプロパティ

プロパティタイプ説明
unitIdString広告ユニットID(読み取り専用)
creativeIdString広告クリエイティブID(読み取り専用)
isClosedBooleanスプラッシュ広告終了状態(読み取り専用)

AdropSplashAdメソッド

メソッド説明
close()スプラッシュ広告を即座に終了し次の画面に移動

shouldSkipコールバック

AdropSplashAdコンストラクタのshouldSkipコールバックを使用して、特定の条件でスプラッシュ広告をスキップできます。
val splashAd = AdropSplashAd(application) { splashAd ->
    // プッシュ通知でアプリが起動された場合スプラッシュをスキップ
    val isPushNotification = intent?.extras?.containsKey("push_notification") == true

    // ディープリンクで進入した場合スプラッシュをスキップ
    val hasDeepLink = intent?.data != null

    isPushNotification || hasDeepLink
}
shouldSkiptrueを返すと、広告をロードせずに即座に次の画面に移動します。

スプラッシュ表示時間の設定(オプション)

デフォルト表示時間(2秒)を変更するには、res/values/integers.xmlファイルを作成して設定します。
res/values/integers.xml
<resources>
    <!-- 広告リクエストタイムアウト(ミリ秒、500〜3000) -->
    <integer name="adrop_splash_ad_request_timeout">1000</integer>

    <!-- 広告表示時間(ミリ秒、500〜3000) -->
    <integer name="adrop_splash_ad_max_timeout">2000</integer>
</resources>
設定可能な範囲は500ms〜3000msです。範囲外の値は自動的に補正されます。

プッシュ通知ディープリンク時のスプラッシュスキップ(オプション)

プッシュ通知を通じてアプリが起動された時にディープリンクがあればスプラッシュ広告をスキップするよう設定できます。
res/values/bools.xml
<resources>
    <!-- プッシュ通知ディープリンク時のスプラッシュスキップ -->
    <bool name="adrop_splash_ad_skip_push_notification_clicked">true</bool>
</resources>

方法2:AdropSplashAdViewを使用(カスタムスプラッシュ)

カスタムスプラッシュ画面を直接構成したい場合に使用します。独自のスプラッシュActivityを作成し、AdropSplashAdViewを配置します。

ステップ1:レイアウトの作成

activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:padding="24dp">

    <!-- アプリロゴ -->
    <ImageView
        android:id="@+id/logo"
        android:layout_width="288dp"
        android:layout_height="288dp"
        android:layout_centerInParent="true"
        android:src="@drawable/splash_logo"
        android:scaleType="fitXY"/>

    <!-- スプラッシュ広告ビュー -->
    <io.adrop.ads.splash.AdropSplashAdView
        android:id="@+id/splash_ad_view"
        android:layout_width="match_parent"
        android:layout_height="270dp"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>

ステップ2:SplashActivityの実装

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import io.adrop.ads.splash.AdropSplashAdView
import io.adrop.ads.splash.AdropSplashAdViewListener
import io.adrop.ads.model.AdropErrorCode

class SplashActivity : AppCompatActivity() {
    private lateinit var splashAdView: AdropSplashAdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        // スプラッシュ広告ビューの初期化
        splashAdView = AdropSplashAdView(
            context = this,
            unitId = "YOUR_SPLASH_UNIT_ID",
            adRequestTimeout = 1000L  // 広告リクエストタイムアウト(ミリ秒)
        )

        // リスナーの設定
        splashAdView.listener = object : AdropSplashAdViewListener {
            override fun onAdReceived(ad: AdropSplashAdView) {
                println("スプラッシュ広告受信成功")
            }

            override fun onAdFailedToReceive(ad: AdropSplashAdView, errorCode: AdropErrorCode) {
                println("スプラッシュ広告受信失敗:$errorCode")
            }

            override fun onAdImpression(ad: AdropSplashAdView) {
                println("スプラッシュ広告インプレッション")
            }

            override fun onAdClose(ad: AdropSplashAdView, impressed: Boolean) {
                println("スプラッシュ広告終了 - インプレッション:$impressed")
                goToMainActivity()
            }
        }

        // 広告のロードと表示
        findViewById<ViewGroup>(android.R.id.content).addView(splashAdView)
        splashAdView.load()
    }

    private fun goToMainActivity() {
        startActivity(Intent(this, MainActivity::class.java))
        finish()
    }
}

ステップ3:AndroidManifest.xmlの設定

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <!-- カスタムスプラッシュActivity -->
        <activity
            android:name=".SplashActivity"
            android:theme="@style/Theme.App.Splash"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- メインActivity -->
        <activity
            android:name=".MainActivity"
            android:exported="false" />
    </application>
</manifest>

AdropSplashAdViewプロパティ

プロパティタイプ説明
unitIdString広告ユニットID(読み取り専用)
creativeIdString広告クリエイティブID(読み取り専用)
isClosedBooleanスプラッシュ広告終了状態(読み取り専用)
txIdStringトランザクションID(読み取り専用)
campaignIdStringキャンペーンID(読み取り専用)

AdropSplashAdViewメソッド

メソッド説明
load()広告をロードして表示

リスナー

AdropSplashAdListener

AdropSplashAdを使用する際のリスナーです。
メソッド必須説明
onAdReceived(ad)任意広告受信成功時に呼び出し
onAdFailedToReceive(ad, errorCode)任意広告受信失敗時に呼び出し
onAdImpression(ad)任意広告インプレッションが記録された時に呼び出し
onAdClose(ad, impressed)任意スプラッシュ広告終了時に呼び出し

AdropSplashAdViewListener

AdropSplashAdViewを使用する際のリスナーです。
メソッド必須説明
onAdReceived(ad)任意広告受信成功時に呼び出し
onAdFailedToReceive(ad, errorCode)任意広告受信失敗時に呼び出し
onAdImpression(ad)任意広告インプレッションが記録された時に呼び出し
onAdClose(ad, impressed)必須スプラッシュ広告終了時に呼び出し。メイン画面遷移処理が必要
AdropSplashAdViewを使用する場合、onAdCloseメソッドを必ず実装してメイン画面への遷移処理を行う必要があります。

impressedパラメータ

onAdClose(ad, impressed)メソッドのimpressedパラメータは、広告が実際に表示されたかどうかを示します。
override fun onAdClose(ad: AdropSplashAdView, impressed: Boolean) {
    if (impressed) {
        println("広告がユーザーに表示されました")
        // 広告表示後の処理ロジック
    } else {
        println("広告が表示されませんでした(ロード失敗またはスキップ)")
        // 広告未表示時の処理ロジック
    }

    // メイン画面へ遷移
    goToMainActivity()
}

impressedがfalseの場合

  • 広告ロード失敗
  • ネットワークエラー
  • ユーザーが広告を見る前にスキップ
  • 広告インベントリ不足

ベストプラクティス

1. 適切なタイマー設定

スプラッシュ広告は短すぎず長すぎないように表示する必要があります。
<!-- 推奨設定 -->
<integer name="adrop_splash_ad_request_timeout">1000</integer>  <!-- 1秒 -->
<integer name="adrop_splash_ad_max_timeout">2000</integer>       <!-- 2秒 -->

2. ロゴ画像の最適化

アプリロゴを適切なサイズで準備し、ロード時間を最小化してください。
drawable-mdpi/splash_logo.png    (192px × 192px)
drawable-hdpi/splash_logo.png    (288px × 288px)
drawable-xhdpi/splash_logo.png   (384px × 384px)
drawable-xxhdpi/splash_logo.png  (576px × 576px)
drawable-xxxhdpi/splash_logo.png (768px × 768px)

3. 失敗処理

広告ロード失敗時もアプリが正常に起動するよう処理してください。
override fun onAdFailedToReceive(ad: AdropSplashAdView, errorCode: AdropErrorCode) {
    println("広告ロード失敗:$errorCode")
    // 失敗してもメイン画面へ遷移
    goToMainActivity()
}

4. テスト環境の区別

開発と本番環境を区別してテストしてください。
val splashUnitId = if (BuildConfig.DEBUG) {
    "PUBLIC_TEST_UNIT_ID_SPLASH"
} else {
    "YOUR_PRODUCTION_SPLASH_UNIT_ID"
}

// SDK初期化
Adrop.initialize(application, production = !BuildConfig.DEBUG)

5. メモリリーク防止

Activity終了時にリスナーをクリーンアップしてください。
override fun onDestroy() {
    splashAdView.listener = null
    super.onDestroy()
}

テスト

テストユニットID

開発中はテストユニットIDを使用してください。
// テストユニットID
val testUnitId = "PUBLIC_TEST_UNIT_ID_SPLASH"
実際のリリース時には必ずAdropコンソールで作成した実際のユニットIDを使用してください。テストユニットIDでリリースすると広告収益が発生しません。

デバッグ

広告イベントをログで確認してください。
splashAdView.listener = object : AdropSplashAdViewListener {
    override fun onAdReceived(ad: AdropSplashAdView) {
        Log.d("AdropSplash", "広告受信成功")
        Log.d("AdropSplash", "  - unitId: ${ad.unitId}")
        Log.d("AdropSplash", "  - creativeId: ${ad.creativeId}")
    }

    override fun onAdFailedToReceive(ad: AdropSplashAdView, errorCode: AdropErrorCode) {
        Log.e("AdropSplash", "広告受信失敗:$errorCode")
        Log.e("AdropSplash", "  - ネットワーク状態を確認")
        Log.e("AdropSplash", "  - ユニットIDを確認:${ad.unitId}")
    }

    override fun onAdImpression(ad: AdropSplashAdView) {
        Log.d("AdropSplash", "広告インプレッション")
        Log.d("AdropSplash", "  - txId: ${ad.txId}")
        Log.d("AdropSplash", "  - campaignId: ${ad.campaignId}")
    }

    override fun onAdClose(ad: AdropSplashAdView, impressed: Boolean) {
        Log.d("AdropSplash", "広告終了")
        Log.d("AdropSplash", "  - impressed: $impressed")
        Log.d("AdropSplash", "  - isClosed: ${ad.isClosed}")
    }
}

トラブルシューティング

  • AndroidManifest.xmlでAdropSplashAdActivityまたはカスタムSplashActivityがLAUNCHERとして設定されているか確認
  • android:exported="true"設定を確認
  • SDK初期化が完了しているか確認(Applicationクラス)
  • adrop_service.jsonファイルがassetsフォルダにあるか確認
  • ネットワーク接続状態を確認
  • ユニットIDが正しいか確認(strings.xmlまたはコード)
  • テスト環境ではproduction = false設定を確認
  • onAdFailedToReceiveエラーコードを確認
  • adrop_service.jsonファイルの内容が正しいか確認
  • adrop_splash_ad_next_activity設定が正しいか確認(完全なパッケージパス)
  • AdropSplashAdView使用時はonAdClose実装を確認
  • Activityの完全修飾名を確認(例:com.myapp.MainActivity)
  • ファイル名が正確にactivity_adrop_splash_ad.xmlであるか確認
  • android:id="@+id/adrop_splash_ad_image" IDを持つImageViewがあるか確認
  • アプリをクリーンビルド後に再実行(Build > Clean Project > Rebuild Project)
これは正常です。Android 12未満の端末ではシステムスプラッシュスクリーンがサポートされておらず、直接AdropSplashAdActivityが表示されます。

次のステップ