Kotlin Multiplatform SDK'da hataları yönetme
Bu sayfa, Adapty Kotlin Multiplatform SDK’sındaki hata yönetimini ele almaktadır.
Hata yönetiminin temelleri
Adapty SDK metodları, AdaptyResult döndüren suspend fonksiyonlardır; bu sonuç ya bir başarı ya da bir hata içerir. Her iki durumu onSuccess ve onError ile ele alın:
Adapty.getProfile()
.onSuccess { profile ->
// Handle success
}
.onError { error ->
// Handle error
println("Adapty error: ${error.message}")
}
AdaptyResult bir sealed class’tır, dolayısıyla sonuca doğrudan bir değer olarak ihtiyaç duyduğunuzda onun üzerinde de dallanabilirsiniz:
when (val result = Adapty.getProfile()) {
is AdaptyResult.Success -> {
val profile = result.value
// Handle success
}
is AdaptyResult.Error -> {
val error = result.error
// Handle error
}
}
Yaygın hata kodları
AdaptyError.code, bir sayı değil AdaptyErrorCode enum değeridir; bu nedenle sayısal kodla değil, enum sabitiyle karşılaştırın. Aşağıdaki sayılar yalnızca bir log satırında veya destek talebinde genellikle bu şekilde göründükleri için verilmiştir.
| Hata kodu | Numara | Açıklama | Çözüm |
|---|---|---|---|
AdaptyErrorCode.NO_PRODUCT_IDS_FOUND | 1000 | Paywall’daki ürünlerin hiçbiri mağazada mevcut değil. | Bkz. Kod-1000 noProductIDsFound hatası için düzeltme. |
AdaptyErrorCode.CANT_MAKE_PAYMENTS | 1003 | Bu cihazda uygulama içi satın almalar izin verilmiyor. | Bkz. Kod-1003 cantMakePayments hatası için düzeltme. |
AdaptyErrorCode.PRODUCT_NOT_FOUND | 22 | Satın alınmak istenen ürün mağazada mevcut değil. | Ürünün hem mağazada hem de Adapty Kontrol Paneli’nde yapılandırıldığını kontrol edin. |
AdaptyErrorCode.NETWORK_FAILED | 2005 | Ağ isteği başarısız oldu. | Kullanıcıdan bağlantısını kontrol etmesini isteyin veya çağrıyı yeniden deneyin. |
AdaptyErrorCode.ADAPTY_NOT_INITIALIZED | 20 | Çağrıdan önce SDK etkinleştirilmedi. | Diğer SDK çağrılarından önce Adapty.activate tamamlanana kadar bekleyin. |
AdaptyErrorCode kodlarının tam listesi için SDK modelleri referansına bakın.
Belirli hataları ele alma
Ağ hataları
Adapty.getFlow("YOUR_PLACEMENT_ID")
.onSuccess { flow ->
// Use the flow
}
.onError { error ->
when (error.code) {
AdaptyErrorCode.NETWORK_FAILED -> {
// Network error - show offline message
showOfflineMessage()
}
else -> {
showErrorMessage(error.message)
}
}
}
Satın alma hataları
makePurchase, hataları ve sonuçları ayrı ayrı bildirir. Bir AdaptyResult.Error, çağrının başarısız olduğu anlamına gelir; başarılı bir sonuç ise kullanıcının satın almayı tamamlayıp tamamlamadığını, iptal edip etmediğini veya beklemede bırakıp bırakmadığını bildiren bir AdaptyPurchaseResult döndürür:
Adapty.makePurchase(product)
.onSuccess { purchaseResult ->
when (purchaseResult) {
is AdaptyPurchaseResult.Success -> showSuccessMessage()
AdaptyPurchaseResult.UserCanceled -> {
// The user dismissed the store sheet — not an error
}
AdaptyPurchaseResult.Pending -> {
// Awaiting an out-of-band payment, such as a prepaid plan
showPendingMessage()
}
}
}
.onError { error ->
when (error.code) {
AdaptyErrorCode.CANT_MAKE_PAYMENTS -> showPaymentNotAvailableMessage()
AdaptyErrorCode.PRODUCT_NOT_FOUND -> showProductNotAvailableMessage()
else -> showPurchaseErrorMessage(error.message)
}
}
Hata kurtarma stratejileri
Ağ hatalarında yeniden deneme
SDK metotları suspend fonksiyon olduğundan, yeniden deneme döngüsü denemeler arasında delay bulunan sıradan bir döngüdür:
suspend fun getFlowWithRetry(placementId: String, maxRetries: Int = 3): AdaptyFlow? {
repeat(maxRetries) { attempt ->
when (val result = Adapty.getFlow(placementId)) {
is AdaptyResult.Success -> return result.value
is AdaptyResult.Error -> {
if (result.error.code != AdaptyErrorCode.NETWORK_FAILED) {
showErrorMessage(result.error.message)
return null
}
delay(1000L * (attempt + 1))
}
}
}
return null
}
Önbelleğe alınan verilere geri dön
Flow’ları kendiniz önbelleğe almanıza gerek yok. Adapty SDK bunları cihazda önbelleğe alır ve ağ bağlantısı kesildiğinde önbellekteki kopyayı döndürür; kendi önbellek mekanizmanızı yazmak yerine bir fetch policy belirtin:
Adapty.getFlow(
placementId = "YOUR_PLACEMENT_ID",
fetchPolicy = AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad
)
.onSuccess { flow ->
// Use the flow
}
.onError { error ->
showErrorMessage(error.message)
}
ReturnCacheDataElseLoad ile kararsız bir bağlantısı olan kullanıcılar, en güncel sürümü görememe pahasına flow’a daha hızlı ulaşır. Ağ veya önbellek herhangi bir flow üretemezse SDK, uygulamayla birlikte paketlediğiniz yedek dosyaya geri döner.
Sonraki adımlar
- Code-1000 noProductIDsFound hatasının çözümü
- Code-1003 cantMakePayments hatasının çözümü
- Tam API referansı - Eksiksiz SDK belgeleri