React Native SDK'da ilk açılışta AA hedefli paywall göster

Bu makale, uygulamanızın iOS derlemesi için geçerlidir. Apple Ads attribution yalnızca iOS’ta mevcuttur.

Apple Ads (AA) attribution, adapty.activate() sonrasında asenkron olarak gelir. İlk açılışta genellikle henüz gelmemiş olduğundan, getFlow varsayılan kitleye göre sonuç döndürür ve Apple Ads kullanıcıları AA segmentli paywallınızı göremez. Paywall’ı attribution gelene kadar ertelemek yerine hemen bir tane gösterin ve AA attribution uygulandığında yenileyin — böylece Apple Ads kullanıcıları hedeflenmiş varyantı görürken diğer kullanıcılar bekleme yaşamaz. AdaptyProfile.appliedExternalAttributionProviders, AA attribution’ın uygulanıp uygulanmadığını size söyler.

Important

Bu özellik yalnızca Apple Ads verilerini raporlar. Diğer sağlayıcılardan gelen attribution, kullanıcı profillerinde görüntülenebilir ve segment filtrelerinde kullanılabilir; ancak henüz burada yer almamaktadır.

Başlamadan önce

İhtiyacınız olanlar:

  • Adapty React Native SDK 4.1 veya üzeri. 3.17.1–4.0.x sürümlerinde profil özelliği appliedAttributionSources olarak adlandırılmıştır ve flow’lar getPaywall ile çekilir.
  • Adapty’de uygulama için yapılandırılmış Apple Ads. Bkz. Apple Ads.

Nasıl çalışır

adapty.activate() çağrısının ardından SDK, arka planda Apple’dan Apple Ads attribution verilerini talep eder 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 profilin appliedExternalAttributionProviders dizisinde 'apple_search_ads' yer alır.

Bu sayede paywallı iki adımda yükleyebilirsiniz:

  1. getFlow’u hemen çağırın. Henüz herhangi bir attribution uygulanmadığından Adapty, isteği varsayılan kitleye göre çözer ve kullanıcı anında bir paywall görür.
  2. 'apple_search_ads' göründüğünde getFlow’u tekrar çağırın. Adapty artık isteği Apple Ads kitlesine göre çözer ve ilkinin yerine geçen hedeflenmiş paywall’ı döndürür.

appliedExternalAttributionProviders boş olabilir veya hiç bulunmayabilir. Bu, aşağıdakilerden birini ifade eder:

  • Apple Ads attribution bu profil için henüz işlenmemiş.
  • Hiç attribution gelmemiş.
  • Attribution başka bir sağlayıcıdan gelmiş; bu dizi onu raporlamıyor.

Her üç durumda da 1. adım güvenlidir — Adapty, isteği mevcut profil durumuyla eşleşen kitleye göre çözümler; genellikle varsayılan kitle kullanılır. 2. adım yalnızca 'apple_search_ads' göründüğünde çalışır.

Important

Sonraki her açılışta, önbelleğe alınmış profil zaten appliedExternalAttributionProviders içinde 'apple_search_ads' bilgisini taşıdığından, ilk getFlow çağrısı doğrudan Apple Ads segmentine göre belirlenmiş paywall’u döndürür — ikinci bir istek ya da görünür bir değişiklik olmaz. İki adımlı flow yalnızca attribution henüz tamamlanmamışken, yani ilk açılışta önem taşır.

Uygulama

Hemen bir paywall göster, ardından 'apple_search_ads' olayını dinle ve geldiğinde paywall’ı yenile.

  1. SDK’yı etkinleştirin. Bkz. React Native SDK’yı yükleyin ve yapılandırın.
  2. Bir paywall yükleyin ve gösterin — attribution beklemeden getFlow ile her zamanki gibi devam edin.
  3. Profil güncellemelerini dinleyinadapty.addEventListener('onLatestProfileLoad', …) ile 'apple_search_ads' verisini takip edin. Bu veri geldiğinde paywallı yeniden yükleyip güncellenmiş sürümü gösterin. Dinleyiciyi henüz ayarlamadıysanız bkz. Abonelik güncellemelerini dinleyin:
const subscription = adapty.addEventListener('onLatestProfileLoad', async profile => {
  if (!profile.appliedExternalAttributionProviders?.includes('apple_search_ads')) return;
  const targeted = await adapty.getFlow(placementId);
  // present the targeted paywall in place of the first one
});

// Call subscription.remove() after the upgrade, or after a timeout (see below).
  1. Zaman aşımından sonra dinlemeyi durdurun. Kullanıcıların büyük çoğunluğu Apple Ads attribution’ı hiçbir zaman 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örmesi için placement’a bir yedek paywall yapılandırın.

Eksiksiz örnek

onAppleAdsAttribution, Apple Ads attribution uygulandığında çözümlenir ya da timeoutMs süresi geçince reddedilir. Aşağıdaki kullanımda paywall hemen yüklenir, ardından attribution geldiğinde yeniden çekilir — Apple Ads kullanıcıları hedefli paywall’ı görür; attribution hiç gelmezse ilk paywall yerinde kalır:


const APPLE_ADS_PROVIDER = 'apple_search_ads';
const placementId = 'YOUR_PLACEMENT_ID';

function hasAppleAdsAttribution(profile: AdaptyProfile): boolean {
  return profile.appliedExternalAttributionProviders?.includes(APPLE_ADS_PROVIDER) ?? 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 subscription: { remove: () => void } | undefined;

    const stop = () => {
      clearTimeout(timer);
      subscription?.remove();
    };

    subscription = adapty.addEventListener('onLatestProfileLoad', profile => {
      if (!hasAppleAdsAttribution(profile)) return;
      stop();
      resolve();
    });

    timer = setTimeout(() => {
      stop();
      reject(new Error(`Apple Ads attribution timed out after ${timeoutMs}ms`));
    }, timeoutMs);
  });
}

let flow = await adapty.getFlow(placementId);

onAppleAdsAttribution(30_000)
  .then(() => adapty.getFlow(placementId))
  .then(updated => {
    flow = updated;
  })
  .catch(() => {
    console.log('Apple Ads attribution or loading failed');
  });

İlk açılışta Apple Ads kullanıcıları, varsayılan paywall’un değiştirilmeden önce kısa süreliğine görünmesine tanık olabilir. Paywall’ları Paywall Builder ile sunuyorsanız, yeniden sunumun 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 — gelen attribution verisi genellikle uygulamanın açılmasından sonraki birkaç saniye içinde ulaşır.

Uygulamanız başka amaçlarla zaten onLatestProfileLoad dinliyorsa (örneğin, abonelik durumunu kontrol etmek için), bunu değiştirmenize gerek yok. adapty.addEventListener birden fazla bağımsız dinleyiciyi destekler, dolayısıyla bu kendi dinleyicisini mevcut olanları etkilemeden ekler.