← Kaikki laajennukset

Natiivilaajennus

KlugRegister

com.klug.register.KlugRegister

APM EI OLE TARPEEN. Lataa ja nauti. Yksinkertaisempaa ei voi olla.

Luo QR-koodeja ja skannaa niitä natiivilla kokonäytön kameraskannerilla, jolloin toinen laite voidaan kirjata sisään osoittamalla sen kamera ensimmäiseen laitteeseen, ilman käyttäjätunnuksen tai salasanan kirjoittamista.

AndroidiOSmacOSiPad Macilla Tuotantokäytössä Alkaen €19 / vuosi · Osta

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

Android luonti + skannaus
iOS luonti + skannaus · arm64
macOS luonti + skannaus (macOS 13+) · arm64 · x86_64
iPad Macilla luonti + skannaus

Jos ominaisuus ei ole saatavilla, isSupported ja isScanSupported palauttavat false, joten sama koodi voi pysyä jokaisessa sovelluksessa.

Aloitus

Lisää laajennus sovelluksesi descriptoriin:

app.xml
<extensions>
    <extensionID>com.klug.register.KlugRegister</extensionID>
</extensions>

Skannausta varten iOS:llä lisää kameran käyttökuvaus InfoAdditions-osioon:

app.xml · InfoAdditions
<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 →

1 · Näytä liitoskoodi ensimmäisellä laitteella
PairingCode.as
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 );
    }
}
2 · Skannaa se toisella laitteella
Scan.as
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" );
}
3 · Lunasta koodi palvelimellasi
Redeem.as
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 );
}
4 · Peruutus ja virheet
ScanErrors.as
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.
isSupportedTrue siellä, missä QR-koodeja voi luoda (Android, iOS, macOS).
isScanSupportedTrue 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.
KlugRegisterEventtext, errorCode, errorMessage.

Tapahtumat

KlugRegisterEvent.SCANNEDKoodi luettiin; e.text sisältää sen sisällön.
KlugRegisterEvent.CANCELEDKäyttäjä sulki skannerin.
KlugRegisterEvent.ERRORe.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

Perus
€19 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Ei tukea
Osta Perus
Vakio
€149 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Vastaus sähköpostitse 7 päivän kuluessa
Osta Vakio
Prioriteetti
€299 / vuosi
  • Lisenssi yhdelle AIR-sovellukselle
  • Kaikki päivitykset 12 kuukauden ajan
  • Vastaus sähköpostitse 48 tunnin kuluessa
Osta Prioriteetti
Link (Stripe) laskee verot kassalla. Syötät AIR-sovelluksesi sovellustunnuksen kassalla.

Vaatimukset

AIR SDK51.x (HARMAN)
AndroidAndroid 6 tai uudempi, Google Play -palvelut (skanneri)
iOSiOS 13 tai uudempi
macOSmacOS 10.15 tai uudempi (QR-koodien luonti); macOS 13 tai uudempi skannaukseen
OikeudetiOS ja macOS: kamera skannausta varten (NSCameraUsageDescription); Android: ei mitään