iOS SDK'da App Store mesajlarını kontrol etme
App Store, kullanıcılarınıza zaman zaman abonelikleriyle ilgili bir mesaj göstermesi gerekebilir: fiyat artışına onay vermelerini istemek, faturalama sorununu bildirmek ya da geri kazanma teklifi sunmak gibi. Varsayılan olarak StoreKit, uygulamanız açıkken bu mesajları kendi başına gösterir — bir paywall, onboarding veya ödeme ekranının üstüne bile gelebilir.
Bu anı kendiniz belirlemek için Adapty SDK’sını manuel mesaj yönetimine geçirin. SDK, her mesajı bekleyen bir listeye ekler ve uygulamanız showStoreMessages çağırdığında bu listeyi gösterir.
Manuel modda StoreKit, mesajları kendi başına göstermez. Uygulamanız hiçbir zaman showStoreMessages çağırmazsa, kullanıcılar hiçbir zaman bir fiyat artışı onay isteği veya faturalandırma sorunu bildirimi görmez.
Başlamadan önce
İhtiyacınız olanlar:
- Adapty iOS SDK 4.2 veya üzeri: Daha eski sürümler store mesajları API’sine sahip değildir.
- iOS 16 veya Mac Catalyst 16 veya üzeri: StoreKit, daha eski sürümlerdeki uygulamalara mesaj iletmediğinden store mesajları API’si iOS 16’dan itibaren kullanılabilir olarak işaretlenmiştir. API, macOS’ta kullanılamaz.
Adapty SDK, iOS 15’i desteklemektedir. Uygulamanız da iOS 15’i destekliyorsa, her store messages çağrısını if #available(iOS 16.0, *) ile sarın ya da çağrıyı yapan türü @available(iOS 16.0, *) ile işaretleyin. Bu kontrollerden biri olmadan uygulama derlenmez. Bu makaledeki örnekler söz konusu kontrolleri içermektedir. Deployment target’ınız iOS 16 veya üzeriyse bu kontrolleri eklemenize gerek yoktur.
Manuel işlemeyi etkinleştir
App Store mesajlarını yakalamak için, SDK’yı etkinleştirirken storeMessagesHandling değerini .manual olarak ayarlayın:
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(storeMessagesHandling: .manual) // .auto is the default
SDK, etkinleştirildiğinde mesajları yakalamaya başlar ve bunları mevcut uygulama oturumu için bellekte tutar. Varsayılan .auto değeriyle SDK hiçbir şey yakalamaz; getPendingStoreMessageTypes ve showStoreMessages işlevleri hiçbir şey yapmaz.
Bekleyen mesaj türlerini alma
Herhangi bir mesajın bekleyip beklemediğini öğrenmek için getPendingStoreMessageTypes metodunu çağırın. Bu metot, mesajları göstermeden veya silmeden bekleyen mesajların türlerini döndürür:
if #available(iOS 16.0, *) {
let pendingTypes = await Adapty.getPendingStoreMessageTypes()
if pendingTypes.contains(.billingIssue) {
// For example, skip the upsell and show the billing message first
}
}
Her mesaj şu türlerden birine sahiptir:
| Tür | Mesaj |
|---|---|
.generic | Genel bir App Store mesajı. |
.priceIncreaseConsent | Abonelik fiyat artışını onaylamak için bir istek. |
.billingIssue | Abonelik faturalama sorunu hakkında bir bildirim. iOS 16.4 ve sonrasında kullanılabilir. |
.winBackOffer | Uygun bir geri kazanma teklifi. iOS 18 ve sonrasında kullanılabilir. |
SDK’nın tanımadığı bir mesaj türü, ham değer olarak storekit_<number> şeklinde gösterilir.
Bekleyen mesajları göster
Uygulamanız, sistem sayfasının kullanıcıyı rahatsız etmeyeceği bir noktaya ulaştığında — örneğin kullanıcı bir flow’u kapattıktan veya onboarding’i tamamladıktan sonra — showStoreMessages işlevini çağırın:
SDK mesajları birbiri ardına gösterir. StoreKit bir mesajı gösterdikten sonra, SDK onu bekleyen listeden kaldırır. StoreKit bir mesajı göstermeyi başaramazsa, SDK hatayı Adapty günlüğüne yazar, mesajı bir sonraki çağrı için saklar ve diğer mesajlarla devam eder.
Yalnızca belirli mesaj türlerini göster
Yalnızca belirli bekleyen mesajları göstermek için for parametresine türleri geçin. Diğer mesajlar beklemede kalır:
try await Adapty.showStoreMessages(
for: [.billingIssue, .priceIncreaseConsent],
using: displayStoreKitMessage
)
for kullanılmadığında SDK, tanımadığı türler dahil tüm bekleyen mesajları gösterir.
Hatalar
showStoreMessages, şu kodlardan biriyle bir AdaptyError fırlatır:
| Kod | Ad | Neden |
|---|---|---|
| 3201 | operationInProgress | Başka bir showStoreMessages çağrısı hâlâ mesajları gösteriyor. Bitmesini bekleyin, sonra tekrar deneyin. |
| 3202 | resolverFailure | Yalnızca UIKit: bir scene iletmediniz ve SDK ön planda aktif bir scene bulamadı. Uygulamanız ön plandayken metodu tekrar çağırın ya da scene’i açıkça iletin. |
| 9000 | operationInterrupted | Metodu çağıran görev iptal edildi. |