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ı

HataKodÇözüm
unknown0Bilinmeyen veya beklenmedik bir hata oluştuğunu belirten hata kodu.
Tekrar deneyin veya Diğer sorunlar bölümüne bakın.
clientInvalid1Bu hata kodu, istemcinin denenen işlemi gerçekleştirmesine izin verilmediğini belirtir.
paymentCancelled2

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.

paymentInvalid3Bu hata, ödeme parametrelerinden birinin App Store tarafından tanınmadığını belirtir.
paymentNotAllowed4Bu hata kodu, kullanıcının ödeme yapmasına izin verilmediğini belirtir.
storeProductNotAvailable5Bu hata kodu, talep edilen ürünün mağazada mevcut olmadığını belirtir.
Uygulamayı yeniden yüklemeyi deneyin.
cloudServicePermissionDenied6Bu hata kodu, kullanıcının iCloud hizmet bilgilerine erişime izin vermediğini belirtir.
cloudServiceNetworkConnectionFailed7Bu hata kodu, cihazın ağa bağlanamadığını belirtir.
cloudServiceRevoked8Bu hata kodu, kullanıcının bu iCloud hizmetini kullanma iznini iptal ettiğini belirtir.
privacyAcknowledgementRequired9Bu hata kodu, kullanıcının Apple’ın gizlilik politikasını henüz onaylamadığını belirtir.
unauthorizedRequestData10Bu hata kodu, uygulamanın gerekli yetkiye sahip olmadığı bir özelliği kullanmaya çalıştığını belirtir.
invalidOfferIdentifier11

Teklif identifier geçerli değil. Örneğin, App Store’da bu tanımlayıcıya sahip bir teklif oluşturmamış ya da teklifi iptal etmiş olabilirsiniz.

İstediğiniz teklifleri AppStore Connect’te oluşturduğunuzdan ve geçerli bir teklif tanımlayıcısı geçtiğinizden emin olun.

invalidSignature12Bu hata kodu, ödeme indirimindeki imzanın geçerli olmadığını belirtir.
missingOfferParams13Bu hata kodu, ödeme indiriminde parametrelerin eksik olduğunu belirtir.
invalidOfferPrice14Bu 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.
noProductIDsFound1000

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 InvalidProductIdentifiers uyarısı da gelebilir. Uyarı hatasız geliyorsa dikkate almayın.

Bu hatayla karşılaşıyorsanız Kod-1000 noProductIDsFound hatasına yönelik düzeltme bölümündeki adımları izleyin.

productRequestFailed1002Şu anda mevcut ürünler alınamıyor.
cantMakePayments1003Bu cihazda uygulama içi satın almalara izin verilmiyor. Sorun giderme kılavuzuna bakın.
cantReadReceipt1005

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.

productPurchaseFailed1006Ü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.
refreshReceiptFailed1010Makbuz yenileme işlemi başarısız oldu.
fetchSubscriptionStatusFailed1020App Store’dan abonelik durumu alınamadı.
unknownTransactionId1030İşlem tanımlayıcısı bilinmiyor.
paymentPendingError1050Ödeme şu anda beklemede.

Ağ hataları

HataKodÇözüm
notActivated2002Adapty 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.
badRequest2003Geçersiz istek.
App Store ile entegrasyon için gereken tüm adımları tamamladığınızdan emin olun.
serverError2004Sunucu hatası.
Bir süre sonra tekrar deneyin. Sorun devam ederse Adapty destek ekibiyle iletişime geçin.
networkFailed2005Bu 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.
decodingFailed2006Bu 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.
encodingFailed2009Bu hata, istek kodlamasının başarısız olduğunu gösterir.

Genel Hatalar

HataKodÇözüm
analyticsDisabled3000Bu müşteri için analytics devre dışı bırakıldığından analytics olayları işlenemiyor.
wrongParam3001Bu 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.
activateOnceError3005.activate metodu birden fazla kez çağrılamaz.
profileWasChanged3006İş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ı.
unsupportedData3007Bu hata, veri formatının SDK tarafından desteklenmediğini gösterir.
unidentifiedUserLogout3020Kimliği doğrulanmamış bir kullanıcı için logout metodu çağrılamaz.
fetchTimeoutError3101Bu hata, fetch işleminin zaman aşımına uğradığını gösterir.
operationInterrupted9000Bu 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.