← Toutes les extensions

Extension native

KlugSystem

com.klug.system

AUCUN APM NÉCESSAIRE. Téléchargez et profitez-en. Impossible de faire plus simple.

Les services système dont toute application a besoin, dans une petite extension : ouvrir des pages web dans un navigateur intégré, savoir si l’appareil est en ligne et en Wi-Fi ou en données mobiles, confirmer l’identité de l’utilisateur par empreinte digitale ou Face ID, et demander une évaluation sur la boutique.

iOSAndroid En production À partir de €19 / an · Acheter

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

iOS navigateur · réseau · Face ID / Touch ID · arm64
Android navigateur · réseau · empreinte digitale (Android 9+)

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 :

app.xml
<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 →

1 · Ouvrir une page d’aide dans le navigateur intégré
Help.as
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
}
2 · Avertir avant de diffuser en données mobiles
Network.as
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();
}
3 · Confirmer l’utilisateur par empreinte digitale ou Face ID
Confirm.as
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
}
4 · Demander une évaluation sur la boutique
Rating.as
// 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
5 · Arrêt propre
Shutdown.as
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.
isSupportedVrai 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).
lastAuthErrorErreur 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_FACETypes pour canAuthenticate() : 1 et 2.

Événements

BROWSER_CLOSEDLe navigateur intégré est fermé : Done (OK) sur iOS, retour dans votre application sur Android.
NETWORK_CHANGELe réseau a changé (après startNetworkWatch()).
AUTH_SUCCESSL’utilisateur a été confirmé.
AUTH_FAILEDPas 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

Simple
€19 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Sans support
Acheter Simple
Standard
€149 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Réponse par e-mail sous 7 jours
Acheter Standard
Priority
€299 / an
  • Licence pour une application AIR
  • Toutes les mises à jour pendant 12 mois
  • Réponse par e-mail sous 48 heures
Acheter Priority
Les taxes sont calculées lors du paiement par Link (Stripe). Vous saisissez l’identifiant d’application de votre app AIR pendant le paiement.

Prérequis

SDK AIR51.x (HARMAN)
iOSiOS 13 ou version ultérieure
AndroidAndroid 6 ou version ultérieure ; biométrie à partir d’Android 9
AutorisationsAndroid : USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS : NSFaceIDUsageDescription