6. Reklam formatlarını çağırma
Her reklam çağrısı bir yer tutucu (placeholder) alır. Bu, AKS portalında bir reklam formatıyla eşleştirilen bir metin anahtarıdır (ör. "1"). AKS, çalışma zamanında yer tutucuyu birincil reklam ağı ve hata durumunda devreye girecek yedek ağ listesiyle eşleştirir; kodda hiçbir zaman doğrudan reklam birimi kimliği kullanmazsınız.
Geçiş reklamı (Interstitial)
// 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)Ödüllü reklam (Rewarded)
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)Uygulama açılış reklamı (App Open)
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)App Open reklamlarını kendiniz yönetmek yerine AKS'nin kendi başlangıç ekranı/uygulama açılış yönetimini (
isAppOpenAtApplicationLvluzaktan yapılandırma bayrağıyla kontrol edilir) kullanmak istiyorsanız,AppsKitSDKApplicationalt sınıfınızdaloadDefaultAppOpen/showDefaultAppOpenmetotlarını kullanın. Alternatif olarak, temelApplicationsınıfının zaten uçtan uca uyguladığırequestSplashAppOpenAd(callbacks, addInDefaultDelay)metodunu çağırmanız yeterlidir.
Banner reklam
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).
Yerel reklam (Native)
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, yerel reklamın görünümünün uygulama kodunda değil, AKS portalında tasarlanıp atandığı yer tutucular için kullanılır. Düzeni sizin sağlamanız gerekmediğinden res parametresi yoktur. AKS, bu yer tutucuya hangi portal şablonunun uygulanacağını belirler, şablonu getirir (ilk getirme işleminden sonra önbelleğe alınır) ve yerel reklamı bu şablonla, showNative ile aynı yükleme/gösterim akışını kullanarak oluşturur. Yer tutucuya bir şablon atanmamışsa veya şablon getirilemiyorsa AKS, reklamı başarısız saymak yerine kendi yerleşik varsayılan yerel reklam tasarımını kullanır. Bu nedenle, portal tarafında henüz bir şablon ayarlanmamış olsa bile bu metodu güvenle çağırabilirsiniz.
Özellik tanıtımı (Feature Promotion)
Feature Promotion, uygulamanızdaki bir özelliği henüz o özelliğin kilidini açmamış kullanıcılara tanıtmak için AKS'nin sunduğu uygulama içi tanıtım reklamı formatıdır. Yalnızca AKS ağı üzerinden çalışır (AdMob/MAX/vb. üzerinden değil) ve tanıtılacak öğeler AKS portalında sunucu tarafında, ilgili yer tutucuya özel olarak yapılandırılır.
// 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) { }
})Ödeme duvarı (Paywall)
Paywall, AKS'nin kendi altyapısında sunduğu diğer formattır (Feature Promotion gibi). Ödeme duvarının tasarımı, metinleri, fiyatlandırma düzeni ve planları AKS portalında, PAYWALLS reklam formatı altında sunucu tarafında yapılandırılır. AKS, ekranı oluşturur ve tüm satın alma akışını kendisi yönetir (fiyatlandırma, plan seçimi, Google Play / Amazon üzerinden satın alma işlemi ve sonucun size bildirilmesi). Hiçbir zaman doğrudan bir faturalandırma API'si çağırmaz veya ödeme duvarını göstermek için kendi ekranınıza geçiş yapmazsınız; AKS, bunu ilettiğiniz activity üzerinde bir katman olarak sunar.
// 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)
loadPaywallveshowPaywall, aynıplaceholdermetni için portalda farklı yerleşim kayıtlarını kullanır:loadPaywall,"{placeholder}_LOAD"kaydını arar; bu, geçiş reklamı formatının dahili olarak kullandığı_LOADson ekli ön yükleme kuralıyla aynıdır.showPaywall(ve kendi gösterime uygunluk kontrolü) ise son eksizplaceholderkaydını kullanır. Ön yükleme isteğe bağlıdır; önceden yüklenmiş bir şey yoksashowPaywallgerektiğinde yükleme yapar. Ancak ön yükleme yapıyorsanız AKS portalında her iki kaydı da yapılandırın; bu kayıtlar farklı ödeme duvarı tasarımlarına işaret edebilir.
PaywallCallbacküzerinde yalnızcaonLoaded/onFailedToLoad/onReadyToShow/onFailedToShowmetotlarıabstractolarak tanımlıdır.onPurchaseCompleted/onPurchaseFailed/onDismissed/onRestoreCompletedmetotları ise varsayılan olarak hiçbir işlem yapmayanopenmetotlardır; dolayısıyla yalnızca yükleme yapan bir çağrıda bunları geçersiz kılmanız gerekmez.
languageCode isteğe bağlıdır. Sağlandığında, ödeme duvarının tasarımını/metinlerini yerelleştirebilmesi için backend'e iletilir.
Satın alma işlemlerini geri yükleme
O anda bir ödeme duvarının gösterilip gösterilmediğinden bağımsız olarak, kendi "Satın Alma İşlemlerini Geri Yükle" satırınız/düğmeniz için kullanabileceğiniz bağımsız bir giriş noktası:
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 yalnızca onRestoreCompleted metodunu çağırır. PaywallResultCallback arayüzünün diğer iki üyesi, aynı arayüzün açık bir ödeme duvarı ekranının satın alma sonuçlarını dahili olarak bildirmek için de kullanılması nedeniyle mevcuttur (bu sonuçların gerçekte iletildiği yer için yukarıdaki showPaywall çağrısının onPurchaseCompleted/onPurchaseFailed metotlarına bakın).
Sonuca göre erişim haklarını yönetme
Ne onPurchaseCompleted ne de onRestoreCompleted tek başına uygulamanızda bir değişiklik yapar. AKS, gerçekleşen işlemi bildirir; bunun hangi özelliklerin kilidini açacağına siz karar verirsiniz:
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
}Bir geri yükleme işleminde AKS'yi kesin doğruluk kaynağı olarak kabul edin: results içinde bulunmayan bir SKU, kullanıcının o ürüne şu anda sahip olmadığı anlamına gelir. Bu nedenle yalnızca listede bulunan ürünlerin erişim haklarını vermekle kalmayın, listede olmayanlara karşılık gelen hakları da kaldırın. Aksi takdirde, aboneliği sona ermiş bir kullanıcı geri yükleme yaptığında erişim hakkını süresiz olarak korur. Buna karşılık, tamamlanmış tek bir satın alma işlemi, kendi başına her zaman ilgili hakkın kazanıldığını gösterir. Bu hakkı verin ve diğer erişim haklarının durumunu değiştirmeyin.