Gérer les erreurs dans le SDK iOS

Le SDK Adapty dispose de son propre wrapper pour tout type d’erreur, appelé AdaptyError. En pratique, chaque erreur renvoyée par le SDK est un AdaptyError. Il possède deux propriétés utiles : originalError et adaptyErrorCode, décrites ci-dessous.

originalError contient l’erreur d’origine si vous en avez besoin. Il peut s’agir d’une SKError, d’une NSError ou d’une Error Swift générique. Cette propriété est optionnelle, car certaines erreurs peuvent être générées directement par le SDK — par exemple, des données incohérentes ou manquantes — et ne disposent pas d’erreur d’origine autour de laquelle le wrapper a été initialement construit.

adaptyErrorCode peut être utilisé pour gérer les problèmes courants, comme :

  • des identifiants invalides
  • des erreurs réseau
  • des paiements annulés
  • des problèmes de facturation
  • un reçu invalide
  • et bien plus encore

Il est très simple de vérifier le code d’erreur et d’y réagir en conséquence.

do {
    let info = try await Adapty.makePurchase(product: product)
} catch {
    if error.adaptyErrorCode == .paymentCancelled {
        // purchase was cancelled
        // you can offer discount to your user or remind them later
    }
}

Activez les logs détaillés avant de déboguer. La plupart des AdaptyError encapsulent une erreur StoreKit, réseau ou backend sous-jacente. Avec les logs détaillés activés (Adapty.logLevel = .verbose — voir Logging), cette erreur encapsulée est affichée dans la console, ce qui révèle généralement la cause réelle. La propriété originalError est renseignée quel que soit le niveau de log — les logs détaillés permettent simplement de la faire apparaître dans la console.

Si ces solutions ne résolvent pas votre problème, consultez la section Autres problèmes pour connaître les étapes à suivre avant de contacter le support, afin de nous aider à vous assister plus efficacement.

Erreurs StoreKit

ErreurCodeSolution
unknown0Code d’erreur indiquant qu’une erreur inconnue ou inattendue s’est produite.
Réessayez ou consultez la section Autres problèmes.
clientInvalid1Ce code d’erreur indique que le client n’est pas autorisé à effectuer l’action tentée.
paymentCancelled2

Ce code d’erreur indique que l’utilisateur a annulé une demande de paiement.

Aucune action n’est requise, mais d’un point de vue métier, vous pouvez proposer une réduction à votre utilisateur ou lui rappeler plus tard.

paymentInvalid3Cette erreur indique qu’un des paramètres de paiement n’a pas été reconnu par l’App Store.
paymentNotAllowed4Ce code d’erreur indique que l’utilisateur n’est pas autorisé à valider des paiements.
storeProductNotAvailable5Ce code d’erreur indique que le produit demandé n’est pas disponible dans le store.
Essayez de réinstaller l’application.
cloudServicePermissionDenied6Ce code d’erreur indique que l’utilisateur n’a pas autorisé l’accès aux informations du service Cloud.
cloudServiceNetworkConnectionFailed7Ce code d’erreur indique que l’appareil n’a pas pu se connecter au réseau.
cloudServiceRevoked8Ce code d’erreur indique que l’utilisateur a révoqué l’autorisation d’utiliser ce service Cloud.
privacyAcknowledgementRequired9Ce code d’erreur indique que l’utilisateur n’a pas encore accepté la politique de confidentialité d’Apple.
unauthorizedRequestData10Ce code d’erreur indique que l’application tente d’utiliser une propriété pour laquelle elle ne dispose pas des droits requis.
invalidOfferIdentifier11

L’identifiant de l’offre n’est pas valide. Par exemple, vous n’avez pas configuré d’offre avec cet identifiant dans l’App Store, ou vous avez révoqué l’offre.

Assurez-vous de configurer les offres souhaitées dans App Store Connect et de transmettre un identifiant d’offre valide.

invalidSignature12Ce code d’erreur indique que la signature dans une remise de paiement n’est pas valide.
missingOfferParams13Ce code d’erreur indique que des paramètres sont manquants dans une remise de paiement.
invalidOfferPrice14Ce code d’erreur indique que le prix que vous avez spécifié dans App Store Connect n’est plus valide. Les offres doivent toujours correspondre à un prix réduit.
noProductIDsFound1000

Cette erreur indique qu’aucun des produits que vous avez demandés sur le paywall n’est disponible à l’achat dans l’App Store, même s’ils y sont répertoriés. Cette erreur peut parfois s’accompagner d’un avertissement InvalidProductIdentifiers. Si l’avertissement apparaît sans erreur, ignorez-le.

Si vous rencontrez cette erreur, suivez les étapes de la section Correction de l’erreur Code-1000 noProductIDsFound.

productRequestFailed1002Impossible de récupérer les produits disponibles pour le moment.
cantMakePayments1003Les achats intégrés ne sont pas autorisés sur cet appareil. Consultez le guide de dépannage.
cantReadReceipt1005

