← Toutes les extensions

Extension native

KlugRegister

com.klug.register.KlugRegister

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

Crée des codes QR et les scanne avec un lecteur caméra natif en plein écran : un second appareil peut ainsi être connecté en pointant sa caméra vers le premier, sans saisir de nom d’utilisateur ni de mot de passe.

AndroidiOSmacOSiPad sur Mac En production À partir de €19 / an · Acheter

Vue d’ensemble

De nombreuses applications ont besoin d’un second appareil : une caméra et un écran de visionnage, un téléphone et une tablette, une borne et un téléphone d’administration. C’est la connexion sur ce second appareil qui décourage les utilisateurs : ils doivent retenir un nom d’utilisateur, saisir un mot de passe ou attendre un code par e-mail.

KlugRegister réduit cette étape à une simple photo. Le premier appareil crée un code QR ; le second le scanne avec un lecteur natif et l’application se connecte. Le code QR transporte ce dont votre application a besoin, en général un code à usage unique émis par votre serveur, jamais le mot de passe lui-même.

Les deux parties sont natives : les codes QR sont générés par le système (nets à toutes les tailles, sous forme de BitmapData AIR prêt à l’affichage), et le lecteur est natif : une vue caméra en plein écran avec votre propre texte d’indication sur iOS, et le lecteur de codes de Google sur Android, qui ne nécessite aucune autorisation d’accès à la caméra.

KlugRegister fonctionne dans la version actuelle de nos applications, notre preuve de concept : après l’inscription, l’application affiche un code QR et le second appareil est associé en quelques secondes, même juste après avoir installé l’application depuis la boutique.

Fonctionnalités

  • Autonome : une seule ANE, sans bibliothèque centrale ni ANE de dépendance à ajouter
  • Création de codes QR à partir de n’importe quel texte ou URL, renvoyés sous forme de BitmapData avec une zone de silence conforme
  • Choix de la taille en pixels par module, net sur tous les écrans
  • Lecteur caméra natif en plein écran avec votre propre texte d’indication et bouton d’annulation
  • Demande l’autorisation d’accès à la caméra et signale son refus
  • Android : lecteur de codes Google de Play services, aucune autorisation d’accès à la caméra nécessaire
  • Fonctionne en portrait et en paysage, sur téléphones et tablettes
  • iOS et macOS : uniquement les frameworks système ; Android : ZXing et le lecteur de codes Google, résolus automatiquement lors de l’empaquetage de l’application

Plateformes prises en charge

Android création + scan
iOS création + scan · arm64
macOS création + scan (macOS 13+) · arm64 · x86_64
iPad sur Mac création + scan

Lorsqu’une fonctionnalité n’est pas disponible, isSupported et isScanSupported renvoient false : le même code peut donc rester dans toutes les applications.

Prise en main

Ajoutez l’extension au descripteur de votre application :

app.xml
<extensions>
    <extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>

Pour le scan sous iOS, ajoutez une description d’usage de la caméra dans les InfoAdditions :

app.xml · InfoAdditions
<key>NSCameraUsageDescription</key>
<string>Scan the QR code of your first device</string>

Exemples de code

Quatre flux complets pour associer un second appareil. La création d’un code est immédiate ; le résultat du scan arrive sous forme de KlugRegisterEvent. Documentation complète →

1 · Afficher un code d’association sur le premier appareil
PairingCode.as
import com.klug.register.KlugRegister;
import com.klug.register.KlugRegisterEvent;
import flash.display.Bitmap;
import flash.display.BitmapData;

var reg:KlugRegister = KlugRegister.getInstance();

if ( reg.isSupported )   // Android, iOS, macOS
{
    // a short-lived one-time code from your server, never the password
    var bmp:BitmapData = reg.createQRCode( "https://your.server/pair?t=" + oneTimeCode, 10 );
    if ( bmp != null )    // null: no code could be made from the text
    {
        var qr:Bitmap = new Bitmap( bmp );   // black on white, 4-module quiet zone included
        qr.x = ( stage.stageWidth - qr.width ) / 2;
        qr.y = 120;
        addChild( qr );
    }
}
2 · Le scanner sur le second appareil
Scan.as
reg.addEventListener( KlugRegisterEvent.SCANNED,  onScanned );
reg.addEventListener( KlugRegisterEvent.CANCELED, onScanCanceled );
reg.addEventListener( KlugRegisterEvent.ERROR,    onScanError );

