← Alle udvidelser

Native udvidelse

KlugAuth

com.klug.auth.KlugAuth

INGEN APM NØDVENDIG. Download og nyd. Det bliver ikke enklere.

Log ind med Apple og log ind med Google fra ActionScript, med systemets egne login-dialoger. Din app modtager et verificeret identitetstoken til din server, så brugere opretter en konto uden at finde på en adgangskode.

iOSAndroidmacOSiPad på Mac I produktion Fra €19 / år · Køb

Oversigt

De fleste brugere giver op ved registreringsformularen: et brugernavn, en adgangskode, de skal huske, en e-mailkode, der ryger i spam. Med KlugAuth trykker de på Fortsæt med Apple eller Fortsæt med Google og er færdige.

KlugAuth viser hver platforms native login: Apples dialog med Face ID / Touch ID på iOS og macOS, Androids kontodialog (Credential Manager) til Google og systemets login-vindue til Google på iOS og macOS. Den returnerer udbyderens identitetstoken sammen med din nonce, klar til verificering på din server, plus Apples autorisationskode, som du skal bruge for at tilbagekalde forbindelsen, når en konto slettes (App Store-retningslinje 5.1.1(v)).

Ingen Google SDK er medleveret: Google-login på iOS og macOS bruger det standardiserede OAuth-flow med PKCE i systemets browserdialog, så udvidelsen forbliver lille.

KlugAuth kører i den aktuelle udgave af vores apps, vores proof of concept, til registrering, login og bekræftelse af en enheds logout med Apple eller Google.

Funktioner

  • Selvstændig: én ANE, intet kernebibliotek eller afhængige ANE'er at tilføje
  • Log ind med Apple på iOS 13+, macOS 10.15+ og iPad-apps på Mac'er med Apple silicon
  • Log ind med Google på Android (Credential Manager) og på iOS / macOS (systemets login-vindue, ingen Google SDK)
  • Identitetstoken, bruger-ID, e-mail og navn; Apples autorisationskode til fornyelse og tilbagekaldelse
  • Nonce-hjælper til replay-beskyttelse (Apple bærer dens SHA-256, Google den rå værdi)
  • Kontrol af Apples credential-tilstand (authorized / revoked) for tilbagevendende brugere
  • Separate hændelser for succes, annullering og fejl; annullering rapporteres, aldrig som fejl

Understøttede platforme

iOS Apple + Google · arm64
Android Google · Credential Manager
macOS Apple + Google · arm64 · x86_64
iPad på Mac Apple + Google

Log ind med Apple på Android er muligt med Apples webflow og en lille serverside; det kan vi levere som en del af et projekt. isSupported (Apple) og isGoogleSupported fortæller din kode, hvad enheden tilbyder.

Kom i gang

Tilføj udvidelsen til din applikationsdescriptor:

app.xml
<extensions>
    <extensionID>com.klug.auth.KlugAuth</extensionID>
</extensions>

Til Log ind med Apple skal du tilføje entitlementet (iOS: Entitlements i descriptoren; macOS: ved signering):

app.xml · Entitlements
<key>com.apple.developer.applesignin</key>
<array><string>Default</string></array>

Til Google skal du oprette OAuth-klienter i Google Cloud-konsollen: en webklient (dens ID er token-audience på Android), en Android-klient med dit pakkenavn og SHA-1, og en iOS-klient til iOS og macOS.

Kodeeksempler

Fem komplette flows, fra knapperne til din server. Hvert kald vender straks tilbage; resultater ankommer som KlugAuthEvents. Fuld dokumentation →

1 · Tilbyd det, enheden understøtter
SignIn.as
import com.klug.auth.KlugAuth;
import com.klug.auth.KlugAuthEvent;

var auth:KlugAuth = KlugAuth.getInstance();
var nonce:String = "";   // a fresh one for every attempt

appleButton.visible  = auth.isSupported;         // iOS 13+, macOS 10.15+, iPad apps on the Mac
googleButton.visible = auth.isGoogleSupported;   // Android, iOS 13+, macOS 10.15+

auth.addEventListener( KlugAuthEvent.APPLE_SUCCESS,   onAppleSuccess );
auth.addEventListener( KlugAuthEvent.APPLE_CANCELED,  onCanceled );
auth.addEventListener( KlugAuthEvent.APPLE_ERROR,     onError );
auth.addEventListener( KlugAuthEvent.GOOGLE_SUCCESS,  onGoogleSuccess );
auth.addEventListener( KlugAuthEvent.GOOGLE_CANCELED, onCanceled );
auth.addEventListener( KlugAuthEvent.GOOGLE_ERROR,    onError );
2 · Log ind med Apple
Apple.as
function signInWithApple():void
{
    nonce = KlugAuth.generateNonce();          // 32 random bytes as hex, used once
    if ( !auth.signInWithApple( nonce ) )      // false: not supported, or a sheet is already open
        showMessage( "Sign in with Apple is not available." );   // your app function
}

function onAppleSuccess( e:KlugAuthEvent ):void
{
    // the token carries SHA-256 of the nonce: the server hashes the raw value and compares
    sendToServer( "apple", e.identityToken, nonce, e.fullName, e.authorizationCode );
    saveAppleUserID( e.userID );   // stable for this Apple ID; your app function
    // e.email and the names arrive only on the FIRST authorization;
    // the e-mail is always inside the identity token
}

