Apps Kit SDK logoApps Kit SDK
ドキュメント · AppsKitSDK (AKS) — Android 導入ガイド

5. SDK と AdsManager の初期化

5.1 Application クラス

AppsKitSDKApplication を継承し、5 つの抽象メンバーを実装します。

kotlin
class YourApplication : AppsKitSDKApplication() {

    // Encrypted default-config JSON to fall back on before Remote Config is fetched.
    // Provided to you from the AKS portal for your app.
    override fun setAKSDefaultConfigs(): String = "<encrypted-config-json-from-aks-portal>"

    override fun isTestMode(): Boolean = BuildConfig.DEBUG

    override fun isDevMode(): Boolean = BuildConfig.DEBUG

    override fun setPlatform(): Platform = Platform.GOOGLE // or Platform.AMAZON

    override fun onConfigsReadyToUse(remoteConfig: FirebaseRemoteConfig) {
        // Called once Firebase Remote Config has been fetched/activated.
        // Optional hook if you need to read custom remote-config keys yourself.
    }
}

基底クラスの onCreate() には、主要な処理がすでに実装されています。AppsKitSDK.initialize/setPlatform/setTestMode/setDevMode の呼び出し、デフォルト設定の取得と保存、manageRemoteConfigs() の開始に加え、AppsKitSDK.initMMP() を呼び出して AppsFlyer/Adjust/Solar Engine との連携を設定します。これらを自分で呼び出す必要はありません。

5.2 AppsKitSDKApplication を継承せずに初期化する

AppsKitSDKApplication の継承は必須ではありません。これは実装を簡略化するためのラッパーです。アプリですでに独自の Application 基底クラスを使用していて変更できない場合は、内部で呼び出されるものと同じ AppsKitSDK のメソッドを、独自の Application.onCreate() から直接呼び出せます。

kotlin
class YourApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        FirebaseApp.initializeApp(this)

        AppsKitSDK.initialize(PlatformContext(this), this)
        AppsKitSDK.setPlatform(Platform.GOOGLE) // or Platform.AMAZON
        AppsKitSDK.setTestMode(BuildConfig.DEBUG)
        AppsKitSDK.setDevMode(BuildConfig.DEBUG)
        AppsKitSDK.setTimeToFetchRemoteConfigInSeconds(3600) // optional, defaults to 3600

        AppsKitSDK.saveDefaultConfigJson("<encrypted-config-json-from-aks-portal>")
        AppsKitSDK.manageRemoteConfigs(object : OnRemoteConfigAvailable {
            override fun onRemoteConfigReadyToFetch(remoteConfig: FirebaseRemoteConfig) {
                // optional — your own hook into the fetched remote config
            }
        })

        AppsKitSDK.initMMP() // wires up AppsFlyer / Adjust / Solar Engine from remote-config keys

        // AppsKitSDKApplication does this for you via ActivityLifecycleCallbacks. Without it,
        // AppsKitSDK has no "current activity" — native-ad preloading and any code that calls
        // AppsKitSDK.getCurrentActivity() won't have a target to work with.
        registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
            override fun onActivityResumed(activity: Activity) {
                AppsKitSDK.setCurrentActivity(PlatformActivity(activity))
                Adjust.onResume() // keeps Adjust session tracking accurate
            }
            override fun onActivityPaused(activity: Activity) {
                Adjust.onPause()
            }
            override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}

基底クラスを継承しない場合、インターネット接続に関するブロードキャストやダイアログの処理と、組み込みの「アプリケーションレベルでのアプリ起動時広告」フロー(onStart から自動的に実行される requestSplashAppOpenAd/showAppOpenAd)は利用できません。これらは AppsKitSDKApplication 自体のインスタンスメソッドであり、AppsKitSDK オブジェクトでは公開されていないためです。コールドスタート時にアプリ起動時広告を表示したい場合は、独自の起動フロー内の適切なタイミングで AdsManager.loadAppOpen/AdsManager.showAppOpen を呼び出してください(§6 を参照)。

5.3 Activity

AppsKitSDKBaseActivity(AppCompatActivity ベースの画面の場合)または AppsKitSDKBaseComponentActivity(通常の ComponentActivity または Compose のみで構成する画面の場合)を継承します。

kotlin
class HomeActivity : AppsKitSDKBaseActivity() {

    override fun setScreenNameAndId(): Pair<Int, String> = Pair(1, "Home")

    override fun enableAppAutoUpdate(): Boolean = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState) // required — this drives ad-network init, preloading,
                                            // session/day tracking, and the auto SCREEN event
        setContent { /* your Compose UI */ }
    }
}

これらの基底クラスを継承すると、最初の画面での広告ネットワークの初期化とプリロード、onResume/onPause での IronSource へのライフサイクル通知の転送、セッション数と日数のトラッキング、インターネット接続ダイアログ、任意で有効化できるアプリ内アップデートの案内、この画面に関連付けられたイベントを送信するための sendAKSEvent(...) が自動的に利用できるようになります(§7 を参照)。なお、Adjust への onResume/onPause の転送はここではなく、Application レベルで行われます(§5.2 を参照)。

インターネット接続ダイアログ

どちらの基底 Activity も onResume() で接続状態を監視します。デフォルトでは、接続が切れるたびに操作をブロックする「インターネット接続なし」ダイアログを表示し、再接続すると自動的に閉じます。この機能は、無効にしない限りすべての画面で有効です。

kotlin
class HomeActivity : AppsKitSDKBaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        showInternetConnectivity(false) // opt this screen out of the automatic dialog
    }

    // Called on every connectivity change, dialog or not — hook your own UI here
    override fun onInternetConnectivityChange(isInternetAvailable: Boolean?) {
        // e.g. show/hide your own offline banner
    }

    // Optional — return an anchor view to get a "back online" Snackbar when the
    // dialog dismisses on reconnect. Returns null (no Snackbar) by default.
    override fun getSnackBarView(): View? = findViewById(R.id.rootLayout)
}

showInternetConnectivity(false) を呼び出した場合も、AKS は onInternetConnectivityChange を呼び出します。ただし、実際の接続状態にかかわらず、常に true を渡します。接続管理を無効にすると、実際の接続状態は追跡されなくなります。正確な状態が必要な場合は、独自の接続チェックに基づいてオフライン時の UI を制御してください。

縦画面への固定

画面を縦向きに固定するには、restrictPortraitOnly() を呼び出します(protected メソッドで、どちらの基底 Activity でも利用できます)。

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    restrictPortraitOnly()
}

このメソッドは setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT) を呼び出します。ただし、Android 8.0(API 26)では意図的にスキップされます。この OS バージョンでは、半透明またはフローティングのテーマを適用した Activity で setRequestedOrientation を呼び出すと、クラッシュすることが知られているためです。

5.4 同意の取得と広告の初期化

同意を取得したら(例:Google の UMP/CMP フローを使用)、広告を表示できることを AKS に通知します。

kotlin
AdsManager.initializeAds(userHasGivenConsent = true, isCCPAConsent = true)

5.5 広告削除 / アプリ内課金(IAP)による広告制御

アプリで「広告削除」を販売する場合は、広告の呼び出しを自分で制御するのではなく、AKS と連携させてください。広告の読み込み・表示の各呼び出しでは、すでに内部でこのフラグを確認しています。

kotlin
AppsKitSDK.setRemoveAdsStatus(true)   // call after a successful purchase/restore
AppsKitSDK.getRemoveAdsStatus()       // check current status