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 koduNumaraAçıklamaÇözüm
AdaptyErrorCode.NO_PRODUCT_IDS_FOUND1000Paywall’daki ürünlerin hiçbiri mağazada mevcut değil.Bkz. Kod-1000 noProductIDsFound hatası için düzeltme.
AdaptyErrorCode.CANT_MAKE_PAYMENTS1003Bu cihazda uygulama içi satın almalar izin verilmiyor.Bkz. Kod-1003 cantMakePayments hatası için düzeltme.
AdaptyErrorCode.PRODUCT_NOT_FOUND22Satı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_FAILED2005Ağ 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_INITIALIZED20Ç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