// your app function: the server verifies the token and signs the user in
function sendToServer( provider:String, idToken:String, rawNonce:String,
                       name:String, appleCode:String = "" ):void
{
    var vars:URLVariables = new URLVariables();
    vars.provider = provider;
    vars.id_token = idToken;
    vars.nonce    = rawNonce;
    vars.name     = name;
    if ( appleCode != "" ) vars.code = appleCode;   // lets the server revoke the link later

    var req:URLRequest = new URLRequest( "https://your.server/auth" );
    req.method = URLRequestMethod.POST;
    req.data = vars;
    var loader:URLLoader = new URLLoader();
    loader.addEventListener( Event.COMPLETE, onServerAnswer );   // your app function
    loader.load( req );
}
3 · Log ind med Google
Google.as
import flash.system.Capabilities;

// Android: the WEB client ID, which is the token audience on your server.
// iOS and macOS: the iOS client ID, used in the system sign-in window.
var googleClientId:String = Capabilities.manufacturer.indexOf( "Android" ) >= 0
    ? "YOUR_WEB_CLIENT_ID.apps.googleusercontent.com"
    : "YOUR_IOS_CLIENT_ID.apps.googleusercontent.com";

function signInWithGoogle():void
{
    nonce = KlugAuth.generateNonce();         // Google puts the raw value into the token
    if ( !auth.signInWithGoogle( googleClientId, nonce ) )   // false: no client ID, or already open
        showMessage( "Google sign-in could not start." );
}

function onGoogleSuccess( e:KlugAuthEvent ):void
{
    // e.userID is the account e-mail; names arrive every time
    sendToServer( "google", e.identityToken, nonce, e.fullName );
}
4 · Annullering og fejl
Errors.as
function onCanceled( e:KlugAuthEvent ):void
{
    // the user closed the sheet: not an error, simply stay on the start screen
}

function onError( e:KlugAuthEvent ):void
{
    if ( e.type == KlugAuthEvent.GOOGLE_ERROR && e.errorCode == "NO_ACCOUNT" )
        showMessage( "Please add a Google account to this device first." );   // Android
    else
        showMessage( "Sign-in failed: " + e.errorMessage );   // e.errorCode for your log
}
5 · Kontrollér en tilbagevendende Apple-bruger
Startup.as
auth.addEventListener( KlugAuthEvent.APPLE_CREDENTIAL_STATE, function( e:KlugAuthEvent ):void {
    // e.state: authorized | revoked | notFound | transferred | unknown
    if ( e.state == "revoked" || e.state == "notFound" )
        signOut();   // your app function: the user removed the app from their Apple ID
});

var savedID:String = loadAppleUserID();   // stored after APPLE_SUCCESS; your app function
if ( auth.isSupported && savedID != "" )
    auth.getCredentialState( savedID );      // Apple only: iOS and macOS

API-oversigt

KlugAuth.getInstance()Returnerer den enkelte instans.
isSupportedSand, hvor Log ind med Apple er tilgængeligt (iOS, macOS).
isGoogleSupportedSand, hvor Log ind med Google er tilgængeligt (Android, iOS, macOS).
generateNonce()Statisk. En ny tilfældig nonce (32 bytes som hex); brug den én gang, og send den samme værdi til din server.
signInWithApple(nonce)Åbner Apples login-dialog. Returnerer false, hvis den ikke kunne starte (ikke understøttet, eller et login kører allerede).
signInWithGoogle(clientId, nonce)Åbner Google-login. Android: web-klient-ID'et; iOS / macOS: iOS-klient-ID'et. Returnerer false, hvis den ikke kunne starte.
getCredentialState(userID)Spørger Apple, om brugeren stadig er autoriseret; svaret ankommer som APPLE_CREDENTIAL_STATE. iOS og macOS.
KlugAuthEventidentityToken, authorizationCode, userID, email, givenName, familyName, fullName, state, errorCode, errorMessage.

Events

APPLE_SUCCESSidentityToken, authorizationCode, userID; email og navne kun ved den første autorisation.
APPLE_CANCELEDBrugeren lukkede dialogen.
APPLE_ERRORerrorCode og errorMessage fra systemet.
APPLE_CREDENTIAL_STATEuserID og state: authorized · revoked · notFound · transferred · unknown
GOOGLE_SUCCESSidentityToken, userID (kontoens e-mail), email, givenName, familyName.
GOOGLE_CANCELEDBrugeren lukkede dialogen.
GOOGLE_ERRORerrorCode og errorMessage; på Android NO_ACCOUNT, når enheden ikke har nogen Google-konto.

Køb KlugAuth

En årlig licens til én AIR-applikation, med alle opdateringer i 12 måneder. Efter betaling modtager du udvidelsen, ActionScript-biblioteket og dokumentationen pr. e-mail, normalt inden for én hverdag. Licens og vilkår

Enkel
€19 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Ingen support
Køb Enkel
Standard
€149 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 7 dage
Køb Standard
Prioritet
€299 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 48 timer
Køb Prioritet
Moms og afgifter beregnes ved checkout af Link (Stripe). Du angiver application ID'et for din AIR-app under checkout.

Krav

AIR SDK51.x (HARMAN)
iOSiOS 13 eller nyere
AndroidAndroid 6 eller nyere, Google Play-tjenester
macOSmacOS 10.15 eller nyere
AppleCapability'en Log ind med Apple på dit App ID
GoogleOAuth-klienter i Google Cloud-konsollen