Aucun reçu valide n’est disponible sur l’appareil. Cela peut poser problème lors des tests en sandbox.

En sandbox, vous n’aurez pas de fichier de reçu valide tant que vous n’aurez pas effectué un achat, assurez-vous donc d’en faire un avant d’y accéder. Lors des tests en sandbox, vérifiez également que vous êtes connecté sur l’appareil avec un compte sandbox Apple valide.

productPurchaseFailed1006L’achat du produit a échoué. Cette erreur encapsule une erreur StoreKit sous-jacente — lisez originalError (ou activez les logs détaillés pour la voir dans la console) pour connaître la raison réelle. L’erreur encapsulée correspond généralement à l’un des codes StoreKit 0–14 du tableau ci-dessus — le plus souvent paymentCancelled, paymentInvalid, paymentNotAllowed ou invalidOfferPrice. Si vous ne pouvez pas identifier une raison précise, essayez un nouveau profil sandbox ; si le problème persiste, contactez le support Apple.
refreshReceiptFailed1010L’opération de rafraîchissement du reçu a échoué.
fetchSubscriptionStatusFailed1020Impossible de récupérer le statut de l’abonnement depuis l’App Store.
unknownTransactionId1030L’identifiant de transaction est inconnu.
paymentPendingError1050Le paiement est actuellement en attente.

Erreurs réseau

ErreurCodeSolution
notActivated2002Le SDK Adapty n’est pas activé.
Cela se produit généralement lorsqu’un écran de démarrage ou un hook d’interface utilisateur précoce appelle des méthodes Adapty avant que Adapty.activate ne retourne. Le symptôme est intermittent et peut ne pas se reproduire sur simulateur, car le timing est différent sur un vrai appareil. Attendez le handler de complétion ou le résultat async d’activate avant de planifier tout autre appel SDK. Voir Ordre des appels dans le SDK iOS pour la séquence complète.
badRequest2003Requête incorrecte.
Vérifiez que vous avez bien effectué toutes les étapes nécessaires à l’intégration avec l’App Store.
serverError2004Erreur serveur.
Réessayez après un moment. Si le problème persiste, contactez l’équipe support Adapty.
networkFailed2005Cette erreur indique des problèmes de connexion réseau sur l’appareil de l’utilisateur.
Essayez de désactiver le VPN ou de basculer entre le Wi-Fi et le réseau cellulaire.
decodingFailed2006Cette erreur indique que le décodage de la réponse a échoué.
Vérifiez votre code et assurez-vous que les paramètres que vous envoyez sont valides. Par exemple, cette erreur peut indiquer que vous utilisez une clé API invalide.
encodingFailed2009Cette erreur indique que l’encodage de la requête a échoué.

Erreurs générales

ErreurCodeSolution
analyticsDisabled3000Impossible de traiter les événements analytics, car vous avez désactivé cette option.
wrongParam3001Cette erreur indique que certains de vos paramètres sont incorrects.
Si vous utilisez le Paywall Builder d’Adapty et ne pouvez pas afficher un paywall à cause de cette erreur, activez l’option Show on device dans le Paywall Builder.
Une autre cause possible est que la version du fichier fallback local ne correspond pas à la version du SDK. Téléchargez un nouveau fichier depuis le tableau de bord.
activateOnceError3005Il n’est pas possible d’appeler la méthode .activate plus d’une fois.
profileWasChanged3006Le profil utilisateur a été modifié pendant l’opération.
Cela se produit lorsqu’une méthode est appelée alors qu’Adapty.identify est encore en cours d’exécution — l’appel en vol atterrit sur un profil sur le point d’être remplacé, et le SDK le rejette. Utilisez toujours await sur identify (ou son handler de complétion) avant tout appel déclenché par une action utilisateur. Voir Ordre des appels dans le SDK iOS.
unsupportedData3007Cette erreur indique que le format de données n’est pas pris en charge par le SDK.
unidentifiedUserLogout3020Il n’est pas possible d’appeler la méthode logout pour un utilisateur non identifié.
fetchTimeoutError3101Cette erreur indique que l’opération de récupération a expiré.
operationInterrupted9000Cette opération a été interrompue par le système.

Autres problèmes

Si vous n’avez pas encore trouvé de solution, voici les prochaines étapes possibles :

  • Mettre à jour le SDK vers la dernière version : nous recommandons toujours de passer à la dernière version du SDK, car elles sont plus stables et incluent des correctifs pour les problèmes connus.
  • Contacter l’équipe support ou obtenir de l’aide auprès d’autres développeurs sur le forum de support.
  • Contacter l’équipe support via support@adapty.io ou via le chat : si vous n’êtes pas prêt à mettre à jour le SDK ou si cela n’a pas résolu le problème, contactez notre équipe support. Notez que votre problème sera résolu plus rapidement si vous activez les logs détaillés et les partagez avec l’équipe. Vous pouvez également joindre des extraits de code pertinents.