SDK React Native + Expo
Le SDK officiel Pionne pour React Native et Expo. Auto-capture des erreurs JS, natives iOS/Android, et Hermes. Compatible Expo managed et bare workflow.
Version actuelle : 0.8.6
Installation
Section intitulée « Installation »npm install @pionne/react-nativeInit basique
Section intitulée « Init basique »import { Pionne } from '@pionne/react-native';
Pionne.init({ token: 'pio_live_…' });Désactiver le SDK en dev
Section intitulée « Désactiver le SDK en dev »Pour ne pas polluer ton dashboard prod avec les events que tu génères en Metro / Expo Go (et éviter le casse-tête du bundle ID mismatch entre host.exp.Exponent et le bundle pinné sur ton projet), passe enableInDev: false :
Pionne.init({ token: 'pio_live_…', enableInDev: false, // no-op en __DEV__});En __DEV__, l’init log [Pionne] Skipped in __DEV__ (enableInDev=false) et toutes les méthodes (captureException, captureMessage, setUser, etc.) deviennent silencieuses pour la durée du process. Aucun handler global installé, aucune session ouverte. Comportement par défaut : enableInDev: true (rétrocompat).
Capture des crashs natifs
Section intitulée « Capture des crashs natifs »Les handlers JS (ErrorUtils, le tracker de promesses, l’Error Boundary) ne voient que les crashs du thread JS. Un crash natif détruit tout le process, VM JS comprise, avant qu’aucun JS ne tourne. Pionne s’appuie donc sur l’OS pour les enregistrer et les rejoue en événements fatal au lancement suivant.
Activé par défaut. Pour désactiver :
Pionne.init({ token: 'pio_live_…', captureNativeCrashes: false,});Ce qui est capturé sur iOS 14+
Section intitulée « Ce qui est capturé sur iOS 14+ »Via MetricKit (MXCrashDiagnostic) :
NSExceptionObjective-C / Swift — nom de l’exception + message composé sur iOS 17+ (ex.NSInvalidArgumentException)- Signaux —
SIGSEGV,SIGABRT,SIGBUS,SIGILL,SIGFPE,SIGTRAP - Kills mémoire (OOM) et terminations watchdog (
0x8badf00d) - Call stack tree — frames système symbolisées par l’OS ; frames app sous forme
binaryName 0xADDRESS(pas de pipeline dSYM)
Ce qui est capturé sur Android 11+
Section intitulée « Ce qui est capturé sur Android 11+ »Via ActivityManager.getHistoricalProcessExitReasons() :
REASON_CRASH— exception JVM non catchéeREASON_CRASH_NATIVE— crash natif NDK (C/C++)REASON_ANR— Application Not Responding (avec la trace ANR)REASON_LOW_MEMORY— kill mémoire (OOM)
Les crashs natifs arrivent au lancement qui suit le crash (l’OS les livre post-mortem), avec mechanism.type = "native" et un tag native.source (metrickit sur iOS, app_exit sur Android).
Fix de stabilité iOS 26 + new architecture
Section intitulée « Fix de stabilité iOS 26 + new architecture »Sur la surface très précise iOS 26 + new architecture en production, React Native re-throw les erreurs JS via un void TurboModule sur une dispatch queue asynchrone, que le runtime fait avorter en SIGABRT non rattrapable (RN #54859). Depuis 0.9.1, le SDK détecte cette combinaison précise et supprime le re-throw après avoir capturé l’event — l’app hôte continue de tourner. Tous les autres runtimes (iOS plus anciens, Android, old architecture, mode dev) gardent le comportement React Native par défaut.
Documentation détaillée
Section intitulée « Documentation détaillée »Cette page est un alias vers la documentation principale du SDK React Native. Les guides complets sont déjà disponibles :
- Quickstart — 5 minutes pour intégrer Pionne
- Installation — setup avancé, Expo vs bare
- API du SDK — référence complète des méthodes
- Auto-capture — ce qui est capturé sans config
- Breadcrumbs — fil d’Ariane des actions
- Error Boundary — composant React de capture
- Screenshots — capture visuelle au crash
- PII — scrubbing des données personnelles
- Source maps — symbolication des stacks Hermes
Géographie (opt-in)
Section intitulée « Géographie (opt-in) »Pionne peut afficher la ville/région/pays approximatif de l’utilisateur sur chaque event. Désactivé par défaut pour la vie privée :
Pionne.init({ token: 'pio_live_…', sendGeography: true, // ← opt-in});Au boot, un seul appel HTTP vers https://ipapi.co/json/ (timeout 4 s) résout contexts.geo = { city, region, country, country_code } et le résultat est attaché à tous les events suivants. Aucune permission iOS/Android requise (pas de GPS, juste l’inverse-DNS de l’IP). Si le lookup échoue, le SDK continue sans géo.
Tu peux remplacer le fournisseur via geographyEndpoint: '…' — toute URL renvoyant un JSON { city, region, country, country_code } fonctionne.
Anti-token-theft
Section intitulée « Anti-token-theft »Le bundle ID (com.tonapp.app) est auto-pinné côté serveur au premier event reçu. Si quelqu’un vole ton token et l’utilise depuis une autre app, les events sont rejetés automatiquement.
Voir aussi
Section intitulée « Voir aussi »- SDK Web — pour les apps browser pures
- SDK Node.js — pour les backends Node
- API Ingest — protocole HTTP brut