function startScan():void
{
    if ( !reg.isScanSupported )
    {
        showCodeEntry();   // your app function: type the one-time code instead
        return;
    }
    // iOS: full-screen scanner with your hint and button; macOS 13+: a sheet on the app window;
    // Android: Google's own localized scanner, hint and cancel title are not used
    if ( !reg.scanQRCode( "Point the camera at the code on your first device", "Cancel" ) )
        trace( "a scanner is already open" );
}
3 · Échanger le code auprès de votre serveur
Redeem.as
function onScanned( e:KlugRegisterEvent ):void
{
    var prefix:String = "https://your.server/pair?t=";
    if ( e.text.indexOf( prefix ) != 0 )
    {
        showMessage( "This is not a pairing code." );   // your app function
        return;
    }

    var vars:URLVariables = new URLVariables();
    vars.t = e.text.substr( prefix.length );
    var req:URLRequest = new URLRequest( "https://your.server/pair" );
    req.method = URLRequestMethod.POST;
    req.data = vars;

    var loader:URLLoader = new URLLoader();
    loader.addEventListener( Event.COMPLETE, function( ev:Event ):void {
        signInWith( String( loader.data ) );   // your app function: the server's answer
    });
    loader.load( req );
}
4 · Annulation et erreurs
ScanErrors.as
function onScanCanceled( e:KlugRegisterEvent ):void
{
    showPairingScreen();   // the user closed the scanner: back to the screen, no message
}

function onScanError( e:KlugRegisterEvent ):void
{
    switch ( e.errorCode )
    {
        case "denied":     // iOS, macOS: camera permission refused
            showMessage( "Allow camera access in Settings to scan the code." );
            break;
        case "nocamera":   // iOS, macOS: no usable camera
            showCodeEntry();
            break;
        default:           // Android: "scanner" (e.g. scanner not ready yet) or "empty"
            showMessage( "The scanner could not start: " + e.errorMessage );
    }
}

Aperçu de l’API

KlugRegister.getInstance()Renvoie l’instance unique.
isSupportedVrai là où des codes QR peuvent être créés (Android, iOS, macOS).
isScanSupportedVrai là où le lecteur est disponible : Android, iOS et macOS 13 ou version ultérieure avec une caméra.
createQRCode(text, modulePx)Renvoie le code QR sous forme de BitmapData, noir sur blanc, avec une zone de silence de 4 modules ; modulePx pixels par module (8 par défaut). Null si aucun code n’a pu être créé.
scanQRCode(hint, cancelTitle)Ouvre le lecteur : plein écran sur iOS, une feuille sur Mac, le lecteur de Google sur Android (indication et titre non utilisés dans ce cas). Le résultat arrive sous forme d’événement. Renvoie false si un lecteur est déjà ouvert.
KlugRegisterEventtext, errorCode, errorMessage.

Événements

KlugRegisterEvent.SCANNEDUn code a été lu ; e.text contient son contenu.
KlugRegisterEvent.CANCELEDL’utilisateur a fermé le lecteur.
KlugRegisterEvent.ERRORe.errorCode : denied (pas d’autorisation caméra) · nocamera sur iOS et macOS ; scanner · empty sur Android. Détails dans e.errorMessage.

Acheter KlugRegister

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)
AndroidAndroid 6 ou version ultérieure, Google Play services (lecteur)
iOSiOS 13 ou version ultérieure
macOSmacOS 10.15 ou version ultérieure (création de codes QR) ; macOS 13 ou version ultérieure pour le scan
AutorisationsiOS et macOS : caméra, pour le scan (NSCameraUsageDescription) ; Android : aucune