Überblick
Viele Apps brauchen ein zweites Gerät: eine Kamera und einen Viewer, ein Smartphone und ein Tablet, einen Kiosk und ein Admin-Smartphone. Die Anmeldung auf diesem zweiten Gerät ist die Stelle, an der Nutzer aufgeben: Sie müssen sich einen Benutzernamen merken, ein Passwort eintippen oder auf einen E-Mail-Code warten.
KlugRegister macht aus diesem Schritt eine einzige Kameraaufnahme. Das erste Gerät erzeugt einen QR-Code; das zweite Gerät scannt ihn mit einem nativen Scanner, und die App meldet sich an. Der QR-Code trägt, was Ihre App braucht, typischerweise einen einmaligen Code von Ihrem Server, nie das Passwort selbst.
Beide Teile sind nativ: QR-Codes werden vom System erzeugt (scharf in jeder Größe, als AIR-BitmapData zur direkten Anzeige), und der Scanner ist nativ: eine Vollbild-Kameraansicht mit Ihrem eigenen Hinweistext unter iOS und der Code-Scanner von Google unter Android, der überhaupt keine Kameraberechtigung braucht.
KlugRegister läuft im aktuellen Release unserer Apps, unseres Praxisbeweises: Nach der Registrierung zeigt die App einen QR-Code, und das zweite Gerät ist in Sekunden gekoppelt, selbst direkt nach der Installation der App aus dem Store.
Funktionen
- Eigenständig: eine ANE, keine Kernbibliothek und keine abhängigen ANEs, die Sie ergänzen müssten
- QR-Codes aus beliebigem Text oder einer URL erzeugen, als BitmapData mit korrekter Ruhezone
- Größe in Pixeln pro Modul wählbar, scharf auf jedem Bildschirm
- Nativer Vollbild-Kamerascanner mit eigenem Hinweistext und Abbrechen-Schaltfläche
- Fragt die Kameraberechtigung an und meldet, wenn sie verweigert wird
- Android: Google-Code-Scanner aus den Play Services, keine Kameraberechtigung nötig
- Funktioniert im Hoch- und Querformat, auf Smartphones und Tablets
- iOS und macOS: nur System-Frameworks; Android: ZXing und der Google-Code-Scanner, die beim Paketieren der App automatisch aufgelöst werden
Unterstützte Plattformen
Wo eine Funktion nicht verfügbar ist, geben isSupported und isScanSupported false zurück, sodass derselbe Code in jeder App bleiben kann.
Erste Schritte
Fügen Sie die Erweiterung Ihrem Application Descriptor hinzu:
<extensions>
<extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>
Für das Scannen unter iOS fügen Sie den InfoAdditions eine Beschreibung der Kameranutzung hinzu:
<key>NSCameraUsageDescription</key> <string>Scan the QR code of your first device</string>
Codebeispiele
Vier vollständige Abläufe zum Koppeln eines zweiten Geräts. Das Erzeugen eines Codes erfolgt sofort; das Scanner-Ergebnis kommt als KlugRegisterEvent an. Vollständige Dokumentation →
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 ); } }
API-Übersicht
| KlugRegister.getInstance() | Gibt die einzige Instanz zurück. |
| isSupported | True, wo QR-Codes erzeugt werden können (Android, iOS, macOS). |
| isScanSupported | True, wo der Scanner verfügbar ist: Android, iOS und macOS 13 oder neuer mit Kamera. |
| createQRCode(text, modulePx) | Gibt den QR-Code als BitmapData zurück, schwarz auf weiß, mit 4 Modulen Ruhezone; modulePx Pixel pro Modul (Standard 8). Null, wenn kein Code erzeugt werden konnte. |
| scanQRCode(hint, cancelTitle) | Öffnet den Scanner: Vollbild unter iOS, ein Sheet auf dem Mac, der Scanner von Google unter Android (Hinweis und Titel werden dort nicht verwendet). Das Ergebnis kommt als Ereignis. Gibt false zurück, wenn bereits ein Scanner geöffnet ist. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Ereignisse
| KlugRegisterEvent.SCANNED | Ein Code wurde gelesen; e.text enthält seinen Inhalt. |
| KlugRegisterEvent.CANCELED | Der Nutzer hat den Scanner geschlossen. |
| KlugRegisterEvent.ERROR | e.errorCode: denied (keine Kameraberechtigung) · nocamera unter iOS und macOS; scanner · empty unter Android. Details in e.errorMessage. |
KlugRegister kaufen
Eine Jahreslizenz für eine AIR-Anwendung, mit allen Updates für 12 Monate. Nach der Zahlung erhalten Sie die Erweiterung, die ActionScript-Bibliothek und die Dokumentation per E-Mail, in der Regel innerhalb eines Werktags. Lizenz und Bedingungen
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Kein Support
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Antwort per E-Mail innerhalb von 7 Tagen
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Antwort per E-Mail innerhalb von 48 Stunden
Voraussetzungen
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 oder neuer, Google Play Services (Scanner) |
| iOS | iOS 13 oder neuer |
| macOS | macOS 10.15 oder neuer (QR-Codes erzeugen); macOS 13 oder neuer zum Scannen |
| Berechtigungen | iOS und macOS: Kamera, zum Scannen (NSCameraUsageDescription); Android: keine |