← Todas las extensiones

Extensión nativa

KlugSystem

com.klug.system

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

Los servicios del sistema que toda app necesita, en una pequeña extensión: abre páginas web en un navegador integrado, sabe si el dispositivo está en línea y si usa Wi-Fi o datos móviles, confirma la identidad del usuario con huella dactilar o Face ID y solicita una valoración en la tienda.

iOSAndroid En producción Desde €19 / año · Comprar

Resumen

Las páginas de ayuda, los términos y las políticas de privacidad deben abrirse dentro de la app, no sacar al usuario a un navegador. El estado de la red decide si avisar antes de hacer streaming con datos móviles. Una comprobación con huella dactilar o Face ID sustituye a escribir una contraseña en un dispositivo compartido. KlugSystem cubre los tres casos con los componentes propios del sistema.

El navegador integrado es un Chrome Custom Tab en Android (sin necesidad de bibliotecas adicionales) y SFSafariViewController en iOS, con el color de barra de herramientas que elijas; tu app recibe un aviso cuando el usuario vuelve. El estado de la red informa de la conectividad y de Wi-Fi frente a datos móviles, y envía un evento cuando cambia. La biometría usa BiometricPrompt en Android 9+ y LocalAuthentication en iOS; los fallos llegan con los mismos códigos de error en ambas plataformas, así que un único manejador funciona en todas partes.

KlugSystem se incluirá en la próxima versión de nuestras apps, nuestra prueba de concepto, para las páginas de ayuda, el aviso de datos móviles y la confirmación del cierre de sesión de un dispositivo.

Funciones

  • Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
  • Navegador integrado: Chrome Custom Tab (Android) / SFSafariViewController (iOS), color de la barra de herramientas, evento de cierre
  • Red: conectividad, Wi-Fi o datos móviles, eventos de cambio (ConnectivityManager / NWPathMonitor)
  • Biometría: huella dactilar y Face ID / Touch ID con tu texto de motivo y la etiqueta de cancelar
  • Mismos códigos de error en ambas plataformas (cancelar, alternativa, bloqueado, sin registrar)
  • Sin bibliotecas de terceros; en Android la valoración en la tienda usa la propia biblioteca de reseñas de Google Play
  • Comprobación isSupported, por lo que el mismo código funciona en todas las plataformas

Plataformas compatibles

iOS navegador · red · Face ID / Touch ID · arm64
Android navegador · red · huella dactilar (Android 9+)

Los dispositivos sin sensor biométrico informan canAuthenticate = false, para que tu app pueda recurrir a la contraseña.

Primeros pasos

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

app.xml
<extensions>
    <extensionID>com.klug.system</extensionID>
</extensions>

Android: añade USE_BIOMETRIC, USE_FINGERPRINT y ACCESS_NETWORK_STATE a las adiciones del manifiesto. iOS: añade NSFaceIDUsageDescription a InfoAdditions.

Ejemplos de código

Cinco flujos completos. Cada llamada devuelve de inmediato; los resultados del navegador, la red y la biometría llegan como eventos de tipo KlugSystem.*. Documentación completa →

1 · Abrir una página de ayuda en el navegador integrado
Help.as
import com.klug.system.KlugSystem;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.navigateToURL;

var sys:KlugSystem = KlugSystem.getInstance();
sys.addEventListener( KlugSystem.BROWSER_CLOSED, onBrowserClosed );

function openHelp():void
{
    var url:String = "https://example.com/help";
    // false: not supported here, or no browser could open the page
    if ( !sys.isSupported || !sys.openBrowser( url, 0x2B2B2B ) )   // toolbar 0xRRGGBB
        navigateToURL( new URLRequest( url ) );
}

function onBrowserClosed( e:Event ):void
{
    // iOS: the user tapped Done. Android: your app is in the foreground again.
    refreshAccount();   // your app
}
2 · Avisar antes de hacer streaming con datos móviles
Network.as
sys.addEventListener( KlugSystem.NETWORK_CHANGE, onNetworkChange );
sys.startNetworkWatch();   // the first event usually arrives right away

