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
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 :
<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 :
<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 →
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 ); } }
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" ); }
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 ); }
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. |
| isSupported | Vrai là où des codes QR peuvent être créés (Android, iOS, macOS). |
| isScanSupported | Vrai 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. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Événements
| KlugRegisterEvent.SCANNED | Un code a été lu ; e.text contient son contenu. |
| KlugRegisterEvent.CANCELED | L’utilisateur a fermé le lecteur. |
| KlugRegisterEvent.ERROR | e.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
- 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) |
| Android | Android 6 ou version ultérieure, Google Play services (lecteur) |
| iOS | iOS 13 ou version ultérieure |
| macOS | macOS 10.15 ou version ultérieure (création de codes QR) ; macOS 13 ou version ultérieure pour le scan |
| Autorisations | iOS et macOS : caméra, pour le scan (NSCameraUsageDescription) ; Android : aucune |