Apps Kit SDK logoApps Kit SDK
ドキュメント · AppsKitSDK (AKS) — Android 組み込みガイド

6. 広告フォーマットの呼び出し

すべての広告呼び出しには、プレースホルダーを指定します。これは、AKS ポータルで広告フォーマットに紐付けて設定する文字列キーです(例:"1")。AKS は実行時に、プレースホルダーから優先する広告ネットワークとフェイルオーバー先のリストを特定します。コード内で広告ユニット ID を直接参照する必要はありません。

インタースティシャル広告

kotlin
// Load only
AdsManager.loadInterstitial(context, placeholder, object : AdsCallback() {
    override fun onLoaded() { }
    override fun onFailedToLoad() { }
    override fun onAdShown() { }
    override fun onAdDismissed() { }
    override fun onAdFailedToShow() { }
})

// Show a previously loaded interstitial
AdsManager.showInterstitial(activity, placeholder, callback)

// Load and show in one call
AdsManager.loadAndShowInterstitialAd(activity, placeholder, callback)

// Check availability before showing
AdsManager.isInterstitialAvailable(placeholder)

リワード広告

kotlin
AdsManager.loadRewarded(context, placeholder, object : RewardedAdCallbacks() {
    override fun onRewardedLoaded() { }
    override fun onRewardedAdLoadFailure() { }
    override fun onRewardedCompleted() { }
    override fun onAdRewarded() { }
    override fun onAdRewardedAdDismissed() { }
    override fun onRewardedFailedToShow() { }
})

AdsManager.showRewarded(activity, placeholder, callbacks)

// Load and show in one call — simpler success/fail callback
AdsManager.loadAndShowRewardedAd(activity, placeholder, object : RewardedLoadAndShowCallback {
    override fun onRewardedAdSuccess() { }
    override fun onRewardedAdFailed() { }
})

AdsManager.isRewardedAvailable(placeholder)

アプリ起動時広告

kotlin
AdsManager.loadAppOpen(application, placeholder, object : AppOpenAdCallbacks() {
    override fun onLoaded() { }
    override fun onFailedToLoad() { }
    override fun onDismiss() { }
    override fun onAdShown() { }
    override fun onAdFailToShow() { }
})

AdsManager.showAppOpen(activity, placeholder, callbacks)

アプリ起動時広告を自分で管理する代わりに、AKS 標準のスプラッシュ/アプリ起動時広告の処理(リモート設定フラグ isAppOpenAtApplicationLvl で制御)を利用する場合は、AppsKitSDKApplication サブクラスで loadDefaultAppOpen / showDefaultAppOpen を使用してください。または、基底の Application クラスに一連の処理が実装されている requestSplashAppOpenAd(callbacks, addInDefaultDelay) を呼び出すだけでも利用できます。

バナー広告

kotlin
AdsManager.loadBanner(context, placeholder, object : BannerCallback() {
    override fun onBannerLoaded() { }
    override fun onBannerFailedToLoad() { }
    override fun onBannerClicked() { }
    override fun onBannerShown() { }
    override fun onBannerSizeChanged(bannerSizes: BannerSizes) { }
    override fun setBannerSize(width: Double, height: Double) { }
})

// layout is a FrameLayout (BannerContainer) you've placed in your screen
AdsManager.showBanner(activity, layout, placeholder, callback)

BannerSizes:BANNER (320×50)、LARGE_BANNER (320×100)、MEDIUM_RECTANGLE (300×250)、FULL_BANNER (468×60)。

ネイティブ広告

kotlin
AdsManager.loadNative(activity, placeholder, isShowInScrollView = false, object : NativeCallback() {
    override fun onNativeLoaded() { }
    override fun onNativeFailedToLoad() { }
    override fun onNativeClicked() { }
    override fun onNativeShown() { }
})

