Oversigt
Mange apps har brug for en anden enhed: et kamera og en viser, en telefon og en tablet, en kiosk og en admin-telefon. Login på den anden enhed er det sted, hvor brugerne giver op: de skal huske et brugernavn, skrive en adgangskode eller vente på en e-mailkode.
KlugRegister gør det trin til ét kameraskud. Den første enhed opretter en QR-kode; den anden enhed scanner den med en native scanner, og appen logger ind. QR-koden bærer, hvad din app har brug for, typisk en engangskode fra din server, aldrig selve adgangskoden.
Begge dele er native: QR-koder genereres af systemet (skarpe i enhver størrelse, som en AIR-BitmapData klar til visning), og scanneren er native: en fuldskærms-kameravisning med din egen hinttekst på iOS og Googles kodescanner på Android, som slet ikke behøver kameratilladelse.
KlugRegister kører i den aktuelle udgave af vores apps, vores proof of concept: efter registreringen viser appen en QR-kode, og den anden enhed parres på få sekunder, selv lige efter at appen er installeret fra butikken.
Funktioner
- Selvstændig: én ANE, intet kernebibliotek eller afhængige ANE'er at tilføje
- Opret QR-koder ud fra enhver tekst eller URL, returneret som BitmapData med en korrekt quiet zone
- Vælg størrelsen i pixels pr. modul, knivskarp på enhver skærm
- Native fuldskærms-kamerascanner med din egen hinttekst og annulleringsknap
- Anmoder om kameratilladelse og rapporterer, når den afvises
- Android: Googles kodescanner fra Play-tjenester, ingen kameratilladelse nødvendig
- Virker i portræt og landskab, på telefoner og tablets
- iOS og macOS: kun systemets frameworks; Android: ZXing og Googles kodescanner, løses automatisk, når appen pakkes
Understøttede platforme
Hvor en funktion ikke er tilgængelig, returnerer isSupported og isScanSupported false, så den samme kode kan blive i enhver app.
Kom i gang
Tilføj udvidelsen til din applikationsdescriptor:
<extensions>
<extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>
Til scanning på iOS skal du tilføje en beskrivelse af kamerabrug til InfoAdditions:
<key>NSCameraUsageDescription</key> <string>Scan the QR code of your first device</string>
Kodeeksempler
Fire komplette flows til parring af en anden enhed. Oprettelse af en kode er øjeblikkelig; scannerens resultat ankommer som en KlugRegisterEvent. Fuld 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-oversigt
| KlugRegister.getInstance() | Returnerer den enkelte instans. |
| isSupported | Sand, hvor QR-koder kan oprettes (Android, iOS, macOS). |
| isScanSupported | Sand, hvor scanneren er tilgængelig: Android, iOS og macOS 13 eller nyere med et kamera. |
| createQRCode(text, modulePx) | Returnerer QR-koden som BitmapData, sort på hvid, med en quiet zone på 4 moduler; modulePx pixels pr. modul (standard 8). Null, hvis ingen kode kunne laves. |
| scanQRCode(hint, cancelTitle) | Åbner scanneren: fuld skærm på iOS, en sheet på Mac, Googles scanner på Android (hint og titel bruges ikke dér). Resultatet ankommer som en hændelse. Returnerer false, hvis en scanner allerede er åben. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Events
| KlugRegisterEvent.SCANNED | En kode blev læst; e.text indeholder dens indhold. |
| KlugRegisterEvent.CANCELED | Brugeren lukkede scanneren. |
| KlugRegisterEvent.ERROR | e.errorCode: denied (ingen kameratilladelse) · nocamera på iOS og macOS; scanner · empty på Android. Detaljer i e.errorMessage. |
Køb KlugRegister
En årlig licens til én AIR-applikation, med alle opdateringer i 12 måneder. Efter betaling modtager du udvidelsen, ActionScript-biblioteket og dokumentationen pr. e-mail, normalt inden for én hverdag. Licens og vilkår
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 7 dage
- Licens til én AIR-applikation
- Alle opdateringer i 12 måneder
- Svar pr. e-mail inden for 48 timer
Krav
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 eller nyere, Google Play-tjenester (scanner) |
| iOS | iOS 13 eller nyere |
| macOS | macOS 10.15 eller nyere (oprettelse af QR-koder); macOS 13 eller nyere til scanning |
| Tilladelser | iOS og macOS: kamera, til scanning (NSCameraUsageDescription); Android: ingen |