function onNetworkChange( e:Event ):void
{
    // the event carries no detail: ask for the current state
    if ( !sys.isReachable() )  showOfflineBanner();       // your app
    else if ( sys.isWWAN() )   showMobileDataWarning();   // on mobile data
    else                       hideBanners();
}
3 · Confirmar al usuario con huella dactilar o Face ID
Confirm.as
sys.addEventListener( KlugSystem.AUTH_SUCCESS, onAuthOk );
sys.addEventListener( KlugSystem.AUTH_FAILED,  onAuthFailed );

function confirmLogout():void
{
    // iOS: 1 = Touch ID, 2 = Face ID.
    // Android 9+: 1 = any enrolled biometric; 2 is always false there.
    var bio:Boolean = sys.canAuthenticate( KlugSystem.BIOMETRY_FINGERPRINT )
                   || sys.canAuthenticate( KlugSystem.BIOMETRY_FACE );

    if ( !bio || !sys.authenticate( "Confirm to log out", "Cancel" ) )
        askForPassword();   // no sensor, nothing enrolled, or Android below 9
}

function onAuthOk( e:Event ):void
{
    logOut();   // your app
}

function onAuthFailed( e:Event ):void
{
    // iOS error numbers on both platforms
    if ( sys.lastAuthError == -2 ) return;   // the user tapped Cancel
    askForPassword();   // -3 fallback (iOS), -8 locked out, -4 system cancel, -1 failed
}
4 · Solicitar una valoración en la tienda
Rating.as
// after a good moment, for example the tenth successful session
if ( sessionCount == 10 )   // your app's counter
    sys.requestReview();

// the store decides whether the dialog really appears:
// iOS at most 3 times in 365 days and never in TestFlight;
// Google Play has its own quota and never shows it for sideloaded installs
5 · Cierre limpio
Shutdown.as
function leaveScreen():void
{
    sys.stopNetworkWatch();
    sys.cancelAuthenticate();   // closes a running prompt; AUTH_FAILED may follow

    sys.removeEventListener( KlugSystem.NETWORK_CHANGE, onNetworkChange );
    sys.removeEventListener( KlugSystem.AUTH_SUCCESS, onAuthOk );
    sys.removeEventListener( KlugSystem.AUTH_FAILED, onAuthFailed );
}

Resumen de la API

KlugSystem.getInstance()Devuelve la instancia única.
isSupportedVerdadero donde existe la parte nativa (iOS y Android).
openBrowser(url, toolbarColor)Abre el navegador integrado, color de la barra de herramientas 0xRRGGBB (blanco por defecto). Devuelve false si no pudo abrirse; BROWSER_CLOSED cuando el usuario vuelve.
isReachable() / isWWAN()En línea en general / con datos móviles.
startNetworkWatch() / stopNetworkWatch()NETWORK_CHANGE en cada cambio; lee isReachable() e isWWAN() en el manejador.
canAuthenticate(type)Verdadero si la biometría está disponible y registrada. iOS: BIOMETRY_FINGERPRINT = Touch ID, BIOMETRY_FACE = Face ID. Android 9+: BIOMETRY_FINGERPRINT = cualquier biometría, BIOMETRY_FACE siempre falso.
authenticate(reason, cancelLabel)Muestra el aviso del sistema; AUTH_SUCCESS o AUTH_FAILED. Devuelve false si no se puede mostrar ningún aviso (Android anterior a 9).
lastAuthErrorError del último AUTH_FAILED, con los números de iOS en ambas plataformas: -1 falló, -2 cancelar, -3 alternativa, -4 cancelación del sistema, -6 no disponible, -7 sin registrar, -8 bloqueado.
cancelAuthenticate()Cierra un aviso en curso.
requestReview()Solicita a la App Store o a Google Play el diálogo de valoración integrado; la tienda decide si se muestra.
BIOMETRY_FINGERPRINT, BIOMETRY_FACETipos para canAuthenticate(): 1 y 2.

Eventos

BROWSER_CLOSEDEl navegador integrado se cierra: Done en iOS, vuelta a tu app en Android.
NETWORK_CHANGELa red cambió (tras startNetworkWatch()).
AUTH_SUCCESSSe confirmó la identidad del usuario.
AUTH_FAILEDSin confirmación; el motivo está en lastAuthError.

Compra KlugSystem

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)
iOSiOS 13 o posterior
AndroidAndroid 6 o posterior; biometría Android 9 o posterior
PermisosAndroid: USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS: NSFaceIDUsageDescription