Guide d'intégration : SDK Android
@bazik/kyc-sdk affiche tout le parcours dans votre application React Native : consentement, photo de la CIN ou du passeport, selfie avec des défis guidés en créole, résultat. Les écrans sont en français. Le serveur Bazik lit la pièce, consulte le registre et décide.
Prérequis
- React Native « nu » (sans Expo), nouvelle architecture.
- React 19 ou plus.
- Android
minSdkVersion24.
Installer
npm install @bazik/kyc-sdk \
react-native-safe-area-context react-native-svg \
react-native-vision-camera@^5.2.4 react-native-vision-camera-face-detector@^2.1.0 \
react-native-nitro-modules react-native-nitro-image
# Facultatif, pour les consignes vocales en créole :
npm install react-native-sound@^0.13.0 @mhpdev/react-native-speech@^1.4.4
| Module | Rôle | Obligatoire |
|---|---|---|
react-native-safe-area-context, react-native-svg | mise en page, icônes | oui |
react-native-vision-camera, react-native-vision-camera-face-detector, react-native-nitro-modules, react-native-nitro-image | caméra et détection du visage (ML Kit) | oui, pour @bazik/kyc-sdk/vision |
react-native-sound, @mhpdev/react-native-speech | consignes vocales | non, seulement pour @bazik/kyc-sdk/voice |
Permission de la caméra
Dans AndroidManifest.xml :
<uses-permission android:name="android.permission.CAMERA" />
Le SDK demande lui-même la permission avant la première photo.
Police
Les écrans utilisent Plus Jakarta Sans, livrée avec le paquet. Déclarez-la dans react-native.config.js, puis lancez npx react-native-asset :
module.exports = {
assets: ['./node_modules/@bazik/kyc-sdk/assets/fonts'],
};
Le parcours en trois temps
1. Votre backend ouvre le dossier
La clé API ne va jamais dans l'application. Votre backend ouvre le dossier (voir le guide de l'API) et renvoie access_token à l'application. Le jeton vaut pour ce seul dossier, pendant 30 minutes.
2. L'application lance le parcours
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { BazikKyc, createHttpApi, type DeviceIntegrity } from '@bazik/kyc-sdk';
import { visionCamera } from '@bazik/kyc-sdk/vision';
import { kreyolVoice } from '@bazik/kyc-sdk/voice'; // facultatif
// Pas encore d'implémentation en 0.1 : voir « Attestation ».
const integrity: DeviceIntegrity = { attest: async () => '', sign: async () => '' };
const api = createHttpApi({
baseUrl: 'https://bazik.id',
getAccessToken: async () => jetonDuDossier, // reçu de votre backend
integrity,
});
export function EcranKyc() {
return (
<SafeAreaProvider>
<BazikKyc
api={api}
camera={visionCamera}
voice={kreyolVoice}
onComplete={(outcome) => {
// 'verified' | 'manual_review' : pour l'affichage seulement.
}}
onExit={() => {
// La personne a fermé le parcours avant la fin.
}}
/>
</SafeAreaProvider>
);
}
Créez api une fois par dossier, pas à chaque rendu.
3. Votre backend lit la décision
Le résultat que reçoit l'application ne fait pas foi. Votre backend lit la décision avec GET /v1/cases/{case_id} (voir le guide de l'API).
Référence
<BazikKyc>
| Propriété | Type | Rôle |
|---|---|---|
api | KycApi | le serveur : createHttpApi(…) |
camera | CameraKit | visionCamera sur un téléphone |
voice | VoiceGuide | facultatif : kreyolVoice dit les consignes du selfie ; sans lui, le parcours est silencieux |
onComplete | (outcome) => void | la personne quitte l'écran de résultat |
onExit | () => void | la personne ferme le parcours avant la fin |
onPrivacyPolicy | () => void | facultatif : affiche « Lire la politique de confidentialité » au consentement |
onContactSupport | () => void | facultatif : affiche « Contacter l'assistance » sur l'écran de revue |
debug | boolean | montre les mesures du détecteur pendant le selfie : jamais en production |
Sur Android, le parcours prend le bouton retour : il revient d'une étape, appelle onExit depuis l'accueil et onComplete depuis le résultat.
createHttpApi(options)
| Option | Rôle |
|---|---|
baseUrl | adresse du serveur Bazik ID, sans / final |
getAccessToken() | rend le jeton du dossier ; appelé avant chaque requête |
integrity | attestation de l'appareil, voir plus bas |
timeoutMs | durée maximale d'une requête : 45 s par défaut (une face de la pièce se lit en une dizaine de secondes) |
Points d'entrée
| Import | Contenu |
|---|---|
@bazik/kyc-sdk | BazikKyc, createHttpApi et les types ; aucun module natif de caméra ni de voix |
@bazik/kyc-sdk/vision | visionCamera (VisionCamera + ML Kit) |
@bazik/kyc-sdk/voice | kreyolVoice : enregistrements en créole, et la voix du téléphone pour les consignes pas encore enregistrées |
createMockApi et simulatedCamera servent aux démonstrations et aux simulateurs : ils ne vérifient rien, jamais en production.
Attestation
integrity doit prouver que l'application tourne sur un vrai appareil (Play Integrity) et signer la capture. La version 0.1 n'en livre pas d'implémentation : un serveur de production refuse alors les sessions sans attestation vérifiée, et chaque dossier part en revue manuelle. La personne voit l'écran de revue, jamais un refus.
Limites de la version 0.1
- Attestation : pas d'implémentation de
DeviceIntegrity, voir ci-dessus. - iOS : pas encore testé.
- Défis du selfie : les seuils restent à calibrer sur davantage de téléphones.
- Voix : « Souri » et « Vin pi pre » n'ont pas encore d'enregistrement ; la voix française du téléphone les lit.