Vue d’ensemble
Les pages d’aide, les conditions et les politiques de confidentialité doivent s’ouvrir dans l’application, sans renvoyer l’utilisateur vers un navigateur. L’état du réseau permet de décider s’il faut avertir avant de diffuser en données mobiles. Une vérification par empreinte digitale ou Face ID remplace la saisie d’un mot de passe sur un appareil partagé. KlugSystem couvre ces trois besoins avec les composants propres au système.
Le navigateur intégré est un Chrome Custom Tab sur Android (aucune bibliothèque supplémentaire requise) et un SFSafariViewController sur iOS, avec la couleur de barre d’outils de votre choix ; votre application est informée du retour de l’utilisateur. L’état du réseau indique l’accessibilité et la distinction Wi-Fi / données mobiles, et envoie un événement à chaque changement. La biométrie utilise BiometricPrompt sur Android 9+ et LocalAuthentication sur iOS ; les échecs sont accompagnés des mêmes codes d’erreur sur les deux plateformes, de sorte qu’un seul gestionnaire suffit partout.
KlugSystem fonctionnera dans la prochaine version de nos applications, notre preuve de concept, pour les pages d’aide, l’avertissement sur les données mobiles et la confirmation d’une déconnexion d’appareil.
Fonctionnalités
- Autonome : une seule ANE, sans bibliothèque centrale ni ANE de dépendance à ajouter
- Navigateur intégré : Chrome Custom Tab (Android) / SFSafariViewController (iOS), couleur de barre d’outils, événement de fermeture
- Réseau : accessible, Wi-Fi ou données mobiles, événements de changement (ConnectivityManager / NWPathMonitor)
- Biométrie : empreinte digitale et Face ID / Touch ID avec votre texte de motif et votre libellé d’annulation
- Mêmes codes d’erreur sur les deux plateformes (annulation, repli, verrouillé, non enregistré)
- Aucune bibliothèque tierce ; sur Android, l’évaluation sur la boutique utilise la bibliothèque officielle Play review de Google
- Vérification isSupported : le même code fonctionne ainsi sur toutes les plateformes
Plateformes prises en charge
Les appareils sans capteur biométrique renvoient canAuthenticate = false : votre application peut alors se rabattre sur le mot de passe.
Prise en main
Ajoutez l’extension au descripteur de votre application :
<extensions>
<extensionID>com.klug.system</extensionID>
</extensions>
Android : ajoutez USE_BIOMETRIC, USE_FINGERPRINT et ACCESS_NETWORK_STATE aux ajouts du manifeste. iOS : ajoutez NSFaceIDUsageDescription aux InfoAdditions.
Exemples de code
Cinq flux complets. Chaque appel retourne immédiatement ; les résultats du navigateur, du réseau et de la biométrie arrivent sous forme d’événements de type KlugSystem.*. Documentation complète →
import com.klug.system.KlugSystem; import flash.events.Event; import flash.net.URLRequest; import flash.net.navigateToURL; var sys:KlugSystem = KlugSystem.getInstance(); sys.addEventListener( KlugSystem.BROWSER_CLOSED, onBrowserClosed ); function openHelp():void { var url:String = "https://example.com/help"; // false: not supported here, or no browser could open the page if ( !sys.isSupported || !sys.openBrowser( url, 0x2B2B2B ) ) // toolbar 0xRRGGBB navigateToURL( new URLRequest( url ) ); } function onBrowserClosed( e:Event ):void { // iOS: the user tapped Done. Android: your app is in the foreground again. refreshAccount(); // your app }
sys.addEventListener( KlugSystem.NETWORK_CHANGE, onNetworkChange ); sys.startNetworkWatch(); // the first event usually arrives right away function onNetworkChange( e:Event ):void { // the event carries no detail: ask for the current state if ( !sys.isReachable() ) showOfflineBanner(); // your app else if ( sys.isWWAN() ) showMobileDataWarning(); // on mobile data else hideBanners(); }
sys.addEventListener( KlugSystem.AUTH_SUCCESS, onAuthOk ); sys.addEventListener( KlugSystem.AUTH_FAILED, onAuthFailed ); function confirmLogout():void { // iOS: 1 = Touch ID, 2 = Face ID. // Android 9+: 1 = any enrolled biometric; 2 is always false there. var bio:Boolean = sys.canAuthenticate( KlugSystem.BIOMETRY_FINGERPRINT ) || sys.canAuthenticate( KlugSystem.BIOMETRY_FACE ); if ( !bio || !sys.authenticate( "Confirm to log out", "Cancel" ) ) askForPassword(); // no sensor, nothing enrolled, or Android below 9 } function onAuthOk( e:Event ):void { logOut(); // your app } function onAuthFailed( e:Event ):void { // iOS error numbers on both platforms if ( sys.lastAuthError == -2 ) return; // the user tapped Cancel askForPassword(); // -3 fallback (iOS), -8 locked out, -4 system cancel, -1 failed }
// after a good moment, for example the tenth successful session if ( sessionCount == 10 ) // your app's counter sys.requestReview(); // the store decides whether the dialog really appears: // iOS at most 3 times in 365 days and never in TestFlight; // Google Play has its own quota and never shows it for sideloaded installs
function leaveScreen():void { sys.stopNetworkWatch(); sys.cancelAuthenticate(); // closes a running prompt; AUTH_FAILED may follow sys.removeEventListener( KlugSystem.NETWORK_CHANGE, onNetworkChange ); sys.removeEventListener( KlugSystem.AUTH_SUCCESS, onAuthOk ); sys.removeEventListener( KlugSystem.AUTH_FAILED, onAuthFailed ); }
Aperçu de l’API
| KlugSystem.getInstance() | Renvoie l’instance unique. |
| isSupported | Vrai là où la partie native est présente (iOS et Android). |
| openBrowser(url, toolbarColor) | Ouvre le navigateur intégré, couleur de barre d’outils 0xRRGGBB (blanc par défaut). Renvoie false en cas d’échec d’ouverture ; BROWSER_CLOSED lorsque l’utilisateur revient. |
| isReachable() / isWWAN() | En ligne ou non / en données mobiles. |
| startNetworkWatch() / stopNetworkWatch() | NETWORK_CHANGE à chaque changement ; lisez isReachable() et isWWAN() dans le gestionnaire. |
| canAuthenticate(type) | Vrai si la biométrie est disponible et enregistrée. iOS : BIOMETRY_FINGERPRINT = Touch ID, BIOMETRY_FACE = Face ID. Android 9+ : BIOMETRY_FINGERPRINT = toute biométrie, BIOMETRY_FACE toujours faux. |
| authenticate(reason, cancelLabel) | Affiche l’invite système ; AUTH_SUCCESS ou AUTH_FAILED. Renvoie false si aucune invite ne peut être affichée (Android antérieur à 9). |
| lastAuthError | Erreur du dernier AUTH_FAILED, avec les numéros d’iOS sur les deux plateformes : -1 échec, -2 annulation, -3 repli, -4 annulation par le système, -6 non disponible, -7 non enregistré, -8 verrouillé. |
| cancelAuthenticate() | Ferme une invite en cours. |
| requestReview() | Demande à l’App Store ou à Google Play d’afficher la boîte de dialogue d’évaluation intégrée ; c’est la boutique qui décide de l’afficher ou non. |
| BIOMETRY_FINGERPRINT, BIOMETRY_FACE | Types pour canAuthenticate() : 1 et 2. |
Événements
| BROWSER_CLOSED | Le navigateur intégré est fermé : Done (OK) sur iOS, retour dans votre application sur Android. |
| NETWORK_CHANGE | Le réseau a changé (après startNetworkWatch()). |
| AUTH_SUCCESS | L’utilisateur a été confirmé. |
| AUTH_FAILED | Pas de confirmation ; la raison se trouve dans lastAuthError. |
Acheter KlugSystem
Une licence annuelle pour une application AIR, avec toutes les mises à jour pendant 12 mois. Après le paiement, vous recevez l’extension, la bibliothèque ActionScript et la documentation par e-mail, généralement sous un jour ouvré. Licence et conditions
- Licence pour une application AIR
- Toutes les mises à jour pendant 12 mois
- Sans support
- Licence pour une application AIR
- Toutes les mises à jour pendant 12 mois
- Réponse par e-mail sous 7 jours
- Licence pour une application AIR
- Toutes les mises à jour pendant 12 mois
- Réponse par e-mail sous 48 heures
Prérequis
| SDK AIR | 51.x (HARMAN) |
| iOS | iOS 13 ou version ultérieure |
| Android | Android 6 ou version ultérieure ; biométrie à partir d’Android 9 |
| Autorisations | Android : USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS : NSFaceIDUsageDescription |