Översikt
Många appar behöver en andra enhet: en kamera och en tittare, en telefon och en surfplatta, en kiosk och en administratörstelefon. Inloggningen på den andra enheten är där användare ger upp: de måste komma ihåg ett användarnamn, skriva ett lösenord eller vänta på en e-postkod.
KlugRegister gör det steget till ett enda kamerakort. Den första enheten skapar en QR-kod; den andra enheten skannar den med en inbyggd skanner och appen loggar in. QR-koden bär det din app behöver, vanligtvis en engångskod från din server, aldrig själva lösenordet.
Båda delarna är inbyggda: QR-koderna genereras av systemet (skarpa i valfri storlek, som en AIR-BitmapData redo att visas), och skannern är inbyggd: en kameravy i helskärm med din egen hjälptext på iOS, och Googles kodskanner på Android, som inte kräver någon kamerabehörighet alls.
KlugRegister körs i den aktuella versionen av våra appar, vårt proof of concept: efter registreringen visar appen en QR-kod, och den andra enheten paras ihop på några sekunder, även direkt efter att appen installerats från butiken.
Funktioner
- Fristående: ett ANE, inget kärnbibliotek eller beroende-ANE:er att lägga till
- Skapa QR-koder från valfri text eller URL, returneras som BitmapData med en korrekt tyst zon
- Välj storlek i pixlar per modul, skarpt på alla skärmar
- Inbyggd kameraskanner i helskärm med egen hjälptext och avbrytknapp
- Ber om kamerabehörighet och rapporterar när den nekas
- Android: Googles kodskanner från Play services, ingen kamerabehörighet behövs
- Fungerar i stående och liggande läge, på telefoner och surfplattor
- iOS och macOS: endast systemramverken; Android: ZXing och Googles kodskanner, som löses automatiskt när appen paketeras
Plattformar som stöds
Där en funktion inte är tillgänglig returnerar isSupported och isScanSupported false, så att samma kod kan ligga kvar i alla appar.
Kom igång
Lägg till tillägget i din applikationsbeskrivning (application descriptor):
<extensions>
<extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>
För skanning på iOS lägger du till en beskrivning av kameraanvändningen i InfoAdditions:
<key>NSCameraUsageDescription</key> <string>Scan the QR code of your first device</string>
Kodexempel
Fyra kompletta flöden för att para ihop en andra enhet. Att skapa en kod sker omedelbart; skannerns resultat kommer som en KlugRegisterEvent. Fullständig 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-översikt
| KlugRegister.getInstance() | Returnerar den enda instansen. |
| isSupported | True där QR-koder kan skapas (Android, iOS, macOS). |
| isScanSupported | True där skannern är tillgänglig: Android, iOS samt macOS 13 eller senare med kamera. |
| createQRCode(text, modulePx) | Returnerar QR-koden som BitmapData, svart på vitt, med fyra moduler tyst zon; modulePx pixlar per modul (standard 8). Null om ingen kod kunde skapas. |
| scanQRCode(hint, cancelTitle) | Öppnar skannern: helskärm på iOS, ett ark (sheet) på Mac, Googles skanner på Android (hint och titel används inte där). Resultatet kommer som en händelse. Returnerar false om en skanner redan är öppen. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Händelser
| KlugRegisterEvent.SCANNED | En kod lästes; e.text innehåller dess innehåll. |
| KlugRegisterEvent.CANCELED | Användaren stängde skannern. |
| KlugRegisterEvent.ERROR | e.errorCode: denied (ingen kamerabehörighet) · nocamera på iOS och macOS; scanner · empty på Android. Detaljer i e.errorMessage. |
Köp KlugRegister
En årslicens för en AIR-applikation, med alla uppdateringar i 12 månader. Efter betalning får du tillägget, ActionScript-biblioteket och dokumentationen via e-post, vanligtvis inom en arbetsdag. Licens och villkor
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Ingen support
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Svar via e-post inom 7 dagar
- Licens för en AIR-applikation
- Alla uppdateringar i 12 månader
- Svar via e-post inom 48 timmar
Krav
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 eller senare, Google Play services (skanner) |
| iOS | iOS 13 eller senare |
| macOS | macOS 10.15 eller senare (skapa QR-koder); macOS 13 eller senare för skanning |
| Behörigheter | iOS och macOS: kamera, för skanning (NSCameraUsageDescription); Android: inga |