Yleiskatsaus
Moni sovellus tarvitsee toisen laitteen: kameran ja katselimen, puhelimen ja tabletin, kioskin ja ylläpitäjän puhelimen. Kirjautuminen tällä toisella laitteella on kohta, jossa käyttäjät luovuttavat: heidän täytyy muistaa käyttäjätunnus, kirjoittaa salasana tai odottaa sähköpostikoodia.
KlugRegister muuttaa tämän vaiheen yhdeksi kameran otokseksi. Ensimmäinen laite luo QR-koodin; toinen laite skannaa sen natiivilla skannerilla, ja sovellus kirjautuu sisään. QR-koodi sisältää sen, mitä sovelluksesi tarvitsee, tyypillisesti palvelimeltasi saatavan kertakäyttökoodin, ei koskaan itse salasanaa.
Molemmat osat ovat natiiveja: QR-koodit tuottaa järjestelmä (terävät millä tahansa koolla, AIR-BitmapData-muodossa valmiina näytettäväksi), ja skanneri on natiivi: iOS:llä kokonäytön kameranäkymä omalla vihjetekstilläsi ja Androidilla Googlen koodiskanneri, joka ei tarvitse kameralupaa lainkaan.
KlugRegister on käytössä sovellustemme nykyisessä julkaisussa, todisteenamme toimivuudesta: rekisteröitymisen jälkeen sovellus näyttää QR-koodin, ja toinen laite liitetään sekunneissa, jopa heti sovelluksen kaupasta asentamisen jälkeen.
Ominaisuudet
- Itsenäinen: yksi ANE, ei ydinkirjastoa tai riippuvaisia ANE-laajennuksia lisättäväksi
- Luo QR-koodeja mistä tahansa tekstistä tai URL-osoitteesta, palautetaan BitmapData-muodossa asianmukaisella hiljaisella alueella
- Valitse koko pikseleinä moduulia kohden, terävä millä tahansa näytöllä
- Natiivi kokonäytön kameraskanneri omalla vihjetekstillä ja peruutuspainikkeella
- Pyytää kameralupaa ja raportoi, jos lupa evätään
- Android: Googlen koodiskanneri Play-palveluista, kameralupaa ei tarvita
- Toimii pysty- ja vaaka-asennossa, puhelimilla ja tableteilla
- iOS ja macOS: vain järjestelmäkehykset; Android: ZXing ja Googlen koodiskanneri, jotka ratkaistaan automaattisesti sovellusta paketoitaessa
Tuetut alustat
Jos ominaisuus ei ole saatavilla, isSupported ja isScanSupported palauttavat false, joten sama koodi voi pysyä jokaisessa sovelluksessa.
Aloitus
Lisää laajennus sovelluksesi descriptoriin:
<extensions>
<extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>
Skannausta varten iOS:llä lisää kameran käyttökuvaus InfoAdditions-osioon:
<key>NSCameraUsageDescription</key> <string>Scan the QR code of your first device</string>
Koodiesimerkit
Neljä täydellistä esimerkkiä toisen laitteen liittämisestä. Koodin luonti on välitöntä; skannerin tulos saapuu KlugRegisterEvent-tapahtumana. Koko dokumentaatio →
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 ); } }
Rajapintayleiskatsaus
| KlugRegister.getInstance() | Palauttaa yksittäisen instanssin. |
| isSupported | True siellä, missä QR-koodeja voi luoda (Android, iOS, macOS). |
| isScanSupported | True siellä, missä skanneri on saatavilla: Android, iOS ja macOS 13 tai uudempi kameralla. |
| createQRCode(text, modulePx) | Palauttaa QR-koodin BitmapData-muodossa, mustaa valkoisella, 4 moduulin hiljaisella alueella; modulePx pikseliä moduulia kohden (oletus 8). Null, jos koodia ei voitu luoda. |
| scanQRCode(hint, cancelTitle) | Avaa skannerin: koko näyttö iOS:llä, näkymä (sheet) Macilla, Googlen skanneri Androidilla (vihjettä ja otsikkoa ei käytetä siellä). Tulos saapuu tapahtumana. Palauttaa false, jos skanneri on jo auki. |
| KlugRegisterEvent | text, errorCode, errorMessage. |
Tapahtumat
| KlugRegisterEvent.SCANNED | Koodi luettiin; e.text sisältää sen sisällön. |
| KlugRegisterEvent.CANCELED | Käyttäjä sulki skannerin. |
| KlugRegisterEvent.ERROR | e.errorCode: denied (ei kameralupaa) · nocamera iOS:llä ja macOS:llä; scanner · empty Androidilla. Lisätiedot kohdassa e.errorMessage. |
Osta KlugRegister
Vuosilisenssi yhdelle AIR-sovellukselle, kaikki päivitykset 12 kuukauden ajan. Maksun jälkeen saat laajennuksen, ActionScript-kirjaston ja dokumentaation sähköpostitse, yleensä yhden arkipäivän kuluessa. Lisenssi ja ehdot
- Lisenssi yhdelle AIR-sovellukselle
- Kaikki päivitykset 12 kuukauden ajan
- Ei tukea
- Lisenssi yhdelle AIR-sovellukselle
- Kaikki päivitykset 12 kuukauden ajan
- Vastaus sähköpostitse 7 päivän kuluessa
- Lisenssi yhdelle AIR-sovellukselle
- Kaikki päivitykset 12 kuukauden ajan
- Vastaus sähköpostitse 48 tunnin kuluessa
Vaatimukset
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6 tai uudempi, Google Play -palvelut (skanneri) |
| iOS | iOS 13 tai uudempi |
| macOS | macOS 10.15 tai uudempi (QR-koodien luonti); macOS 13 tai uudempi skannaukseen |
| Oikeudet | iOS ja macOS: kamera skannausta varten (NSCameraUsageDescription); Android: ei mitään |