Gérer les erreurs dans le SDK React Native
Chaque erreur renvoyée par le SDK est un AdaptyErrorCode. Voici un exemple :
Activez les logs verbeux avant de déboguer. La plupart des AdaptyErrors encapsulent une erreur sous-jacente de StoreKit, Play Billing, réseau ou backend. Avec les logs verbeux activés (adapty.setLogLevel('verbose') — voir Logging pour RN pur ou Expo), cette erreur encapsulée est affichée dans la console, ce qui révèle généralement la cause réelle.
Si ces solutions ne règlent pas votre problème, consultez Autres problèmes pour les étapes à suivre avant de contacter le support afin de nous aider à vous assister plus efficacement.
try {
const params: MakePurchaseParamsInput = {};
await adapty.makePurchase(product, params);
} catch (error) {
if (
error instanceof AdaptyError &&
error.adaptyCode === getErrorCode('cantMakePayments')
) {
// Les achats intégrés ne sont pas autorisés sur cet appareil
}
}
error.adaptyCode est un nombre, à comparer avec un nombre : soit un littéral (1003), soit le résultat de getErrorCode('<name>'). ErrorCode fonctionne dans l’autre sens — du nombre vers son nom — donc utilisez-le pour la journalisation, pas pour la comparaison.
Un achat annulé par l’utilisateur n’est pas une erreur. makePurchase se résout avec un AdaptyPurchaseResult dont le type est 'user_cancelled' — voir Effectuer des achats.
Codes système StoreKit
| Erreur | Code | Solution |
|---|---|---|
| unknown | 0 | Code d’erreur indiquant qu’une erreur inconnue ou inattendue s’est produite. Réessayez ou consultez la section Autres problèmes. |
| clientInvalid | 1 | Ce code d’erreur indique que le client n’est pas autorisé à effectuer l’action tentée. |
| paymentCancelled | 2 | Ce code d’erreur indique que l’utilisateur a annulé une demande de paiement. Aucune action n’est requise, mais sur le plan de la logique métier, vous pouvez proposer une remise à votre utilisateur ou lui rappeler l’offre plus tard. |
| paymentInvalid | 3 | Cette erreur indique que l’un des paramètres de paiement n’a pas été reconnu par l’App Store. |
| paymentNotAllowed | 4 | Ce code d’erreur indique que l’utilisateur n’est pas autorisé à valider des paiements. |
| storeProductNotAvailable | 5 | Ce code d’erreur indique que le produit demandé n’est pas disponible dans le store. Essayez de réinstaller l’application. |
| cloudServicePermissionDenied | 6 | Ce code d’erreur indique que l’utilisateur n’a pas autorisé l’accès aux informations du service Cloud. |
| cloudServiceNetworkConnectionFailed | 7 | Ce code d’erreur indique que l’appareil n’a pas pu se connecter au réseau. |
| cloudServiceRevoked | 8 | Ce code d’erreur indique que l’utilisateur a révoqué l’autorisation d’utiliser ce service Cloud. |
| privacyAcknowledgementRequired | 9 | Ce code d’erreur indique que l’utilisateur n’a pas encore accepté la politique de confidentialité d’Apple. |
| unauthorizedRequestData | 10 | Ce code d’erreur indique que l’application tente d’utiliser une propriété pour laquelle elle ne dispose pas des droits requis. |
| invalidOfferIdentifier | 11 | L’ Assurez-vous de configurer les offres souhaitées dans AppStore Connect et de transmettre un identifiant d’offre valide. |
| invalidSignature | 12 | Ce code d’erreur indique que la signature dans une remise de paiement n’est pas valide. |
| missingOfferParams | 13 | Ce code d’erreur indique que des paramètres sont manquants dans une remise de paiement. |
| invalidOfferPrice | 14 | Ce code d’erreur indique que le prix que vous avez spécifié dans App Store Connect n’est plus valide. Les offres doivent toujours représenter un prix réduit. |
Codes Android personnalisés
| Erreur | Code | Solution |
|---|---|---|
| adaptyNotInitialized | 20 | Vous devez configurer correctement le SDK Adapty via la méthode Adapty.activate. Découvrez comment procéder pour React Native. |
| productNotFound | 22 | Cette erreur indique que le produit demandé pour l’achat n’est pas disponible dans le store. |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | L’abonnement d’origine à renouveler est introuvable. |
| billingServiceTimeout | 97 | Cette erreur indique que la requête a atteint le délai d’expiration maximal avant que Google Play puisse répondre. Cela peut être dû, par exemple, à un retard dans l’exécution de l’action demandée par l’appel à la bibliothèque Play Billing. |
| featureNotSupported | 98 | La fonctionnalité demandée n’est pas prise en charge par le Play Store sur l’appareil actuel. |
| billingServiceDisconnected | 99 | Cette erreur fatale indique que la connexion de l’application cliente au service Google Play Store via le BillingClient a été interrompue. |
| billingServiceUnavailable | 102 | Cette erreur transitoire indique que le service Google Play Billing est actuellement indisponible. Dans la plupart des cas, cela signifie qu’il y a un problème de connexion réseau entre l’appareil client et les services Google Play Billing. |
| billingUnavailable | 103 | Cette erreur indique qu’une erreur de facturation utilisateur s’est produite pendant le processus d’achat. Voici quelques exemples de situations où cela peut se produire : 1. L’application Play Store sur l’appareil de l’utilisateur n’est pas à jour. 2. L’utilisateur se trouve dans un pays non pris en charge. 3. L’utilisateur est un utilisateur d’entreprise et son administrateur a désactivé les achats pour les utilisateurs. 4. Google Play ne peut pas débiter le moyen de paiement de l’utilisateur. Par exemple, la carte de crédit de l’utilisateur a peut-être expiré. 5. L’utilisateur n’est pas connecté à l’application Play Store. |
| developerError | 105 | Il s’agit d’une erreur fatale indiquant que vous utilisez une API de manière incorrecte. |
| billingError | 106 | Il s’agit d’une erreur fatale indiquant un problème interne avec Google Play lui-même. |
| itemAlreadyOwned | 107 | Le produit consommable a déjà été acheté. |
| itemNotOwned | 108 | Cette erreur indique que l’action demandée sur l’article a échoué sin |
| billingNetworkError | 112 | Cette erreur indique qu’un problème de connexion réseau s’est produit entre l’appareil et les systèmes Play. |
Codes StoreKit personnalisés
| Erreur | Code | Solution |
|---|---|---|
| noProductIDsFound | 1000 | Cette erreur indique qu’aucun des produits demandés sur le paywall n’est disponible à l’achat dans l’App Store, même s’ils y sont référencés. Elle peut parfois s’accompagner d’un avertissement Si vous rencontrez cette erreur, suivez les étapes décrites dans la section Fix for Code-1000 |
| productRequestFailed | 1002 | Impossible de récupérer les produits disponibles pour le moment. Raison possible : - Aucun cache n’a encore été créé et pas de connexion internet en même temps. |
| cantMakePayments | 1003 | Les achats intégrés ne sont pas autorisés sur cet appareil. Consultez le guide de dépannage. |
| noPurchasesToRestore | 1004 | Déprécié dans Adapty React Native SDK 4.0.3 : restorePurchases() ne renvoie plus cette erreur. Lorsqu’il n’y a rien à restaurer, la méthode se résout avec le profil actuel — vérifiez donc le statut du niveau d’accès dans ce profil. Dans les versions antérieures du SDK, cette erreur indique que Google Play n’a pas trouvé d’achat à restaurer. |
| cantReadReceipt | 1005 | Aucun reçu valide n’est disponible sur l’appareil. Cela peut poser problème lors des tests en sandbox. Aucune action n’est requise, mais d’un point de vue métier, vous pouvez proposer une remise à votre utilisateur ou lui rappeler plus tard. |
| productPurchaseFailed | 1006 | L’achat du produit a échoué. Cette erreur encapsule une erreur StoreKit sous-jacente — lisez l’erreur encapsulée (ou activez les logs verbeux pour la voir dans la console) pour connaître la raison réelle. L’erreur encapsulée est 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 parvenez pas à identifier une raison précise, essayez avec un nouveau profil sandbox ; si le problème persiste, contactez le support Apple. |
| refreshReceiptFailed | 1010 | Cette erreur indique que le reçu n’a pas été reçu. Applicable uniquement à StoreKit 1. |
| receiveRestoredTransactionsFailed | 1011 | La restauration des achats a échoué. |
| billingPlanUnavailable | 1060 | iOS uniquement. Le produit ne propose pas le plan de facturation demandé sur cet appareil. Un plan avec engagement de 12 mois nécessite iOS 26.4 ou version ultérieure, ainsi qu’une application compilée avec Xcode 26.5 ou version ultérieure. Le SDK React Native 4.3.0 n’a pas de nom pour ce code, donc getErrorCode('billingPlanUnavailable') renvoie undefined : comparez error.adaptyCode avec 1060. |
Codes réseau personnalisés
| Erreur | Code | Solution |
|---|---|---|
| notActivated | 2002 | Le SDK Adapty n’est pas activé. Se produit généralement quand un écran de démarrage ou un hook d’interface 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 diffère sur un vrai appareil. Utilisez await sur activate avant de planifier tout autre appel SDK. Voir Ordre d’appel dans le SDK React Native pour la séquence complète. |
| badRequest | 2003 | Requête invalide. Assurez-vous d’avoir effectué toutes les étapes nécessaires à l’intégration avec l’App Store. |
| serverError | 2004 | Erreur serveur. Réessayez après quelques instants. Si le problème persiste, contactez l’équipe support d’Adapty. |
| networkFailed | 2005 | Cette erreur indique des problèmes de connexion réseau sur l’appareil de l’utilisateur. Essayez de désactiver le VPN ou de passer du réseau cellulaire au Wi-Fi, ou inversement. |
| decodingFailed | 2006 | Cette erreur indique que le décodage de la réponse a échoué. Vérifiez votre code et assurez-vous que les paramètres envoyés sont valides. Par exemple, cette erreur peut indiquer que vous utilisez une clé API invalide. |
| encodingFailed | 2009 | Cette erreur indique que l’encodage de la requête a échoué. |
| analyticsDisabled | 3000 | Impossible de traiter les événements d’analyse, car vous avez désactivé cette option. |
| wrongParam | 3001 | Cette erreur indique que certains de vos paramètres sont incorrects. Si vous utilisez l’ancien Paywall Builder et ne pouvez pas afficher un paywall à cause de cette erreur, activez Show on device dans ce builder. Une autre cause possible est que la version du fichier paywall de secours local ne correspond pas à la version du SDK. Téléchargez un nouveau fichier depuis le tableau de bord. |
| activateOnceError | 3005 | Il n’est pas possible d’appeler la méthode .activate plus d’une fois. |
| profileWasChanged | 3006 | Le profil utilisateur a été modifié pendant l’opération. Cela se produit quand 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 qui est sur le point d’être remplacé, et le SDK le rejette. Utilisez toujours await sur identify avant tout appel d’action utilisateur. Voir Ordre d’appel dans le SDK React Native. |
| unsupportedData | 3007 | Cette erreur indique que le format de données n’est pas pris en charge par le SDK. |
| persistingDataError | 3100 | Une erreur s’est produite lors de l’enregistrement des données. |
| fetchTimeoutError | 3101 | Cette erreur indique que l’opération de récupération a expiré. |
| operationInProgress | 3201 | Une autre opération du même type est encore en cours. Renvoyé par showStoreMessages quand un appel précédent affiche toujours des messages du store. Attendez qu’il se termine, puis réessayez. Nécessite le SDK 4.3.0 ou version ultérieure. |
| resolverFailure | 3202 | Le SDK n’a pas pu trouver la ressource nécessaire à l’opération. Renvoyé par showStoreMessages sur iOS quand aucune scène de fenêtre active au premier plan n’existe. Appelez la méthode à nouveau quand l’application est au premier plan. Nécessite le SDK 4.3.0 ou version ultérieure. |
| operationInterrupted | 9000 | Cette opération a été interrompue par le système. Réessayez l’appel. |
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 mettre à jour vers les dernières versions du SDK, car elles sont plus stables et incluent des correctifs pour les problèmes connus.
- Contacter l’équipe de support ou obtenir de l’aide auprès d’autres développeurs dans le forum de support.
- Contacter l’équipe de 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 de support. Notez que votre problème sera résolu plus rapidement si vous activez la journalisation verbeuse et partagez les logs avec l’équipe. Vous pouvez également joindre des extraits de code pertinents.