Oversikt
Mange apper trenger en andre enhet: et kamera og en visning, en telefon og et nettbrett, en kiosk og en admin-telefon. Innlogging på den andre enheten er der brukerne gir opp: de må huske et brukernavn, skrive et passord eller vente på en e-postkode.
KlugRegister gjør det trinnet til ett kamerabilde. Den første enheten lager en QR-kode; den andre enheten skanner den med en native skanner, og appen logger inn. QR-koden bærer det appen din trenger, vanligvis en engangskode fra serveren din, aldri selve passordet.
Begge delene er native: QR-kodene genereres av systemet (skarpe i enhver størrelse, som en AIR-BitmapData klar til visning), og skanneren er native: en fullskjerms kameravisning med din egen hjelpetekst på iOS, og Googles kodeskanner på Android, som ikke trenger kameratillatelse i det hele tatt.
KlugRegister kjører i den nåværende utgivelsen av appene våre, vårt proof of concept: etter registrering viser appen en QR-kode, og den andre enheten kobles til på sekunder, selv rett etter at appen er installert fra butikken.
Funksjoner
- Selvstendig: én ANE, ingen kjernebibliotek eller avhengige ANE-er å legge til
- Lag QR-koder fra enhver tekst eller URL, returnert som BitmapData med riktig stille sone
- Velg størrelsen i piksler per modul, skarpt på enhver skjerm
- Native fullskjerms kameraskanner med din egen hjelpetekst og avbryt-knapp
- Ber om kameratillatelse og rapporterer når den nektes
- Android: Googles kodeskanner fra Play-tjenester, ingen kameratillatelse nødvendig
- Fungerer i stående og liggende format, på telefoner og nettbrett
- iOS og macOS: bare systemrammeverkene; Android: ZXing og Googles kodeskanner, løses automatisk når appen pakkes
Støttede plattformer
Der en funksjon ikke er tilgjengelig, returnerer isSupported og isScanSupported false, slik at den samme koden kan bli værende i alle apper.
Kom i gang
Legg utvidelsen til i applikasjonsbeskrivelsen din:
<extensions>
<extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>
For skanning på iOS legger du til en kamerabruksbeskrivelse i InfoAdditions:
<key>NSCameraUsageDescription</key> <string>Scan the QR code of your first device</string>
Kodeeksempler
Fire komplette flyter for å koble til en andre enhet. Å lage en kode skjer umiddelbart; skannerresultatet kommer som en KlugRegisterEvent. Full dokumentasjon →
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-oversikt
| KlugRegister.getInstance() | Returnerer den ene instansen. |
| isSupported | True der QR-koder kan lages (Android, iOS, macOS). |
| isScanSupported | True der skanneren er tilgjengelig: Android, iOS og macOS 13 eller nyere med kamera. |
| createQRCode(text, modulePx) | Returnerer QR-koden som BitmapData, svart på hvitt, med en stille sone på 4 moduler; modulePx piksler per modul (standard 8). Null hvis ingen kode kunne lages. |
| scanQRCode(hint, cancelTitle) | Åpner skanneren: fullskjerm på iOS, et ark på Mac, Googles skanner på Android (hjelpetekst og tittel brukes ikke der). Resultatet kommer som en hendelse. Returnerer false hvis en skanner allerede er åpen. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Hendelser
| KlugRegisterEvent.SCANNED | En kode ble lest; e.text inneholder innholdet. |
| KlugRegisterEvent.CANCELED | Brukeren lukket skanneren. |
| KlugRegisterEvent.ERROR | e.errorCode: denied (ingen kameratillatelse) · nocamera på iOS og macOS; scanner · empty på Android. Detaljer i e.errorMessage. |
Kjøp KlugRegister
En årslisens for én AIR-applikasjon, med alle oppdateringer i 12 måneder. Etter betaling mottar du utvidelsen, ActionScript-biblioteket og dokumentasjonen på e-post, vanligvis innen én virkedag. Lisens og vilkår
- Lisens for én AIR-applikasjon
- Alle oppdateringer i 12 måneder
- Ingen støtte
- Lisens for én AIR-applikasjon
- Alle oppdateringer i 12 måneder
- Svar på e-post innen 7 dager
- Lisens for én AIR-applikasjon
- Alle oppdateringer i 12 måneder
- Svar på e-post innen 48 timer
Krav
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 eller nyere, Google Play-tjenester (skanner) |
| iOS | iOS 13 eller nyere |
| macOS | macOS 10.15 eller nyere (opprette QR-koder); macOS 13 eller nyere for skanning |
| Tillatelser | iOS og macOS: kamera, for skanning (NSCameraUsageDescription); Android: ingen |