// frameLayout is the BannerContainer that will host the native ad view; res is an
// optional custom native-ad layout resource (pass null to use AKS's default layout)
AdsManager.showNative(activity, frameLayout, placeholder, isShowInScrollView = false, res = null, callback)

// Show the native ad using the design you created for this placeholder in the
// AKS portal, instead of a layout resource — see below.
AdsManager.showTemplatedNative(activity, frameLayout, placeholder, isShowInScrollView = false, callback)

showTemplatedNative は、アプリのコードではなくAKS ポータル上でネイティブ広告のデザインを作成し、割り当てたプレースホルダー向けのメソッドです。アプリ側からレイアウトを指定しないため、res パラメーターはありません。AKS は、このプレースホルダーに適用されるポータルのテンプレートを特定して取得し(初回取得後はキャッシュ)、showNative と同じ読み込み/表示パイプラインを通じて、そのテンプレートでネイティブ広告を描画します。プレースホルダーにテンプレートが割り当てられていない場合や、取得できない場合も、広告表示を失敗させるのではなく、AKS 組み込みのデフォルトのネイティブ広告デザインにフォールバックします。そのため、ポータル側でテンプレートを設定する前でも安全に呼び出せます。

Feature Promotion

Feature Promotion は、まだ解放していないアプリ内機能をユーザーに紹介する、AKS 独自の自社広告フォーマットです。配信に使用されるのは AKS ネットワークのみで、AdMob/MAX などは使用されません。紹介する項目は、AKS ポータルのサーバー側設定でプレースホルダーごとに指定します。

kotlin
// Optional — exclude features the user already has unlocked from being promoted
AdsManager.setFeaturesAvailable(listOf("premium_theme", "no_ads"))

AdsManager.showFeaturePromotion(activity, placeholder, object : OnFeaturePromotionClicked {
    override fun onFeaturePromotionClicked(targetScreen: String) {
        // user tapped the promotion — navigate them to targetScreen
    }

    override fun onFailToShowFeaturePromotion(errorMessage: String) { }
})

ペイウォール

ペイウォールは、Feature Promotion と同様に AKS 自身がホストするもう一つのフォーマットです。ペイウォールのデザイン、文言、料金表示のレイアウト、プランはすべて、AKS ポータルの PAYWALLS 広告フォーマットに対してサーバー側で設定します。AKS が画面を描画し、購入フロー全体(料金表示、プラン選択、Google Play / Amazon での実際の購入、アプリへの結果通知)を処理します。課金 API を直接呼び出す必要も、表示用に独自の画面へ遷移する必要もありません。AKS は、渡された activity 上にオーバーレイとして表示します。

kotlin
// Preload — call ahead of time (e.g. in onCreate) so the paywall is ready to show instantly
// later. Resolves against "{placeholder}_LOAD" in the AKS portal config, NOT the bare
// placeholder — see the note below.
PaywallManager.loadPaywall(placeholder, object : PaywallCallback() {
    override fun onLoaded(paywallId: String) { }
    override fun onFailedToLoad(reason: String) { }
    override fun onReadyToShow(paywallId: String) { }   // not used on this path
    override fun onFailedToShow(reason: String) { }     // not used on this path
}, languageCode)

// Show — presents the paywall on `activity`. If it wasn't already loaded, this loads it
// first and shows it as soon as it's ready, same combined load-then-show convenience as
// loadAndShowInterstitialAd. Resolves against the BARE placeholder (no "_LOAD" suffix).
PaywallManager.showPaywall(PlatformActivity(activity), placeholder, object : PaywallCallback() {
    override fun onLoaded(paywallId: String) { }
    override fun onFailedToLoad(reason: String) { }
    override fun onReadyToShow(paywallId: String) { }     // paywall is now on screen
    override fun onFailedToShow(reason: String) { }       // not eligible, or failed to load

    override fun onPurchaseCompleted(result: PaywallPurchaseResult) {
        // result.sku, result.product (matched from the paywall's own catalog, nullable),
        // result.purchaseToken, result.purchaseTimeUtc — grant whatever entitlement this sku
        // unlocks, e.g.:
        AppsKitSDK.setRemoveAdsStatus(true)
    }
    override fun onPurchaseFailed(message: String) { }
    override fun onDismissed() { }
    override fun onRestoreCompleted(results: List<PaywallPurchaseResult>) {
        // fired if the user tapped the presented paywall's own "Restore" action
    }
}, languageCode)

