Flutter SDK'da mağaza mesajlarını kontrol edin

App Store ve Google Play, zaman zaman kullanıcılarınıza abonelikleri hakkında bir mesaj göstermesi gerekir:

  • App Store: Fiyat artışına onay isteği, faturalandırma sorunu bildirimi veya geri kazanma teklifi. Varsayılan olarak, StoreKit bu mesajları uygulamanız açıkken kendi başına gösterir.
  • Google Play: Bir abonelik ödemesinin reddedildiğine ve ödeme yönteminin güncellenmesi gerektiğine dair bildirim. Varsayılan olarak, Adapty SDK bu mesajları activate sonrasında uygulamanızın bir Activity’si her başladığında talep eder; buna uygulamanın ön plana geçmesi, bir flow veya onboarding’in açılıp kapanması da dahildir.

Ya da bir mesaj, bir flow, onboarding veya checkout’un üzerinde görünebilir. Mesajın ne zaman gösterileceğini kendiniz seçmek için Adapty SDK’yı manuel mesaj yönetimine geçirin ve showStoreMessages fonksiyonunu kullanıcıyı rahatsız etmeyecek bir anda çağırın.

Warning

Manuel modda mağazalar mesajları kendi başlarına göstermez. Uygulamanız hiçbir zaman showStoreMessages çağırmazsa, kullanıcılar fiyat artışı onay taleplerini, fatura sorunlarına ilişkin bildirimleri veya ödeme reddedildi bildirimlerini hiç göremez.

Başlamadan önce

İhtiyacınız olanlar:

  • Adapty Flutter SDK 4.3.0 veya üzeri: Daha eski sürümlerde store mesajları API’si bulunmaz.
  • iOS 16 veya üzeri App Store mesajları için: StoreKit, daha eski sürümlerdeki uygulamalara mesaj iletmez. iOS 15’te getPendingStoreMessageTypes ve showStoreMessages, decodingFailed hatasıyla başarısız olur; bu nedenle uygulamanız iOS 15’i destekliyorsa bu fonksiyonları yalnızca iOS 16 ve üzerinde çağırın.

Manuel yönetimi etkinleştirme

Mağaza mesajlarının yalnızca uygulamanız showStoreMessages çağırdığında gösterilmesini sağlamak için, SDK’yı etkinleştirirken withStoreMessagesHandling fonksiyonunu AdaptyStoreMessagesHandling.manual parametresiyle çağırın:

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withStoreMessagesHandling(AdaptyStoreMessagesHandling.manual), // auto is the default
);

iOS’ta SDK, App Store mesajlarını mevcut uygulama oturumu için bekleyen bir listeye ekler. Android’de ise SDK, Google Play mesajlarını kendi başına istemeyi durdurur. Varsayılan auto değeriyle SDK, App Store mesajlarını yakalamaz; bu nedenle iOS’ta getPendingStoreMessageTypes ve showStoreMessages’ın döndüreceği veya göstereceği hiçbir şey olmaz.

Bekleyen mesaj türlerini alma

iOS’ta App Store mesajlarının bekleyip beklemediğini öğrenmek için getPendingStoreMessageTypes çağrısını kullanın. Bu çağrı, bekleyen mesajları göstermeden veya kaldırmadan yalnızca türlerini döndürür:

final pendingTypes = await Adapty().getPendingStoreMessageTypes();

if (pendingTypes == null) {
  // Android: Google Play decides whether a message applies when you show it
} else if (pendingTypes.contains(AdaptyStoreMessageType.billingIssue)) {
  // For example, skip the upsell and show the billing message first
}

Android’de bu metot null döndürür: Google Play bekleyen mesajları raporlamaz; bir mesajın uygulanıp uygulanmayacağına yalnızca uygulamanız talep ettiğinde karar verir. iOS’ta boş bir liste, bekleyen mesaj olmadığı anlamına gelir. activate tamamlanana kadar liste her zaman boştur.

