SmartComply Android SDK
Le SmartComply Android SDK offre un flux de vérification d’identité entièrement autonome pour les applications Android. Lancez une seule Activity et le SDK gère automatiquement la gestion des sessions, la sélection du pays et du type d’identifiant, la capture de documents, la vérification d’identité et la détection de vivacité.Fonctionnalités
- Lancement en une Activity — démarrez la vérification avec un Intent et recevez un résultat typé en retour
- Deux modes de vérification — capture photo de document ou saisie de numéro d’identifiant, configurés depuis votre tableau de bord
- Capture de document avec guide — cadre précisément la carte d’identité pour que les images soient toujours nettes et correctement recadrées
- Détection de vivacité — un scan caméra passif (clignement plus mouvement naturel de la tête) s’exécute automatiquement après la vérification d’identité, sans invites pas à pas
- Types d’identifiants dynamiques — les canaux et champs sont récupérés en direct depuis la configuration de votre tableau de bord
- Support multi-pays — affiche automatiquement un sélecteur de pays lorsqu’un seul pays est configuré
- Mode sombre et clair — le thème s’adapte au paramètre système ; surchargez via l’Intent de lancement
- Votre marque, pas la nôtre : nom, description, couleur et logo proviennent du tableau de bord, et la police est transmise par votre app. Voir Image de marque
- N’importe quel hôte backend : production, staging, ou le vôtre, sans rebuild
Prérequis
- Android API 24 (Android 7.0) ou ultérieur
- Kotlin 2.1 ou ultérieur — le SDK est compilé avec la chaîne d’outils Kotlin 2.1, donc un compilateur consommateur plus ancien le rejette
- Java 17 — le SDK cible JVM 17
- Jetpack Compose activé dans votre module
Installation
1 — Ajouter Maven Central
Danssettings.gradle.kts (déjà présent dans la plupart des projets) :
2 — Ajouter la dépendance
Dans le fichierbuild.gradle.kts de votre app ou module fonctionnel :
La version 1.0.7 modifie deux comportements.
RESULT_STATUS contient désormais le vrai verdict, et l’écran de succès ne signifie plus une réussite. Lisez Extras de résultat avant de mettre à jour depuis la version 1.0.6 ou antérieure. Elle ajoute également l’Image de marque et un hôte backend personnalisé, et corrège une caméra de vivacité vierge après avoir ignoré la capture du verso.3 — Activer Compose
Identifiants
Les deux valeurs proviennent de votre tableau de bord Adhere et sont toutes deux permanentes. Réutilisez la même paire pour chaque vérification.Permissions
Le SDK déclare ces permissions automatiquement via la fusion de manifest. Vous n’avez pas besoin de les ajouter manuellement sauf si votre projet utilise une stratégie de fusion de manifest personnalisée :SmartComplyActivity demande la permission CAMERA au moment de l’exécution avant de démarrer le flux, donc si vous lancez via l’Activity, votre app n’a pas besoin de la demander séparément. Si vous intégrez directement SmartComplyFlowScreen, voir Avancé : Host Activity personnalisé.
Démarrage rapide
1 — Enregistrer le launcher de résultat
Dans votreActivity ou Fragment :
2 — Lancer la vérification
Jetpack Compose
Si vous lancez depuis un composable, utilisezrememberLauncherForActivityResult :
Paramètres de buildIntent
Environnements
SANDBOX cible un serveur exécuté sur le téléphone lui-même, pour le développement backend local. Ce n’est pas un environnement de test hébergé. Utilisez PRODUCTION pour tout travail d’intégration.
Un hôte différent
Environment couvre les deux hôtes contre lesquels vous développez. Pour tout autre cas, un déploiement staging ou un build QA qui doit atteindre plus d’un backend sans être reconstruit, surchargez-le. Ajouté en 1.0.7.
environment plutôt que d’être traitée comme un hôte, donc un build lisant cela depuis un champ vide n’enverra pas les vérifications vers une URL relative.
SmartComplyActivity.buildIntent utilise PRODUCTION par défaut, mais le constructeur SDKConfig utilisé par le flux intégré utilise SANDBOX par défaut. Définissez environment explicitement lorsque vous construisez SDKConfig vous-même.Extras de résultat
Lisez depuis l’Intent retourné à votre callback de résultat d’activité.
Le webhook
liveness.completed est l’enregistrement faisant autorité. La valeur ici est le même verdict délivré plus tôt par commodité, et il est absent lorsque le worker est lent ; le webhook arrive toujours.Flux de vérification
Le SDK défile automatiquement à travers ces écrans.Images de document
Les photos de document sont limitées à 5 MB côté serveur, en JPG ou PNG. Les deux routes, la caméra intégrée au SDK et Importer depuis la galerie, sont réduites à 1600px sur le bord long et recompressées avant téléchargement, donc une photo de téléphone en pleine résolution ne provoque plus d’échec avecFile too large. Maximum size is 5MB.
Avant l’écran de révision, le SDK vérifie que la photo contient un visage et du texte lisible. Un échec est un avertissement, pas un blocage : l’utilisateur peut toujours confirmer, car un faux négatif piégerait autrement quelqu’un tenant un document genuine mais inhabituel. C’est la vérification OCR backend qui rejette réellement.
Image de marque
Le flux porte votre marque, pas celle d’Adhere. La couleur, le nom, la description et le logo proviennent tous de la SDK Config sur le tableau de bord, donc ils changent sans publication d’app. La police est la seule exception et est transmise par l’hôte.Logo
Téléversez-le sous Settings → Integrations → SDK → Brand Details. PNG, JPEG ou WebP, jusqu’à 512 Ko et 1024x1024 pixels. Nécessite la 1.0.7. Il est dessiné seul, sans boîte ni bordure derrière lui, et délimité par la hauteur plutôt que fitted dans un carré pour qu’un logotype reste lisible. Seul le bouclier de secours du SDK se trouve dans un cadre teinté. Le logo appartient à la SDK Config, pas à l’entreprise. Une branche exécutant plusieurs configurations pour différents produits donne à chacune sa propre icône, et une configuration sans logo affiche le bouclier propre du SDK plutôt que de revenir au logo de l’entreprise sur votre page de profil. Si vous voulez la même icône partout, téléversez-la dans chaque configuration.Un logo ne retarde ni ne bloque jamais une vérification. Le SDK le récupère après que l’écran de bienvenue est déjà à l’écran, avec un budget de trois secondes, et conserve son propre bouclier si la récupération échoue. Il est également décodé avec une limite de taille, donc une image trop volumineuse ne peut pas épuiser la mémoire sur le téléphone.
Police
Transmise par votre app, car le SDK ne fournit ni ne télécharge de fichiers polaires : votre chargement, mise en cache et licence restent les vôtres. Nécessite la 1.0.7. ViabuildIntent, avec une ressource polaire :
SmartComplyFlowScreen, avec directement une FontFamily, qui est le seul moyen de contrôler chaque graisse :
fontResId vers une famille polaire XML plutôt qu’un seul fichier polaire et la plateforme résout les vraies graisses par poids sur l’API 28+. Un seul fichier est utilisé pour chaque graisse, ce qui aplatit la hiérarchie typographique du SDK.
Une ressource polaire qui ne peut pas être chargée, y compris une que R8 a supprimée, revient à la police de la plateforme. Elle ne fait pas échouer la vérification.
Vivacité
Deux actions sont tirées deBLINK et TURN_HEAD en ordre aléatoire et détectées passivement. Les deux sont surveillées à chaque image, aucune n’est nommée à l’utilisateur, et le HUD ne rapporte que combien sont terminées : il n’y a pas de séquence guidée.
Le scan a une limite de 20 secondes.
Ce que signifie l’écran de succès
Rien concernant le verdict. Chaque entrée soumise l’atteint, que le backend ait fait passer ou échoué la vérification. L’appel de soumission retourneprocessing, car le backend résout la concordance faciale sur un worker moments plus tard. Le SDK interroge pendant environ 15 secondes et place ce qu’il apprend dans RESULT_STATUS, puis affiche l’écran de succès dans tous les cas. Un utilisateur qui a échoué n’est pas informé et ne se voit pas proposer de réessayer.
C’est une décision produit, pas un oubli : les locataires ont demandé que l’utilisateur final voie une vérification soumise comme acceptée, et agisse sur le vrai verdict lui-même depuis le tableau de bord et le webhook. Cela signifie que vous devez clore la boucle avec un utilisateur qui a échoué.
Les échecs pré-soumission ne sont pas affectés et affichent toujours l’écran d’échec avec Réessayer : caméra refusée, erreur de configuration ou réseau, et atteinte de la limite de vivacité de 20 secondes. Rien n’a été facturé à ce stade et l’utilisateur peut se récupérer sur place.
Configuration du SDK
Gestion des erreurs
SmartComplyActivity gère et affiche tous les états d’erreur à l’intérieur du flux — une clé invalide, une session expirée ou un retry de téléchargement épuisé affichent tous l’écran d’échec propre du SDK avec un bouton Réessayer. L’Activity ne retourne un résultat que lorsque l’utilisateur termine le flux ou revient en arrière.
Avancé : Host Activity personnalisé
Si vous souhaitez intégrer le flux de vérification directement dans votre propreComponentActivity au lieu de lancer un écran séparé, vous pouvez utiliser SmartComplyFlowScreen comme composable Compose :
Vous n’avez pas besoin de demander
CAMERA vous-même. Depuis la 1.0.2, le composable passe par son propre écran de permissions dans les deux modes de vérification, avant l’étape de saisie d’identifiant ou de capture de document, et le saute silencieusement une fois la permission accordée.Sur la 1.0.1 et antérieure, le mode données ne demandait jamais la permission, donc si elle n’avait pas déjà été accordée, la camérique ne s’ouvrait jamais : l’aperçu de vivacité restait noir et le flux se terminait avec Recording failed: Recording finalized with error code 4. Si vous êtes fixé sur une version plus ancienne, demandez CAMERA vous-même avant d’entrer dans le flux, ou lancez via SmartComplyActivity, qui demandait toujours dans les deux modes.Dépendances
Depuis la 1.0.3, le SDK ne dépend plus de Ktor. Il utilise directement OkHttp, donc votre propre version de Ktor ne peut pas entrer en conflit avec la nôtre.ProGuard / R8
Il n’y a rien à faire. Le SDK fournit les règles ProGuard consommatrices à l’intérieur de l’AAR, donc R8 les applique à votre app automatiquement. Elles conservent les sérialiseurs kotlinx.serialization générés etSmartComplyActivity ; OkHttp fournit ses propres règles dans son jar.

