← Todas as extensões

Extensão nativa

KlugSystem

com.klug.system

NÃO É NECESSÁRIO APM. Baixe e aproveite. Não tem como ser mais simples.

Os serviços de sistema de que todo app precisa, em uma pequena extensão: abrir páginas web em um navegador integrado ao app, saber se o dispositivo está online e em Wi-Fi ou dados móveis, confirmar o usuário com impressão digital ou Face ID e pedir uma avaliação na loja.

iOSAndroid Em produção A partir de €19 / ano · Comprar

Visão geral

Páginas de ajuda, termos e políticas de privacidade devem abrir dentro do app, sem jogar o usuário para um navegador. O status da rede decide se é preciso avisar antes de transmitir em dados móveis. Uma verificação por impressão digital ou Face ID substitui a digitação de uma senha em um dispositivo compartilhado. O KlugSystem cobre os três casos com os componentes do próprio sistema.

O navegador integrado é uma Chrome Custom Tab no Android (sem biblioteca extra) e o SFSafariViewController no iOS, com a cor da sua barra de ferramentas; seu app é avisado quando o usuário volta. O status da rede informa a conectividade e Wi-Fi versus dados móveis, e envia um evento quando algo muda. A biometria usa o BiometricPrompt no Android 9+ e o LocalAuthentication no iOS; as falhas vêm com os mesmos códigos de erro nas duas plataformas, então um único handler funciona em todo lugar.

O KlugSystem roda na próxima versão de nossos apps, nossa prova de conceito, para páginas de ajuda, o aviso de dados móveis e a confirmação de logout de um dispositivo.

Recursos

  • Autossuficiente: uma ANE, sem biblioteca principal nem ANEs de dependência para adicionar
  • Navegador integrado: Chrome Custom Tab (Android) / SFSafariViewController (iOS), cor da barra de ferramentas, evento de fechamento
  • Rede: acessível, Wi-Fi ou dados móveis, eventos de mudança (ConnectivityManager / NWPathMonitor)
  • Biometria: impressão digital e Face ID / Touch ID com o seu texto de motivo e o rótulo de cancelar
  • Mesmos códigos de erro nas duas plataformas (cancelar, alternativa, bloqueado, não cadastrado)
  • Sem bibliotecas de terceiros; no Android, a avaliação na loja usa a própria biblioteca de avaliações do Google Play
  • Verificação isSupported, para que o mesmo código rode em todas as plataformas

Plataformas compatíveis

iOS navegador · rede · Face ID / Touch ID · arm64
Android navegador · rede · impressão digital (Android 9+)

Dispositivos sem sensor biométrico informam canAuthenticate = false, para que o seu app possa recorrer à senha.

Primeiros passos

Adicione a extensão ao descritor do seu aplicativo:

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

Android: adicione USE_BIOMETRIC, USE_FINGERPRINT e ACCESS_NETWORK_STATE às adições do manifesto. iOS: adicione NSFaceIDUsageDescription às InfoAdditions.

Exemplos de código

Cinco fluxos completos. Cada chamada retorna imediatamente; os resultados do navegador, da rede e da biometria chegam como eventos do tipo KlugSystem.*. Documentação completa →

1 · Abrir uma página de ajuda no 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 transmitir em dados móveis
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 o usuário com impressão digital ou 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 · Pedir uma avaliação na loja
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 · Encerramento limpo
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 );
}

Visão geral da API

KlugSystem.getInstance()Retorna a instância única.
isSupportedVerdadeiro onde a parte nativa está presente (iOS e Android).
openBrowser(url, toolbarColor)Abre o navegador integrado, cor da barra de ferramentas 0xRRGGBB (padrão: branco). Retorna false se não conseguiu abrir; BROWSER_CLOSED quando o usuário volta.
isReachable() / isWWAN()Online de qualquer forma / em dados móveis.
startNetworkWatch() / stopNetworkWatch()NETWORK_CHANGE a cada mudança; leia isReachable() e isWWAN() no handler.
canAuthenticate(type)Verdadeiro se a biometria está disponível e cadastrada. iOS: BIOMETRY_FINGERPRINT = Touch ID, BIOMETRY_FACE = Face ID. Android 9+: BIOMETRY_FINGERPRINT = qualquer biometria, BIOMETRY_FACE sempre falso.
authenticate(reason, cancelLabel)Mostra o prompt do sistema; AUTH_SUCCESS ou AUTH_FAILED. Retorna false se nenhum prompt puder ser exibido (Android abaixo de 9).
lastAuthErrorErro do último AUTH_FAILED, com os números do iOS nas duas plataformas: -1 falhou, -2 cancelado, -3 alternativa, -4 cancelado pelo sistema, -6 indisponível, -7 não cadastrado, -8 bloqueado.
cancelAuthenticate()Fecha um prompt em andamento.
requestReview()Pede à App Store ou ao Google Play o diálogo de avaliação dentro do app; a loja decide se ele aparece.
BIOMETRY_FINGERPRINT, BIOMETRY_FACETipos para canAuthenticate(): 1 e 2.

Eventos

BROWSER_CLOSEDO navegador integrado foi fechado: Concluído no iOS, de volta ao seu app no Android.
NETWORK_CHANGEA rede mudou (após startNetworkWatch()).
AUTH_SUCCESSO usuário foi confirmado.
AUTH_FAILEDSem confirmação; o motivo está em lastAuthError.

Compre o KlugSystem

Uma licença anual para um app AIR, com todas as atualizações por 12 meses. Após o pagamento, você recebe a extensão, a biblioteca ActionScript e a documentação por e-mail, normalmente em até um dia útil. Licença e termos

Simples
€19 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Sem suporte
Comprar Simples
Padrão
€149 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Resposta por e-mail em até 7 dias
Comprar Padrão
Prioritário
€299 / ano
  • Licença para um app AIR
  • Todas as atualizações por 12 meses
  • Resposta por e-mail em até 48 horas
Comprar Prioritário
Os impostos são calculados no checkout pelo Link (Stripe). Você informa o ID do aplicativo do seu app AIR durante o checkout.

Requisitos

AIR SDK51.x (HARMAN)
iOSiOS 13 ou posterior
AndroidAndroid 6 ou posterior; biometria no Android 9 ou posterior
PermissõesAndroid: USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS: NSFaceIDUsageDescription