iOS SDK'da hataları yönetin
Adapty SDK, tüm hata türleri için AdaptyError adında kendi sarmalayıcısına sahiptir. Temel olarak SDK tarafından döndürülen her hata bir AdaptyError’dır. Aşağıda açıklanan iki kullanışlı özelliği vardır: originalError ve adaptyErrorCode.
originalError, orijinal hatayla çalışmanız gerektiğinde başvurabileceğiniz orijinal hatayı içerir. SKError, NSError veya genel bir Swift Error olabilir. Bu özellik isteğe bağlıdır; çünkü bazı hatalar (tutarsız veya eksik veriler gibi) doğrudan SDK tarafından üretilir ve etrafında wrapper oluşturulan orijinal bir hataya sahip olmayabilir.
adaptyErrorCode, aşağıdaki gibi yaygın sorunları ele almak için kullanılabilir:
- geçersiz kimlik bilgileri
- ağ hataları
- iptal edilen ödemeler
- faturalama sorunları
- geçersiz makbuz
- ve çok daha fazlası
Belirli kodlar için hatayı kontrol etmek ve buna göre tepki vermek oldukça kolaydır.
do {
let info = try await Adapty.makePurchase(product: product)
} catch {
if error.adaptyErrorCode == .paymentCancelled {
// purchase was cancelled
// you can offer discount to your user or remind them later
}
}
Hata ayıklamadan önce ayrıntılı logları etkinleştirin. Çoğu AdaptyError, altta yatan bir StoreKit, ağ veya backend hatasını sarar. Ayrıntılı loglar açıkken (Adapty.logLevel = .verbose — bkz. Loglama), sarılmış hata konsola yazdırılır ve bu genellikle gerçek nedeni gösterir. originalError özelliği log seviyesinden bağımsız olarak doldurulur — ayrıntılı loglar yalnızca bunu konsolda görünür kılar.
Bu çözümler sorununuzu gidermezse, destek ekibiyle iletişime geçmeden önce atmamız gereken adımlar için Diğer sorunlar bölümüne bakın.
StoreKit hataları
| Hata | Kod | Çözüm |
|---|---|---|
| unknown | 0 | Bilinmeyen veya beklenmedik bir hata oluştuğunu belirten hata kodu. Tekrar deneyin veya Diğer sorunlar bölümüne bakın. |
| clientInvalid | 1 | Bu hata kodu, istemcinin denenen işlemi gerçekleştirmesine izin verilmediğini belirtir. |
| paymentCancelled | 2 | Bu hata kodu, kullanıcının ödeme isteğini iptal ettiğini belirtir. Herhangi bir işlem gerekmez; ancak iş mantığı açısından kullanıcınıza indirim teklif edebilir veya daha sonra hatırlatabilirsiniz. |
| paymentInvalid | 3 | Bu hata, ödeme parametrelerinden birinin App Store tarafından tanınmadığını belirtir. |
| paymentNotAllowed | 4 | Bu hata kodu, kullanıcının ödeme yapmasına izin verilmediğini belirtir. |
| storeProductNotAvailable | 5 | Bu hata kodu, talep edilen ürünün mağazada mevcut olmadığını belirtir. Uygulamayı yeniden yüklemeyi deneyin. |
| cloudServicePermissionDenied | 6 | Bu hata kodu, kullanıcının iCloud hizmet bilgilerine erişime izin vermediğini belirtir. |
| cloudServiceNetworkConnectionFailed | 7 | Bu hata kodu, cihazın ağa bağlanamadığını belirtir. |
| cloudServiceRevoked | 8 | Bu hata kodu, kullanıcının bu iCloud hizmetini kullanma iznini iptal ettiğini belirtir. |
| privacyAcknowledgementRequired | 9 | Bu hata kodu, kullanıcının Apple’ın gizlilik politikasını henüz onaylamadığını belirtir. |
| unauthorizedRequestData | 10 | Bu hata kodu, uygulamanın gerekli yetkiye sahip olmadığı bir özelliği kullanmaya çalıştığını belirtir. |
| invalidOfferIdentifier | 11 | Teklif İstediğiniz teklifleri AppStore Connect’te oluşturduğunuzdan ve geçerli bir teklif tanımlayıcısı geçtiğinizden emin olun. |
| invalidSignature | 12 | Bu hata kodu, ödeme indirimindeki imzanın geçerli olmadığını belirtir. |
| missingOfferParams | 13 | Bu hata kodu, ödeme indiriminde parametrelerin eksik olduğunu belirtir. |
| invalidOfferPrice | 14 | Bu hata kodu, App Store Connect’te belirttiğiniz fiyatın artık geçerli olmadığını belirtir. Teklifler her zaman indirimli bir fiyatı temsil etmelidir. |
| noProductIDsFound | 1000 | Bu hata, paywallda talep ettiğiniz ürünlerin App Store’da listelenmiş olmasına rağmen satın alma için mevcut olmadığını belirtir. Bu hatayla birlikte zaman zaman Bu hatayla karşılaşıyorsanız Kod-1000 |
| productRequestFailed | 1002 | Şu anda mevcut ürünler alınamıyor. |
| cantMakePayments | 1003 | Bu cihazda uygulama içi satın almalara izin verilmiyor. Sorun giderme kılavuzuna bakın. |
| cantReadReceipt | 1005 | Cihazda geçerli bir makbuz mevcut değil. Bu durum sandbox testlerinde sorun yaratabilir. Sandbox ortamında, gerçekten bir satın alma yapana kadar geçerli bir makbuz dosyanız olmaz; bu nedenle makbuzlara erişmeden önce mutlaka bir satın alma gerçekleştirin. Sandbox testleri sırasında cihaza geçerli bir Apple sandbox hesabıyla giriş yaptığınızdan da emin olun. |
| productPurchaseFailed | 1006 | Ürün satın alımı başarısız oldu. Bu hata, altta yatan bir StoreKit hatasını sarmalıyor — gerçek nedeni görmek için originalError değerini okuyun (veya konsoldaki ayrıntılı günlükleri etkinleştirin). Sarmalanan hata genellikle yukarıdaki tablodaki 0–14 arası StoreKit kodlarından biridir; en sık karşılaşılanlar paymentCancelled, paymentInvalid, paymentNotAllowed veya invalidOfferPrice’tır. Belirli bir neden tespit edemiyorsanız yeni bir sandbox profiliyle deneyin; sorun devam ederse Apple destek birimiyle iletişime geçin. |
| refreshReceiptFailed | 1010 | Makbuz yenileme işlemi başarısız oldu. |
| fetchSubscriptionStatusFailed | 1020 | App Store’dan abonelik durumu alınamadı. |
| unknownTransactionId | 1030 | İşlem tanımlayıcısı bilinmiyor. |
| paymentPendingError | 1050 | Ödeme şu anda beklemede. |
Ağ hataları
| Hata | Kod | Çözüm |
|---|---|---|
| notActivated | 2002 | Adapty SDK etkinleştirilmemiş. En sık karşılaşılan durum: bir splash ekranı veya erken bir UI hook’u, Adapty.activate tamamlanmadan önce Adapty metodlarını çağırır. Belirti aralıklıdır ve gerçek cihazla simülatör arasındaki zamanlama farkı nedeniyle simülatörde yeniden üretilmeyebilir. Diğer SDK çağrılarını planlamadan önce activate’in tamamlanma handler’ını veya async sonucunu bekleyin. Tam sıralama için iOS SDK’da çağrı sırası bölümüne bakın. |
| badRequest | 2003 | Geçersiz istek. App Store ile entegrasyon için gereken tüm adımları tamamladığınızdan emin olun. |
| serverError | 2004 | Sunucu hatası. Bir süre sonra tekrar deneyin. Sorun devam ederse Adapty destek ekibiyle iletişime geçin. |
| networkFailed | 2005 | Bu hata, kullanıcının cihazındaki ağ bağlantısıyla ilgili bir sorunu gösterir. VPN’i devre dışı bırakmayı veya mobil ağdan WiFi’ye ya da tam tersine geçmeyi deneyin. |
| decodingFailed | 2006 | Bu hata, yanıt çözümlemesinin başarısız olduğunu gösterir. Kodunuzu gözden geçirin ve gönderdiğiniz parametrelerin geçerli olduğundan emin olun. Örneğin, bu hata geçersiz bir API anahtarı kullandığınızı gösterebilir. |
| encodingFailed | 2009 | Bu hata, istek kodlamasının başarısız olduğunu gösterir. |
Genel Hatalar
| Hata | Kod | Çözüm |
|---|---|---|
| analyticsDisabled | 3000 | Bu müşteri için analytics devre dışı bırakıldığından analytics olayları işlenemiyor. |
| wrongParam | 3001 | Bu hata, bazı parametrelerinizin doğru olmadığını gösterir. Adapty paywall builder kullanıyor ve bu hata nedeniyle bir paywall görüntüleyemiyorsanız, paywall builder’da Show on device seçeneğini açın. Sorunun bir diğer olası nedeni, yerel yedek dosya sürümünün SDK sürümüyle eşleşmemesidir. Kontrol panelinden yeni bir dosya indirin. |
| activateOnceError | 3005 | .activate metodu birden fazla kez çağrılamaz. |
| profileWasChanged | 3006 | İşlem sırasında kullanıcı profili değişti. Bu durum, Adapty.identify hâlâ çalışırken başka bir metot çağrıldığında yaşanır; devam eden çağrı, değiştirilmek üzere olan bir profile denk gelir ve SDK bu isteği reddeder. Kullanıcı eylemiyle ilgili herhangi bir çağrı yapmadan önce identify işlemini her zaman await ile bekleyin (veya completion handler kullanın). Bkz. iOS SDK’da çağrı sırası. |
| unsupportedData | 3007 | Bu hata, veri formatının SDK tarafından desteklenmediğini gösterir. |
| unidentifiedUserLogout | 3020 | Kimliği doğrulanmamış bir kullanıcı için logout metodu çağrılamaz. |
| fetchTimeoutError | 3101 | Bu hata, fetch işleminin zaman aşımına uğradığını gösterir. |
| operationInterrupted | 9000 | Bu işlem sistem tarafından kesintiye uğratıldı. |
Diğer Sorunlar
Henüz bir çözüm bulamadıysanız, sonraki adımlar şunlar olabilir:
- SDK’yı en son sürüme yükseltme: En son SDK sürümleri daha kararlıdır ve bilinen sorunlara yönelik düzeltmeler içerdiğinden her zaman güncellemenizi öneririz.
- Destek ekibiyle iletişime geçin veya diğer geliştiricilerden yardım alın destek forumunda.
- Destek ekibiyle [email protected] adresinden veya sohbet üzerinden iletişime geçin: SDK’yı yükseltmeye hazır değilseniz veya yükseltme sorunu çözmediyse destek ekibimize başvurun. Ayrıntılı kayıt tutmayı etkinleştirirseniz ve günlükleri ekiple paylaşırsanız sorununuz daha hızlı çözülecektir. İlgili kod parçacıklarını da ekleyebilirsiniz.