---
title: "Handle errors in React Native SDK"
description: "Handle errors in React Native SDK."
---

Chaque erreur retournée par le SDK est un `AdaptyErrorCode`. Voici un exemple :

:::tip
**Activez les logs verbeux avant de déboguer.** La plupart des `AdaptyError`s encapsulent une erreur sous-jacente de StoreKit, Play Billing, réseau ou backend. Avec les logs verbeux activés (`adapty.setLogLevel('verbose')` — voir Journalisation pour [RN pur](sdk-installation-react-native-pure#logging) ou [Expo](sdk-installation-react-native-expo#logging)), l'erreur encapsulée est affichée dans la console, ce qui indique généralement la cause réelle.
:::

:::important
Si ces solutions ne résolvent pas votre problème, consultez la section [Autres problèmes](#other-issues) pour connaître les étapes à suivre avant de contacter le support et nous aider à vous assister plus efficacement.
:::

```typescript showLineNumbers
try {
  const params: MakePurchaseParamsInput = {};
  await adapty.makePurchase(product, params);
} catch (error) {
  if (
    error instanceof AdaptyError &&
    error.adaptyCode === getErrorCode(ErrorCode['2'])
  ) {
    // payment cancelled
  }
}
```

## Codes StoreKit système \{#system-storekit-codes\}

| Erreur | Code | Solution |
|-----|----|-----------|
| [unknown](https://developer.apple.com/documentation/storekit/skerror/code/unknown)                                                         | 0    | Code d'erreur indiquant qu'une erreur inconnue ou inattendue s'est produite. <br/> Réessayez ou consultez la section [Autres problèmes](#other-issues).                                                                                                                                                                                                                                                                                                                   |
| [clientInvalid](https://developer.apple.com/documentation/storekit/skerror/code/clientinvalid)                                             | 1    | Ce code d'erreur indique que le client n'est pas autorisé à effectuer l'action tentée.                                                                                                                                                                                                                                                                                                                                                           |
| [paymentCancelled](https://developer.apple.com/documentation/storekit/skerror/code/paymentcancelled)                                       | 2    | <p>Ce code d'erreur indique que l'utilisateur a annulé une demande de paiement.</p><p>Aucune action n'est requise, mais en termes de logique métier, vous pouvez proposer une réduction à votre utilisateur ou lui rappeler plus tard.</p>                                                                                                                                                                                                                                             |
| [paymentInvalid](https://developer.apple.com/documentation/storekit/skerror/code/paymentinvalid)                                           | 3    | Cette erreur indique que l'un des paramètres de paiement n'a pas été reconnu par l'App Store.                                                                                                                                                                                                                                                                                                                                                        |
| [paymentNotAllowed](https://developer.apple.com/documentation/storekit/skerror/code/paymentnotallowed)                                     | 4    | Ce code d'erreur indique que l'utilisateur n'est pas autorisé à valider des paiements.                                                                                                                                                                                                                                                                                                                                                       |
| [storeProductNotAvailable](https://developer.apple.com/documentation/storekit/skerror/code/storeproductnotavailable)                       | 5    | Ce code d'erreur indique que le produit demandé n'est pas disponible dans le store. <br/>  Essayez de réinstaller l'application.                                                                                                                                                                                                                                                                                                                               |
| [cloudServicePermissionDenied](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicepermissiondenied)               | 6    | Ce code d'erreur indique que l'utilisateur n'a pas autorisé l'accès aux informations du service Cloud.                                                                                                                                                                                                                                                                                                                                                        |
| [cloudServiceNetworkConnectionFailed](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicenetworkconnectionfailed) | 7    | Ce code d'erreur indique que l'appareil n'a pas pu se connecter au réseau.                                                                                                                                                                                                                                                                                                                                                                         |
| [cloudServiceRevoked](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicerevoked/)                                | 8    | Ce code d'erreur indique que l'utilisateur a révoqué l'autorisation d'utiliser ce service Cloud.                                                                                                                                                                                                                                                                                                                                                           |
| [privacyAcknowledgementRequired](https://developer.apple.com/documentation/storekit/skerror/code/privacyacknowledgementrequired)           | 9    | Ce code d'erreur indique que l'utilisateur n'a pas encore accepté la politique de confidentialité d'Apple.                                                                                                                                                                                                                                                                                                                                                            |
| [unauthorizedRequestData](https://developer.apple.com/documentation/storekit/skerror/code/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](https://developer.apple.com/documentation/storekit/skerror/code/invalidofferidentifier)                           | 11   | <p>L'[`identifiant`](https://developer.apple.com/documentation/storekit/skpaymentdiscount/identifier) 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.</p><p>Assurez-vous de configurer les offres souhaitées dans AppStore Connect et de transmettre un identifiant d'offre valide.</p>                                                                                           |
| [invalidSignature](https://developer.apple.com/documentation/storekit/skerror/code/invalidsignature)                                       | 12   | Ce code d'erreur indique que la signature dans une réduction de paiement n'est pas valide.                                                                                                                                                                                                                                                                                                                                                                    |
| [missingOfferParams](https://developer.apple.com/documentation/storekit/skerror/code/missingofferparams)                                   | 13   | Ce code d'erreur indique que des paramètres sont manquants dans une réduction de paiement.                                                                                                                                                                                                                                                                                                                                                        |
| [invalidOfferPrice](https://developer.apple.com/documentation/storekit/skerror/code/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 \{#custom-android-codes\}

| 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](sdk-installation-reactnative). |
| productNotFound | 22 | Cette erreur indique que le produit demandé pour l'achat n'est pas disponible dans le store. |
| invalidJson | 23 | Le JSON du paywall n'est pas valide. Corrigez-le dans l'Adapty Dashboard. Consultez la rubrique [Personnaliser le paywall avec Remote Config](customize-paywall-with-remote-config) pour plus de détails. |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | L'abonnement d'origine à renouveler est introuvable. |
| pendingPurchase | 25 | Cette erreur indique que l'état de l'achat est en attente plutôt qu'acheté. Consultez la page [Gestion des transactions en attente](https://developer.android.com/google/play/billing/integrate#pending) dans la documentation Android Developer pour plus de détails. |
| billingServiceTimeout | 97 | Cette erreur indique que la requête a atteint le délai d'attente maximal avant que Google Play puisse répondre. Cela peut être causé, par exemple, par 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 | <p>Cette erreur indique qu'une erreur de facturation utilisateur s'est produite pendant le processus d'achat. Voici des exemples de situations pouvant provoquer cette erreur :</p><p></p><p>1\. L'application Play Store sur l'appareil de l'utilisateur est obsolète.</p><p>2. L'utilisateur se trouve dans un pays non pris en charge.</p><p>3. L'utilisateur est un utilisateur d'entreprise, et son administrateur a désactivé les achats pour les utilisateurs.</p><p>4. Google Play n'est pas en mesure de débiter le moyen de paiement de l'utilisateur. Par exemple, la carte de crédit de l'utilisateur a peut-être expiré.</p><p>5. L'utilisateur n'est pas connecté à l'application Play Store.</p> |
| developerError | 105 | Il s'agit d'une erreur fatale indiquant que vous utilisez incorrectement une API. |
| 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 |

## Codes StoreKit personnalisés \{#custom-storekit-codes\}

| Erreur | Code | Solution |
|-----|----|-----------|
| noProductIDsFound | 1000 | <p>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.</p><p>Si vous rencontrez cette erreur, suivez les étapes de la section [Correction de l'erreur Code-1000 `noProductIDsFound`](InvalidProductIdentifiers-react-native).</p> |
| productRequestFailed | 1002 | <p>Impossible de récupérer les produits disponibles pour le moment. Cause possible :</p><p></p><p>- Aucun cache n'a encore été créé et il n'y a pas de connexion Internet en même temps.</p> |
| cantMakePayments | 1003 | Les achats intégrés ne sont pas autorisés sur cet appareil. Consultez le [guide](cantMakePayments-react-native) de dépannage. |
| noPurchasesToRestore | 1004 | Cette erreur indique que Google Play n'a pas trouvé l'achat à restaurer. |
| cantReadReceipt | 1005 | <p>Aucun reçu valide n'est disponible sur l'appareil. Cela peut poser problème lors des tests en sandbox.</p><p>Aucune action n'est requise, mais en termes de logique métier, vous pouvez proposer une réduction à votre utilisateur ou lui rappeler plus tard.</p> |
| productPurchaseFailed | 1006 | L'achat du produit a échoué. Cela 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 pouvez pas identifier une raison précise, essayez un nouveau [profil sandbox](test-purchases-in-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é. |

## Codes réseau personnalisés \{#custom-network-codes\}

| Erreur                | Code | Solution                                                                                                                                                                                                                                                                                                                                                                                                                        |
| :------------------- | :--- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| notActivated   | 2002 | Le SDK Adapty n'est pas activé. <br/> Ce problème survient généralement lorsqu'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 sur appareil réel est différent. Utilisez `await` sur `activate` avant de planifier tout autre appel SDK. Voir [Ordre des appels dans le SDK React Native](react-native-sdk-call-order) pour la séquence complète. |
| badRequest     | 2003 | Requête incorrecte. <br/> Assurez-vous d'avoir effectué toutes les étapes nécessaires pour [intégrer l'App Store](app-store-connection-configuration).                                                                                                                                                                                                                                                                                           |
| serverError    | 2004 | Erreur serveur. <br/> Réessayez après un certain temps. Si le problème n'est pas résolu, contactez l'équipe support Adapty.                                                                                                                                                                                                                                                                                                                      |
| networkFailed  | 2005 | Cette erreur indique des problèmes de connexion réseau sur l'appareil de l'utilisateur. <br/> 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é. <br/> 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é.                                                                                                                                                                                                                                                                                                                                                                                 |
| missingURL     | 2010 | L'URL demandée est nil.                                                                                                                                                                                                                                                                                                                                                                                                          |
| analyticsDisabled    | 3000 | Nous ne pouvons pas gérer les événements d'analytics, car vous avez [désactivé cette option](analytics-integration#disabling-external-analytics-for-a-specific-customer).                                                                                                                                                                                                                                                                                         |
| wrongParam           | 3001 | Cette erreur indique que certains de vos paramètres ne sont pas corrects. <br/> Si vous utilisez le Paywall Builder d'Adapty et ne pouvez pas afficher un paywall à cause de cette erreur, activez **Show on device** dans le Paywall Builder.<br/> Une autre cause possible est que la version du fichier [paywall de secours](fallback-paywalls) 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. <br/> Cela se produit lorsqu'une méthode est appelée pendant qu'`adapty.identify` est toujours en cours — l'appel en cours 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 des appels dans le SDK React Native](react-native-sdk-call-order).                                                                                                                                                                                          |
| 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 la sauvegarde des données.                                                                                                                                                                                                                                                                                                                                                                                 |
| fetchTimeoutError    | 3101 | Cette erreur indique que l'opération de récupération a expiré.                                                                                                                                                                                                                                                                                                                                                           |

## Autres problèmes \{#other-issues\}

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 aux dernières versions du SDK, car elles sont plus stables et incluent des corrections pour les problèmes connus.
- **Contacter l'équipe support ou obtenir l'aide de la communauté** sur le [forum de support](https://adapty.featurebase.app/).
- **Contacter l'équipe support via [support@adapty.io](mailto: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 verbeux](sdk-installation-reactnative) et partagez les logs avec l'équipe. Vous pouvez également joindre des extraits de code pertinents.