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’erreur | Numéro | Description | Solution |
|---|---|---|---|
AdaptyErrorCode.NO_PRODUCT_IDS_FOUND | 1000 | Aucun des produits du paywall n’est disponible dans le store. | Voir Correction de l’erreur Code-1000 noProductIDsFound. |
AdaptyErrorCode.CANT_MAKE_PAYMENTS | 1003 | Les achats intégrés ne sont pas autorisés sur cet appareil. | Voir Correction de l’erreur Code-1003 cantMakePayments. |
AdaptyErrorCode.PRODUCT_NOT_FOUND | 22 | Le 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_FAILED | 2005 | La requête réseau a échoué. | Demandez à l’utilisateur de vérifier sa connexion, ou relancez l’appel. |
AdaptyErrorCode.ADAPTY_NOT_INITIALIZED | 20 | Le 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
- Correction de l’erreur Code-1000 noProductIDsFound
- Correction de l’erreur Code-1003 cantMakePayments
- Référence API complète - Documentation complète du SDK