← Todas las extensiones

Extensión nativa

KlugRegister

com.klug.register.KlugRegister

NO NECESITAS APM. Descarga y disfruta. No puede ser más sencillo.

Crea códigos QR y los escanea con un escáner nativo de cámara a pantalla completa, de modo que un segundo dispositivo puede iniciar sesión apuntando su cámara al primero, sin escribir usuario ni contraseña.

AndroidiOSmacOSiPad en Mac En producción Desde €19 / año · Comprar

Resumen

Muchas apps necesitan un segundo dispositivo: una cámara y un visor, un teléfono y una tableta, un quiosco y un teléfono de administración. Iniciar sesión en ese segundo dispositivo es donde los usuarios abandonan: tienen que recordar un usuario, escribir una contraseña o esperar un código por e-mail.

KlugRegister convierte ese paso en una sola foto con la cámara. El primer dispositivo crea un código QR; el segundo lo escanea con un escáner nativo y la app inicia sesión. El código QR lleva lo que tu app necesite, normalmente un código de un solo uso de tu servidor, nunca la contraseña en sí.

Ambas partes son nativas: los códigos QR los genera el sistema (nítidos a cualquier tamaño, como un BitmapData de AIR listo para mostrar) y el escáner es nativo: una vista de cámara a pantalla completa con tu propio texto de ayuda en iOS, y el escáner de códigos de Google en Android, que no necesita ningún permiso de cámara.

KlugRegister funciona en la versión actual de nuestras apps, nuestra prueba de concepto: tras el registro la app muestra un código QR y el segundo dispositivo se vincula en segundos, incluso justo después de instalar la app desde la tienda.

Funciones

  • Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
  • Crea códigos QR a partir de cualquier texto o URL, devueltos como BitmapData con una zona de silencio adecuada
  • Elige el tamaño en píxeles por módulo, nítido en cualquier pantalla
  • Escáner nativo de cámara a pantalla completa con tu propio texto de ayuda y botón de cancelar
  • Solicita el permiso de cámara e informa cuando se deniega
  • Android: escáner de códigos de Google de los servicios de Play, sin necesidad de permiso de cámara
  • Funciona en vertical y en horizontal, en teléfonos y tabletas
  • iOS y macOS: solo frameworks del sistema; Android: ZXing y el escáner de códigos de Google, resueltos automáticamente al empaquetar la app

Plataformas compatibles

Android crear + escanear
iOS crear + escanear · arm64
macOS crear + escanear (macOS 13+) · arm64 · x86_64
iPad en Mac crear + escanear

Donde una función no está disponible, isSupported e isScanSupported devuelven false, por lo que el mismo código puede permanecer en todas las apps.

Primeros pasos

Añade la extensión al descriptor de tu aplicación:

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

Para escanear en iOS, añade una descripción de uso de la cámara a InfoAdditions:

app.xml · InfoAdditions
<key>NSCameraUsageDescription</key>
<string>Scan the QR code of your first device</string>

Ejemplos de código

Cuatro flujos completos para vincular un segundo dispositivo. Crear un código es inmediato; el resultado del escáner llega como un KlugRegisterEvent. Documentación completa →

1 · Mostrar un código de vinculación en el primer dispositivo
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 · Escanearlo en el segundo dispositivo
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 · Canjear el código con tu servidor
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 · Cancelación y errores
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 );
    }
}

Resumen de la API

KlugRegister.getInstance()Devuelve la instancia única.
isSupportedVerdadero donde se pueden crear códigos QR (Android, iOS, macOS).
isScanSupportedVerdadero donde el escáner está disponible: Android, iOS y macOS 13 o posterior con cámara.
createQRCode(text, modulePx)Devuelve el código QR como BitmapData, negro sobre blanco, con una zona de silencio de 4 módulos; modulePx píxeles por módulo (8 por defecto). Null si no se pudo crear ningún código.
scanQRCode(hint, cancelTitle)Abre el escáner: a pantalla completa en iOS, una hoja en el Mac, el escáner de Google en Android (allí no se usan el texto de ayuda ni el título). El resultado llega como un evento. Devuelve false si ya hay un escáner abierto.
KlugRegisterEventtext, errorCode, errorMessage.

Eventos

KlugRegisterEvent.SCANNEDSe leyó un código; e.text contiene su contenido.
KlugRegisterEvent.CANCELEDEl usuario cerró el escáner.
KlugRegisterEvent.ERRORe.errorCode: denied (sin permiso de cámara) · nocamera en iOS y macOS; scanner · empty en Android. Detalles en e.errorMessage.

Compra KlugRegister

Una licencia anual para una aplicación AIR, con todas las actualizaciones durante 12 meses. Tras el pago recibes la extensión, la biblioteca ActionScript y la documentación por e-mail, normalmente en un día hábil. Licencia y términos

Simple
€19 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Sin soporte
Comprar Simple
Standard
€149 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Respuesta por e-mail en un plazo de 7 días
Comprar Standard
Priority
€299 / año
  • Licencia para una aplicación AIR
  • Todas las actualizaciones durante 12 meses
  • Respuesta por e-mail en un plazo de 48 horas
Comprar Priority
Link (Stripe) calcula los impuestos al pagar. Durante el pago indicas el ID de aplicación de tu app AIR.

Requisitos

AIR SDK51.x (HARMAN)
AndroidAndroid 6 o posterior, servicios de Google Play (escáner)
iOSiOS 13 o posterior
macOSmacOS 10.15 o posterior (crear códigos QR); macOS 13 o posterior para escanear
PermisosiOS y macOS: cámara, para escanear (NSCameraUsageDescription); Android: ninguno