Flutter SDK'da hataları yönetme
SDK tarafından döndürülen her hata AdaptyErrorCode türündedir. İşte bir örnek:
Hata ayıklamadan önce ayrıntılı günlükleri etkinleştirin. Çoğu AdaptyError, altta yatan bir StoreKit, Play Billing, ağ veya backend hatasını sarar. Ayrıntılı günlükler açıkken (await Adapty().setLogLevel(AdaptyLogLevel.verbose) — bkz. Günlük Kaydı), sarılmış hata konsola yazdırılır ve genellikle asıl nedeni size söyler.
Bu çözümler sorununuzu gidermezse, destek ekibiyle iletişime geçmeden önce atacağınız adımlar için Diğer sorunlar bölümüne bakın; bu sayede size daha verimli yardımcı olabiliriz.
try {
final result = await adapty.makePurchase(product: product);
} on AdaptyError catch (adaptyError) {
if (adaptyError.code == AdaptyErrorCode.paymentCancelled) {
// Cancelled
}
} catch (e) {
}
Sistem StoreKit Kodları
| Hata | Kod | Çözüm |
|---|---|---|
| unknown | 0 | Bilinmeyen veya beklenmedik bir hata oluştuğunu belirten hata kodu. Yeniden deneyin veya Diğer sorunlar bölümüne bakın. |
| clientInvalid | 1 | İstemcinin denenen işlemi gerçekleştirme iznine sahip olmadığını belirten hata kodu. |
| paymentCancelled | 2 | Kullanıcının ödeme isteğini iptal ettiğini belirten hata kodu. Herhangi bir işlem yapmanız gerekmez; ancak iş mantığı açısından kullanıcıya indirim teklif edebilir ya da daha sonra hatırlatabilirsiniz. |
| paymentInvalid | 3 | Ödeme parametrelerinden birinin App Store tarafından tanınmadığını belirten hata kodu. |
| paymentNotAllowed | 4 | Kullanıcının ödeme yetkisine sahip olmadığını belirten hata kodu. |
| storeProductNotAvailable | 5 | İstenen ürünün mağazada mevcut olmadığını belirten hata kodu. Uygulamayı yeniden yüklemeyi deneyin. |
| cloudServicePermissionDenied | 6 | Kullanıcının Bulut hizmeti bilgilerine erişime izin vermediğini belirten hata kodu. |
| cloudServiceNetworkConnectionFailed | 7 | Cihazın ağa bağlanamadığını belirten hata kodu. |
| cloudServiceRevoked | 8 | Kullanıcının bu bulut hizmetini kullanma iznini iptal ettiğini belirten hata kodu. |
| privacyAcknowledgementRequired | 9 | Kullanıcının Apple’ın gizlilik politikasını henüz onaylamadığını belirten hata kodu. |
| unauthorizedRequestData | 10 | Uygulamanın, gerekli yetkilendirmeye sahip olmadığı bir özelliği kullanmaya çalıştığını belirten hata kodu. |
| invalidOfferIdentifier | 11 |
İstediğiniz teklifleri AppStore Connect’te ayarladığınızdan ve geçerli bir teklif kimliği ilettiğinizden emin olun. |
| invalidSignature | 12 | Ödeme indirimindeki imzanın geçersiz olduğunu belirten hata kodu. |
| missingOfferParams | 13 | Ödeme indiriminde parametrelerin eksik olduğunu belirten hata kodu. |
| invalidOfferPrice | 14 | App Store Connect’te belirttiğiniz fiyatın artık geçerli olmadığını belirten hata kodu. Teklifler her zaman indirimli bir fiyatı temsil etmelidir. |
Özel Android kodları
| Hata | Kod | Çözüm |
|---|---|---|
| adaptyNotInitialized | 20 | Adapty SDK’yı Adapty.activate metoduyla düzgün şekilde yapılandırmanız gerekiyor. Nasıl yapılacağını öğrenmek için Flutter için sayfasına bakın. |
| productNotFound | 22 | Bu hata, satın alınmak istenen ürünün mağazada mevcut olmadığını gösterir. |
| invalidJson | 23 | Paywall JSON’ı geçersiz. Adapty Kontrol Paneli’nde düzeltin. Nasıl düzeltileceğine dair ayrıntılar için Remote config ile paywall özelleştirme konusuna bakın. |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | Yenilenmesi gereken orijinal abonelik geçmişte bulunamadı. |
| pendingPurchase | 25 | Bu hata, satın alma durumunun tamamlandı değil, beklemede olduğunu gösterir. Ayrıntılar için Android Geliştirici dokümanlarındaki Bekleyen işlemleri yönetme sayfasına bakın. |
| billingServiceTimeout | 97 | Bu hata, Google Play yanıt veremeden önce isteğin maksimum zaman aşımına ulaştığını gösterir. Bunun nedeni, örneğin Play Billing Library çağrısının istenen işlemin yürütülmesindeki bir gecikme olabilir. |
| featureNotSupported | 98 | İstenen özellik, mevcut cihazda Play Store tarafından desteklenmiyor. |
| billingServiceDisconnected | 99 | Bu kritik hata, istemci uygulamasının BillingClient üzerinden Google Play Store hizmetiyle kurduğu bağlantının kesildiğini gösterir. |
| billingServiceUnavailable | 102 | Bu geçici hata, Google Play Billing hizmetinin şu anda kullanılamadığını gösterir. Çoğu durumda bu, istemci cihazı ile Google Play Billing hizmetleri arasındaki herhangi bir noktada ağ bağlantısı sorunu olduğu anlamına gelir. |
| billingUnavailable | 103 | Bu hata, satın alma sürecinde kullanıcı kaynaklı bir ödeme hatası oluştuğunu gösterir. Bu hatanın oluşabileceği durumlar şunlardır: 1. Kullanıcının cihazındaki Play Store uygulaması güncel değil. 2. Kullanıcı desteklenmeyen bir ülkede bulunuyor. 3. Kullanıcı bir kurumsal hesap sahibi ve kurumsal yöneticisi kullanıcıların satın alma yapmasını engellemiş. 4. Google Play, kullanıcının ödeme yönteminden ücret tahsil edemiyor. Örneğin kullanıcının kredi kartının süresi dolmuş olabilir. 5. Kullanıcı Play Store uygulamasında oturum açmamış. |
| developerError | 105 | Bu, bir API’yi hatalı kullandığınızı gösteren kritik bir hatadır. |
| billingError | 106 | Bu, Google Play’in kendi içinde bir sorun olduğunu gösteren kritik bir hatadır. |
| itemAlreadyOwned | 107 | Consumable ürün zaten satın alınmış. |
| itemNotOwned | 108 | Bu hata, öğe üzerindeki istenen işlemin başarısız olduğunu gösterir. |
Özel StoreKit kodları
| Hata | Kod | Çözüm |
|---|---|---|
| noProductIDsFound | 1000 | Bu hata, paywall’da talep ettiğiniz ürünlerin App Store’da listelenmiş olmasına rağmen satın alma için mevcut olmadığını gösterir. Bu hata bazen Bu hatayla karşılaşıyorsanız Kod-1000 |
| noProductsFound | 1001 | Bu hata, satın alma için talep edilen ürünün mağazada mevcut olmadığını gösterir. |
| productRequestFailed | 1002 | Şu anda mevcut ürünler alınamıyor. |
| cantMakePayments | 1003 | Bu cihazda uygulama içi satın almalar izin verilmiyor. Sorun giderme kılavuzuna bakın. |
| noPurchasesToRestore | 1004 | Bu hata, App Store’un geri yüklenecek satın almayı bulamadığını gösterir. |
| cantReadReceipt | 1005 | Cihazda geçerli bir makbuz bulunmuyor. Bu durum sandbox testleri sırasında sorun yaratabilir. Sandbox ortamında gerçek bir satın alma yapana kadar geçerli bir makbuz dosyanız olmaz; bu nedenle makbuza erişmeden önce mutlaka bir satın alma yapın. Sandbox testleri sırasında cihazda geçerli bir Apple sandbox hesabıyla oturum açtığınızdan da emin olun. |
| productPurchaseFailed | 1006 | Ürün satın alma işlemi başarısız oldu. Bu hata, altta yatan bir StoreKit hatasını sarmalar — gerçek nedeni görmek için sarmalanan hatayı okuyun (ya da ayrıntılı günlükleri etkinleştirerek konsolda görüntüleyin). Sarmalanan hata genellikle yukarıdaki tablodaki 0–14 arası StoreKit kodlarından biridir; en yaygın olanlar paymentCancelled, paymentInvalid, paymentNotAllowed veya invalidOfferPrice’dır. Belirli bir neden tespit edemiyorsanız yeni bir sandbox profili deneyin; sorun devam ederse Apple desteğiyle iletişime geçin. |
| missingOfferSigningParams | 1007 | Bu hata, Adapty entegrasyonunda veya tekliflerle ilgili sorunlar olduğunu gösterir. Kurulum ayrıntıları için App Store entegrasyonunu yapılandırma ve Teklifler bölümlerine bakın. |
| refreshReceiptFailed | 1010 | Bu hata, makbuzun alınamadığını gösterir. Yalnızca StoreKit 1 için geçerlidir. |
| receiveRestoredTransactionsFailed | 1011 | Satın alma geri yüklemesi başarısız oldu. |
Özel ağ kodları
| Hata | Kod | Çözüm |
|---|---|---|
| notActivated | 2002 | Adapty SDK etkinleştirilmemiş. Genellikle bir splash screen veya erken bir UI hook’u, Adapty().activate tamamlanmadan Adapty metodlarını çağırdığında görülür. Sorun aralıklı olarak ortaya çıkar ve gerçek cihaz zamanlaması farklı olduğundan emülatörde yeniden üretilemeyebilir. Diğer SDK çağrılarını planlamadan önce activate Future’ını await ile bekleyin. Tam sıralama için bkz. Flutter SDK’da çağrı sırası. |
| badRequest | 2003 | Hatalı istek. App Store entegrasyonu için gerekli 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 sorunlara işaret eder. VPN’i devre dışı bırakmayı veya mobil veriden WiFi’ye (ya da tam tersi) 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ıza işaret edebilir. |
| encodingFailed | 2009 | Bu hata, istek kodlamasının başarısız olduğunu gösterir. |
| analyticsDisabled | 3000 | Devre dışı bıraktığınız için analytics olaylarını işleyemiyoruz. |
| wrongParam | 3001 | Bu hata, bazı parametrelerinizin doğru olmadığını gösterir. Adapty paywall builder kullanıyorsanız ve bu hata nedeniyle paywall görüntüleyemiyorsanız, paywall builder’da Show on device seçeneğini açın. Bu 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ştirildi. Bu durum, Adapty().identify hâlâ devam ederken bir metod çağrıldığında gerçekleşir — devam eden çağrı, değiştirilmek üzere olan bir profile denk gelir ve SDK bunu reddeder. Herhangi bir kullanıcı işlemi çağrısından önce identify’ı await ile bekleyin. Bkz. Flutter SDK’da çağrı sırası. |
| unsupportedData | 3007 | Bu hata, veri formatının SDK tarafından desteklenmediğini gösterir. |
| persistingDataError | 3100 | Veri kaydedilirken bir hata oluştu. |
| fetchTimeoutError | 3101 | Bu hata, fetch işleminin zaman aşımına uğradığını gösterir. |
Diğer sorunlar
Henüz bir çözüm bulamadıysanız, sonraki adımlar şunlar olabilir:
- SDK’yı en son sürüme yükseltin: Daha kararlı olan ve bilinen sorunlara yönelik düzeltmeler içeren en son SDK sürümlerine yükseltmenizi her zaman tavsiye ederiz.
- 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 ya da yükseltme sorunu çözmediyse destek ekibimizle iletişime geçin. Ayrıntılı günlük kaydını etkinleştirip günlükleri ekiple paylaşırsanız sorununuz daha hızlı çözülecektir. İlgili kod parçacıklarını da ekleyebilirsiniz.