← Alle udvidelser

Native udvidelse

KlugRegister

com.klug.register.KlugRegister

INGEN APM NØDVENDIG. Download og nyd. Det bliver ikke enklere.

Opretter QR-koder og scanner dem med en native fuldskærms-kamerascanner, så en anden enhed kan logges ind ved at pege dens kamera på den første, uden at skrive brugernavn eller adgangskode.

AndroidiOSmacOSiPad på Mac I produktion Fra €19 / år · Køb

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

Android opret + scan
iOS opret + scan · arm64
macOS opret + scan (macOS 13+) · arm64 · x86_64
iPad på Mac opret + scan

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:

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

Til scanning på iOS skal du tilføje en beskrivelse af kamerabrug til InfoAdditions:

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

1 · Vis en parringskode på den første enhed
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 · Scan den på den anden enhed
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 · Indløs koden hos din server
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 · Annullering og fejl
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 );
    }
}

API-oversigt

KlugRegister.getInstance()Returnerer den enkelte instans.
isSupportedSand, hvor QR-koder kan oprettes (Android, iOS, macOS).
isScanSupportedSand, 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.
KlugRegisterEventtext, errorCode, errorMessage.

Events

KlugRegisterEvent.SCANNEDEn kode blev læst; e.text indeholder dens indhold.
KlugRegisterEvent.CANCELEDBrugeren lukkede scanneren.
KlugRegisterEvent.ERRORe.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

Enkel
€19 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Ingen support
Køb Enkel
Standard
€149 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 7 dage
Køb Standard
Prioritet
€299 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 48 timer
Køb Prioritet
Moms og afgifter beregnes ved checkout af Link (Stripe). Du angiver application ID'et for din AIR-app under checkout.

Krav

AIR SDK51.x (HARMAN)
AndroidAndroid 6 eller nyere, Google Play-tjenester (scanner)
iOSiOS 13 eller nyere
macOSmacOS 10.15 eller nyere (oprettelse af QR-koder); macOS 13 eller nyere til scanning
TilladelseriOS og macOS: kamera, til scanning (NSCameraUsageDescription); Android: ingen