Her App Store mesajının şu türlerinden biri bulunur:

TürMesaj
AdaptyStoreMessageType.genericGenel bir App Store mesajı.
AdaptyStoreMessageType.priceIncreaseConsentAbonelik fiyat artışını onaylama isteği.
AdaptyStoreMessageType.billingIssueAbonelik faturalama sorununa ilişkin bildirim. iOS 16.4 ve sonrasında kullanılabilir.
AdaptyStoreMessageType.winBackOfferUygun bir geri kazanma teklifi. iOS 18 ve sonrasında kullanılabilir.

SDK’nın tanımadığı mesaj türlerinin value değeri storekit_<number> şeklindedir. Yalnızca bu dört türün var olduğunu varsaymak yerine türleri == ile karşılaştırın.

Mesajları Göster

Uygulamanız, bir mağaza mesajının kullanıcıyı kesmeyeceği bir noktaya ulaştığında — örneğin kullanıcı bir flow’u kapattıktan veya onboarding’i tamamladıktan sonra — showStoreMessages metodunu çağırın:

try {
  await Adapty().showStoreMessages();
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle other errors
}
  • iOS: SDK, bekleyen mesajları birbiri ardına gösterir. StoreKit bir mesajı gösterdikten sonra SDK, onu bekleyen listesinden çıkarır. StoreKit bir mesajı gösteremezse SDK, mesajı bir sonraki çağrı için saklar ve diğer mesajlarla devam eder.
  • Android: SDK, mevcut Activity için Google Play mesajlarını ister. Google Play bir mesajın kullanıcıya uygun olup olmadığına kendisi karar verir; dolayısıyla bir istek her zaman mesaj göstermez. Çağrı, Google Play’i beklemeden hemen döner ve hiçbir zaman başarısız olmaz. Kullanıcı mesaj üzerinden ödeme yöntemini düzeltirse SDK, kullanıcının satın almalarını Adapty ile senkronize eder ve profil dinleyiciniz güncellenmiş access level’ı alır.

Android’de Başlangıçta Mesajları Gösterme

Varsayılan auto modunda, activate çağrısından önce başlatılan bir Activity istek tetiklemez; bu yüzden Google Play mesajları başlangıçta görünmez. Başlangıçta göstermek için yalnızca Android’de activate sonrasında bir kez showStoreMessages çağırın:


await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY'),
);

if (Platform.isAndroid) {
  await Adapty().showStoreMessages();
}

iOS’ta bu çağrıyı yapmayın: auto modunda gösterecek hiçbir şey yoktur ve iOS 15’te başarısız olur.

Yalnızca belirli mesaj türlerini göster

Bekleyen App Store mesajlarının yalnızca bir kısmını göstermek için türleri iosFilter ile belirtin. Diğer mesajlar beklemede kalmaya devam eder:

await Adapty().showStoreMessages(
  iosFilter: [
    AdaptyStoreMessageType.billingIssue,
    AdaptyStoreMessageType.priceIncreaseConsent,
  ],
);

iosFilter belirtilmezse SDK, tanımadığı türler dahil tüm bekleyen mesajları gösterir. Boş bir liste hiçbirini göstermez. Android, iosFilter parametresini dikkate almaz ve tüm Google Play mesajlarını talep eder.

Hatalar

iOS’ta showStoreMessages, aşağıdaki kodlardan biriyle bir AdaptyError döndürerek başarısız olur:

KodAdNeden
2006decodingFailedCihaz iOS 15 veya daha eski bir sürüm çalıştırıyor. Bu metodu yalnızca iOS 16 ve sonrasında çağırın.
3201operationInProgressBaşka bir showStoreMessages çağrısı hâlâ mesajları gösteriyor. Bitmesini bekleyin, ardından tekrar deneyin.
3202resolverFailureSDK, mesajları göstermek için ön planda aktif bir pencere sahnesi bulamadı. Uygulamanız ön plandayken metodu tekrar çağırın.