← Все расширения

Нативное расширение

KlugSystem

com.klug.system

APM НЕ НУЖЕН. Скачайте и пользуйтесь. Проще уже некуда.

Системные службы, нужные каждому приложению, в одном небольшом расширении: открытие веб-страниц во встроенном браузере, определение, подключено ли устройство к сети — по Wi-Fi или мобильным данным, подтверждение пользователя по отпечатку пальца или Face ID и запрос оценки в магазине.

iOSAndroid В продакшене От €19 / год · Купить

Обзор

Справочные страницы, условия и политики конфиденциальности должны открываться внутри приложения, а не выбрасывать пользователя в браузер. Статус сети определяет, нужно ли предупреждать перед трансляцией по мобильным данным. Проверка отпечатка или Face ID заменяет ввод пароля на общем устройстве. KlugSystem охватывает все три задачи с помощью собственных компонентов системы.

Встроенный браузер — это Chrome Custom Tab на Android (дополнительная библиотека не нужна) и SFSafariViewController на iOS, с цветом вашей панели инструментов; приложение узнаёт, когда пользователь вернулся. Статус сети сообщает о доступности и о том, Wi-Fi это или мобильные данные, и отправляет событие при изменении. Биометрия использует BiometricPrompt на Android 9+ и LocalAuthentication на iOS; ошибки приходят с одинаковыми кодами на обеих платформах, поэтому один обработчик работает везде.

KlugSystem работает в следующем выпуске наших приложений, нашего доказательства работоспособности, — для справочных страниц, предупреждения о мобильных данных и подтверждения выхода с устройства.

Возможности

  • Автономность: один ANE, без базовой библиотеки и зависимых ANE
  • Встроенный браузер: Chrome Custom Tab (Android) / SFSafariViewController (iOS), цвет панели инструментов, событие закрытия
  • Сеть: доступность, Wi-Fi или мобильные данные, события изменения (ConnectivityManager / NWPathMonitor)
  • Биометрия: отпечаток пальца и Face ID / Touch ID с вашим текстом причины и подписью отмены
  • Одинаковые коды ошибок на обеих платформах (отмена, запасной вариант, блокировка, не настроено)
  • Без сторонних библиотек; на Android оценка в магазине использует собственную библиотеку отзывов Google Play
  • Проверка isSupported, поэтому один и тот же код работает на любой платформе

Поддерживаемые платформы

iOS браузер · сеть · Face ID / Touch ID · arm64
Android браузер · сеть · отпечаток пальца (Android 9+)

Устройства без биометрического датчика сообщают canAuthenticate = false, поэтому ваше приложение может вернуться к паролю.

Начало работы

Добавьте расширение в дескриптор вашего приложения:

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

Android: добавьте USE_BIOMETRIC, USE_FINGERPRINT и ACCESS_NETWORK_STATE в дополнения манифеста. iOS: добавьте NSFaceIDUsageDescription в InfoAdditions.

Примеры кода

Пять полных сценариев. Каждый вызов возвращается сразу; результаты браузера, сети и биометрии приходят как события типа KlugSystem.*. Полная документация →

1 · Открытие справочной страницы во встроенном браузере
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 · Предупреждение перед трансляцией по мобильным данным
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 · Подтверждение пользователя по отпечатку пальца или 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 · Запрос оценки в магазине
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 · Чистое завершение
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 );
}

Обзор API

KlugSystem.getInstance()Возвращает единственный экземпляр.
isSupportedTrue там, где есть нативная часть (iOS и Android).
openBrowser(url, toolbarColor)Открывает встроенный браузер, цвет панели инструментов 0xRRGGBB (по умолчанию белый). Возвращает false, если открыть не удалось; BROWSER_CLOSED, когда пользователь вернулся.
isReachable() / isWWAN()Онлайн вообще / на мобильных данных.
startNetworkWatch() / stopNetworkWatch()NETWORK_CHANGE при каждом изменении; в обработчике читайте isReachable() и isWWAN().
canAuthenticate(type)True, если биометрия доступна и настроена. iOS: BIOMETRY_FINGERPRINT = Touch ID, BIOMETRY_FACE = Face ID. Android 9+: BIOMETRY_FINGERPRINT = любая биометрия, BIOMETRY_FACE всегда false.
authenticate(reason, cancelLabel)Показывает системный запрос; AUTH_SUCCESS или AUTH_FAILED. Возвращает false, если запрос показать нельзя (Android ниже 9).
lastAuthErrorОшибка последнего AUTH_FAILED, числа iOS на обеих платформах: -1 сбой, -2 отмена, -3 запасной вариант, -4 системная отмена, -6 недоступно, -7 не настроено, -8 заблокировано.
cancelAuthenticate()Закрывает открытый запрос.
requestReview()Запрашивает у App Store или Google Play диалог оценки в приложении; магазин сам решает, показывать ли его.
BIOMETRY_FINGERPRINT, BIOMETRY_FACEТипы для canAuthenticate(): 1 и 2.

События

BROWSER_CLOSEDВстроенный браузер закрыт: «Готово» на iOS, возврат в приложение на Android.
NETWORK_CHANGEСеть изменилась (после startNetworkWatch()).
AUTH_SUCCESSПользователь подтверждён.
AUTH_FAILEDПодтверждения нет; причина в lastAuthError.

Купить KlugSystem

Годовая лицензия на одно приложение AIR со всеми обновлениями в течение 12 месяцев. После оплаты вы получаете расширение, библиотеку ActionScript и документацию по e-mail, обычно в течение одного рабочего дня. Лицензия и условия

Базовый
€19 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Без поддержки
Купить Базовый
Стандартный
€149 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 7 дней
Купить Стандартный
Приоритетный
€299 / год
  • Лицензия на одно приложение AIR
  • Все обновления в течение 12 месяцев
  • Ответ по e-mail в течение 48 часов
Купить Приоритетный
Налоги рассчитываются при оформлении заказа через Link (Stripe). ID приложения вашего приложения AIR вы указываете при оформлении заказа.

Требования

AIR SDK51.x (HARMAN)
iOSiOS 13 или новее
AndroidAndroid 6 или новее; биометрия — Android 9 или новее
РазрешенияAndroid: USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS: NSFaceIDUsageDescription