Überblick
Hilfeseiten, Nutzungsbedingungen und Datenschutzerklärungen sollten in der App aufgehen und den Nutzer nicht in einen Browser hinauswerfen. Der Netzwerkstatus entscheidet, ob vor dem Streamen über Mobilfunk gewarnt wird. Eine Fingerabdruck- oder Face-ID-Prüfung ersetzt die Passworteingabe auf einem gemeinsam genutzten Gerät. KlugSystem deckt alle drei mit den systemeigenen Komponenten ab.
Der In-App-Browser ist unter Android ein Chrome Custom Tab (keine zusätzliche Bibliothek nötig) und unter iOS SFSafariViewController, mit der Farbe Ihrer Symbolleiste; Ihre App erfährt, wann der Nutzer zurück ist. Der Netzwerkstatus meldet Erreichbarkeit sowie WLAN oder Mobilfunk und sendet bei einer Änderung ein Ereignis. Die Biometrie nutzt BiometricPrompt ab Android 9 und LocalAuthentication unter iOS; Fehler kommen auf beiden Plattformen mit denselben Fehlercodes, sodass ein Handler überall funktioniert.
KlugSystem läuft im nächsten Release unserer Apps, unseres Praxisbeweises, für Hilfeseiten, die Mobilfunk-Warnung und die Bestätigung einer Geräte-Abmeldung.
Funktionen
- Eigenständig: eine ANE, keine Kernbibliothek und keine abhängigen ANEs, die Sie ergänzen müssten
- In-App-Browser: Chrome Custom Tab (Android) / SFSafariViewController (iOS), Symbolleistenfarbe, Closed-Ereignis
- Netzwerk: erreichbar, WLAN oder Mobilfunk, Änderungsereignisse (ConnectivityManager / NWPathMonitor)
- Biometrie: Fingerabdruck und Face ID / Touch ID mit Ihrem Begründungstext und Abbrechen-Beschriftung
- Dieselben Fehlercodes auf beiden Plattformen (Abbruch, Fallback, gesperrt, nicht eingerichtet)
- Keine Bibliotheken von Drittanbietern; unter Android nutzt die Store-Bewertung die eigene Play-Review-Bibliothek von Google
- isSupported-Prüfung, sodass derselbe Code auf jeder Plattform läuft
Unterstützte Plattformen
Geräte ohne biometrischen Sensor melden canAuthenticate = false, sodass Ihre App auf das Passwort zurückfallen kann.
Erste Schritte
Fügen Sie die Erweiterung Ihrem Application Descriptor hinzu:
<extensions>
<extensionID>com.klug.system</extensionID>
</extensions>
Android: Fügen Sie USE_BIOMETRIC, USE_FINGERPRINT und ACCESS_NETWORK_STATE zu den Manifest-Ergänzungen hinzu. iOS: Fügen Sie NSFaceIDUsageDescription zu den InfoAdditions hinzu.
Codebeispiele
Fünf vollständige Abläufe. Jeder Aufruf kehrt sofort zurück; die Ergebnisse von Browser, Netzwerk und Biometrie kommen als Ereignisse vom Typ KlugSystem.* an. Vollständige Dokumentation →
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 }
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(); }
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 }
// 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
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-Übersicht
| KlugSystem.getInstance() | Gibt die einzige Instanz zurück. |
| isSupported | True, wo der native Teil vorhanden ist (iOS und Android). |
| openBrowser(url, toolbarColor) | Öffnet den In-App-Browser, Symbolleistenfarbe 0xRRGGBB (Standard Weiß). Gibt false zurück, wenn er nicht geöffnet werden konnte; BROWSER_CLOSED, wenn der Nutzer zurück ist. |
| isReachable() / isWWAN() | Überhaupt online / per Mobilfunk. |
| startNetworkWatch() / stopNetworkWatch() | NETWORK_CHANGE bei jeder Änderung; lesen Sie isReachable() und isWWAN() im Handler. |
| canAuthenticate(type) | True, wenn die Biometrie verfügbar und eingerichtet ist. iOS: BIOMETRY_FINGERPRINT = Touch ID, BIOMETRY_FACE = Face ID. Android 9+: BIOMETRY_FINGERPRINT = beliebige Biometrie, BIOMETRY_FACE immer false. |
| authenticate(reason, cancelLabel) | Zeigt die Systemabfrage; AUTH_SUCCESS oder AUTH_FAILED. Gibt false zurück, wenn keine Abfrage angezeigt werden kann (Android unter 9). |
| lastAuthError | Fehler des letzten AUTH_FAILED, iOS-Nummern auf beiden Plattformen: -1 fehlgeschlagen, -2 Abbruch, -3 Fallback, -4 Systemabbruch, -6 nicht verfügbar, -7 nicht eingerichtet, -8 gesperrt. |
| cancelAuthenticate() | Schließt eine laufende Abfrage. |
| requestReview() | Fordert beim App Store oder bei Google Play den In-App-Bewertungsdialog an; der Store entscheidet, ob er angezeigt wird. |
| BIOMETRY_FINGERPRINT, BIOMETRY_FACE | Typen für canAuthenticate(): 1 und 2. |
Ereignisse
| BROWSER_CLOSED | Der In-App-Browser wurde geschlossen: „Fertig“ unter iOS, zurück in Ihrer App unter Android. |
| NETWORK_CHANGE | Das Netzwerk hat sich geändert (nach startNetworkWatch()). |
| AUTH_SUCCESS | Der Nutzer wurde bestätigt. |
| AUTH_FAILED | Keine Bestätigung; der Grund steht in lastAuthError. |
KlugSystem kaufen
Eine Jahreslizenz für eine AIR-Anwendung, mit allen Updates für 12 Monate. Nach der Zahlung erhalten Sie die Erweiterung, die ActionScript-Bibliothek und die Dokumentation per E-Mail, in der Regel innerhalb eines Werktags. Lizenz und Bedingungen
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Kein Support
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Antwort per E-Mail innerhalb von 7 Tagen
- Lizenz für eine AIR-Anwendung
- Alle Updates für 12 Monate
- Antwort per E-Mail innerhalb von 48 Stunden
Voraussetzungen
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 13 oder neuer |
| Android | Android 6 oder neuer; Biometrie ab Android 9 |
| Berechtigungen | Android: USE_BIOMETRIC, USE_FINGERPRINT, ACCESS_NETWORK_STATE · iOS: NSFaceIDUsageDescription |