Capacitor SDK'da ilk başlatmada AA hedefli bir paywall gösterme
Apple Ads (AA) attribution, adapty.activate() çağrısından sonra asenkron olarak gelir. İlk açılışta genellikle henüz gelmemiş olduğundan getPaywall, varsayılan kitleye göre çözümlenir ve Apple Ads kullanıcıları AA segmentine özel paywallı kaçırır. Paywallı attribution gelene kadar bekletmek yerine hemen gösterin, ardından AA attribution uygulandığında yenileyin; böylece Apple Ads kullanıcıları hedeflenmiş varyantı alır, diğer kullanıcılar ise hiç beklemeden paywallı görür. AdaptyProfile.appliedAttributionSources, AA attribution’ın ne zaman uygulandığını size söyler.
Başlamadan önce
İhtiyacınız olanlar:
- Adapty Capacitor SDK 3.17.1 veya üstü.
- Uygulamanız için Adapty’de Apple Ads yapılandırılmış olmalı. Bkz. Apple Ads.
Nasıl çalışır
adapty.activate() çağrısının ardından SDK, arka planda Apple’dan Apple Ads attribution verisi ister ve sonucu Adapty’nin backend’ine iletir. AA, profil için aktif attribution kaynağı haline geldiğinde SDK, onLatestProfileLoad dinleyicinize güncellenmiş bir AdaptyProfile iletir; bu profildeki appliedAttributionSources dizisinde 'apple_search_ads' yer alır.
Bu sayede paywall’ı iki adımda yükleyebilirsiniz:
getPaywallfonksiyonunu hemen çağırın. Henüz attribution uygulanmadığından Adapty, isteği varsayılan kitleye göre çözümler ve kullanıcı bir paywall görür.'apple_search_ads'göründüğündegetPaywallfonksiyonunu tekrar çağırın. Adapty artık isteği Apple Ads kitlesine göre çözümler ve ilk paywall’un yerini alan hedeflenmiş paywall’u döndürür.
appliedAttributionSources boş olabilir veya hiç bulunmayabilir. Bu şu anlama gelir:
- Bu profil için Apple Ads attribution’ı henüz işlenmemiştir, veya
- Hiç attribution gelmemiştir.
Her iki durumda da 1. adım güvenlidir — Adapty, isteği mevcut profil durumuna uyan kitleye göre çözümler; bu genellikle varsayılan kitledir. 2. adım yalnızca
'apple_search_ads'göründüğünde çalışır.
Sonraki her başlatmada, önbelleğe alınmış profil zaten appliedAttributionSources içinde 'apple_search_ads' bilgisini taşır; dolayısıyla ilk getPaywall çağrısı doğrudan Apple Ads segmentine göre belirlenmiş paywall’ı döndürür — ikinci bir istek veya görünür bir değişiklik olmaz. İki adımlı flow yalnızca attribution henüz tamamlanmamışken, yani ilk başlatmada önem taşır.
Uygulama
Hemen bir paywall göster, ardından 'apple_search_ads' olayını dinle ve geldiğinde paywall’ı yenile.
- SDK’yı etkinleştirin. Bkz. Capacitor SDK’yı yükleyin ve yapılandırın.
- Bir paywall yükleyip sunun —
getPaywallile her zamanki gibi yapın, attribution için beklemeyin. - Profil güncellemelerini dinleyin —
adapty.addListener('onLatestProfileLoad', …)ile'apple_search_ads'değerini izleyin. Bu değer geldiğinde, paywallı tekrar çekip güncellenmiş olanı sunun. Listener’ı henüz ayarlamadıysanız bkz. Abonelik güncellemelerini dinleyin:
const listener = await adapty.addListener('onLatestProfileLoad', async ({ profile }) => {
if (!profile.appliedAttributionSources?.includes('apple_search_ads')) return;
const targeted = await adapty.getPaywall({ placementId });
// present the targeted paywall in place of the first one
});
// Call listener.remove() after the upgrade, or after a timeout (see below).
- Zaman aşımından sonra dinlemeyi durdurun. Kullanıcıların büyük çoğunluğu hiçbir zaman Apple Ads attribution verisi almaz; bu nedenle dinleyiciyi tüm oturum boyunca açık tutmak yerine bir süre sonra kaldırın. İstek başarısız olduğunda kullanıcının her zaman bir şey görmesini sağlamak için placement’a bir yedek paywall yapılandırın.
Tam örnek
onAppleAdsAttribution, Apple Ads attribution uygulandığında çözümlenir ya da timeoutMs süresinde reddedilir. Aşağıdaki kullanımda paywall hemen yüklenir, ardından attribution geldiğinde yeniden getirilir — Apple Ads kullanıcıları hedeflenmiş paywalli görür; attribution hiç gelmezse ilk paywall geçerli kalır:
const APPLE_ADS_SOURCE = 'apple_search_ads';
const placementId = 'YOUR_PLACEMENT_ID';
function hasAppleAdsAttribution(profile: AdaptyProfile): boolean {
return profile.appliedAttributionSources?.includes(APPLE_ADS_SOURCE) ?? false;
}
/**
* Resolves once Apple Ads attribution is applied to the profile.
* Rejects with a timeout error if attribution never arrives within `timeoutMs`.
* Call after `adapty.activate()`.
*/
export function onAppleAdsAttribution(timeoutMs: number): Promise<void> {
return new Promise((resolve, reject) => {
let timer: ReturnType<typeof setTimeout> | undefined;
let handle: { remove: () => void } | undefined;
const stop = () => {
clearTimeout(timer);
handle?.remove();
};
adapty
.addListener('onLatestProfileLoad', ({ profile }) => {
if (!hasAppleAdsAttribution(profile)) return;
stop();
resolve();
})
.then(listener => {
handle = listener;
});
timer = setTimeout(() => {
stop();
reject(new Error(`Apple Ads attribution timed out after ${timeoutMs}ms`));
}, timeoutMs);
});
}
let paywall = await adapty.getPaywall({ placementId });
onAppleAdsAttribution(30_000)
.then(() => adapty.getPaywall({ placementId }))
.then(updated => {
paywall = updated;
})
.catch(() => {
console.log('Apple Ads attribution or loading failed');
});
İlk başlatmada, Apple Ads kullanıcısı varsayılan paywallı kısaca görür ve ardından yenisiyle değiştirilir. Paywallları Paywall Builder ile sunuyorsanız, yeniden sunmanın kabul edilebilir olup olmadığına karar verin ya da güncellemeyi yalnızca paywall gösterilmeden önce uygulayın. timeoutMs değerini ne kadar süre dinlemeye hazır olduğunuza göre ayarlayın — gelmekte olan attribution genellikle başlatmanın birkaç saniyesi içinde ulaşır.
Uygulamanız halihazırda başka amaçlarla onLatestProfileLoad dinliyorsa (örneğin, abonelik durumunu kontrol etmek için), herhangi bir değişiklik yapmanıza gerek yok. adapty.addListener birden fazla bağımsız dinleyiciyi destekler; bu nedenle kendi dinleyicisi, diğerlerini etkilemeden eklenir.