Gérer les erreurs dans le SDK Kotlin Multiplatform

Cette page couvre la gestion des erreurs dans le SDK Adapty Kotlin Multiplatform.

Principes de base de la gestion des erreurs

Les méthodes du SDK Adapty sont des fonctions suspendues qui retournent un AdaptyResult, qui est soit un succès, soit une erreur. Gérez les deux cas avec onSuccess et onError :


Adapty.getProfile()
    .onSuccess { profile ->
        // Handle success
    }
    .onError { error ->
        // Handle error
        println("Adapty error: ${error.message}")
    }

AdaptyResult est une classe scellée, vous pouvez donc aussi vous brancher directement dessus lorsque vous avez besoin du résultat comme valeur :


when (val result = Adapty.getProfile()) {
    is AdaptyResult.Success -> {
        val profile = result.value
        // Handle success
    }
    is AdaptyResult.Error -> {
        val error = result.error
        // Handle error
    }
}

Codes d’erreur courants

AdaptyError.code est une valeur de l’enum AdaptyErrorCode, pas un nombre — comparez-la avec la constante de l’enum, pas avec le code numérique. Les numéros ci-dessous sont indiqués uniquement parce qu’ils apparaissent généralement dans les lignes de log ou les tickets de support.

Code d’erreurNuméroDescriptionSolution
AdaptyErrorCode.NO_PRODUCT_IDS_FOUND1000Aucun des produits du paywall n’est disponible dans le store.Voir Correction de l’erreur Code-1000 noProductIDsFound.
AdaptyErrorCode.CANT_MAKE_PAYMENTS1003Les achats intégrés ne sont pas autorisés sur cet appareil.Voir Correction de l’erreur Code-1003 cantMakePayments.
AdaptyErrorCode.PRODUCT_NOT_FOUND22Le produit demandé pour l’achat n’est pas disponible dans le store.Vérifiez que le produit est configuré dans le store et dans l’Adapty Dashboard.
AdaptyErrorCode.NETWORK_FAILED2005La requête réseau a échoué.Demandez à l’utilisateur de vérifier sa connexion, ou relancez l’appel.
AdaptyErrorCode.ADAPTY_NOT_INITIALIZED20Le SDK n’a pas été activé avant l’appel.Attendez que Adapty.activate soit terminé avant tout autre appel au SDK.

Pour la liste complète des codes, voir AdaptyErrorCode dans la référence des modèles SDK.

Gérer des erreurs spécifiques

Erreurs réseau


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)
            }
        }
    }

Erreurs d’achat

makePurchase rapporte les échecs et les résultats séparément. Une AdaptyResult.Error signifie que l’appel a échoué ; un résultat réussi retourne un AdaptyPurchaseResult qui indique si l’utilisateur a finalisé l’achat, l’a annulé ou l’a laissé en attente :


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)
        }
    }

Stratégies de récupération d’erreurs

Réessai en cas d’erreurs réseau

Comme les méthodes du SDK sont des fonctions suspendues, une boucle de réessai est simplement une boucle avec un delay entre les tentatives :


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
}

Utiliser les données en cache en cas d’échec

Inutile de mettre les flows en cache vous-même. Le SDK Adapty s’en charge sur l’appareil et renvoie la copie en cache en cas d’échec réseau — passez simplement une politique de récupération plutôt que d’écrire votre propre cache :


Adapty.getFlow(
    placementId = "YOUR_PLACEMENT_ID",
    fetchPolicy = AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad
)
    .onSuccess { flow ->
        // Use the flow
    }
    .onError { error ->
        showErrorMessage(error.message)
    }

Avec ReturnCacheDataElseLoad, les utilisateurs sur une connexion instable obtiennent un flow plus rapidement, au prix de ne pas voir forcément la dernière version. Si ni le réseau ni le cache ne renvoient de flow, le SDK utilise le fichier de secours fourni avec l’application.

Étapes suivantes