loadPaywall と showPaywall は、同じ placeholder 文字列に対して、ポータル上の異なるプレースメント設定を参照します。loadPaywall は "{placeholder}_LOAD" を検索します。これは、インタースティシャル広告が内部で使用する、プリロード用の _LOAD サフィックス規則と同じです。一方、showPaywall(およびその表示条件チェック)は、サフィックスなしの placeholder を参照します。プリロードは任意です。プリロードされていなければ、showPaywall が必要に応じて読み込みます。ただし、プリロードする場合は、AKS ポータルで両方のエントリを設定してください。それぞれに異なるペイウォールのデザインを指定できるためです。

PaywallCallback で abstract なのは onLoaded/onFailedToLoad/onReadyToShow/onFailedToShow のみです。onPurchaseCompleted/onPurchaseFailed/onDismissed/onRestoreCompleted は、デフォルトでは何も処理しない open メソッドなので、読み込みのみを行う呼び出しではオーバーライドする必要はありません。

languageCode は任意です。指定するとバックエンドに渡され、ペイウォールのデザインや文言のローカライズに使用されます。

購入の復元

アプリ独自の「購入を復元」行/ボタンから呼び出せる、独立したエントリーポイントです。ペイウォールが現在表示されているかどうかに関係なく使用できます。

kotlin
PaywallManager.restorePurchases(
    PlatformContext(context),
    PlatformActivity(activity),
    null, // storeType — null resolves to whatever AppsKitSDKApplication.setPlatform() declared
    object : PaywallResultCallback {
        override fun onPurchaseCompleted(result: PaywallPurchaseResult) { }   // not invoked on this path
        override fun onPurchaseFailed(message: String) { }                    // not invoked on this path
        override fun onRestoreCompleted(results: List<PaywallPurchaseResult>) {
            // empty list = nothing to restore; otherwise sync your entitlement from each sku
        }
    }
)

restorePurchases が呼び出すのは onRestoreCompleted のみです。PaywallResultCallback にほかの 2 つのメンバーがあるのは、同じインターフェースが、表示中のペイウォール画面からの購入結果通知にも内部で使用されているためです(実際に通知を受け取る箇所については、上記の showPaywall の onPurchaseCompleted/onPurchaseFailed を参照してください)。

結果に基づく利用権限の更新

onPurchaseCompleted も onRestoreCompleted も、それ自体ではアプリの状態を変更しません。AKS は処理結果を通知し、その結果によって何を解放するかはアプリ側で決定します。

kotlin
private fun syncEntitlementFrom(results: List<PaywallPurchaseResult>) {
    val hasRemoveAds = results.any { it.sku in YOUR_REMOVE_ADS_SKUS }
    AppsKitSDK.setRemoveAdsStatus(hasRemoveAds)
    // drive your own subscription/Pro flag the same way, from YOUR_SUBSCRIPTION_SKUS
}

復元では、AKS の結果を正しい状態を判断する基準として扱ってください。results に含まれない SKU は、ユーザーが現在保有していないことを意味します。そのため、含まれる SKU の利用権限を付与するだけでなく、含まれない SKU に対応する利用権限も解除してください。そうしないと、サブスクリプションが失効したユーザーが復元を行った際に、利用権限が無期限に残ってしまいます。一方、単一の購入の完了は、その購入に対応する利用権限を付与すべきことを示します。その権限を付与し、ほかの利用権限の状態は変更しないでください。