← Alla tillägg

Inbyggt tillägg

KlugAuth

com.klug.auth.KlugAuth

INGEN APM BEHÖVS. Ladda ner och njut. Det blir inte enklare än så.

Sign in with Apple och Sign in with Google från ActionScript, med systemets inloggningsrutor. Din app får en verifierad identitetstoken för din server, så att användare skapar ett konto utan att hitta på ett lösenord.

iOSAndroidmacOSiPad på Mac I produktion Från €19 / år · Köp

Översikt

De flesta användare ger upp vid registreringsformuläret: ett användarnamn, ett lösenord de måste komma ihåg, en e-postkod som hamnar i skräpposten. Med KlugAuth trycker de på Continue with Apple eller Continue with Google och är klara.

KlugAuth visar den inbyggda inloggningen för varje plattform: Apples ruta med Face ID / Touch ID på iOS och macOS, Androids kontoruta (Credential Manager) för Google, och systemets inloggningsfönster för Google på iOS och macOS. Den returnerar leverantörens identitetstoken tillsammans med din nonce, redo för verifiering på din server, samt den Apple-auktoriseringskod du behöver för att återkalla kopplingen när ett konto raderas (App Store-riktlinje 5.1.1(v)).

Ingen Google SDK ingår: Google-inloggning på iOS och macOS använder standardflödet OAuth med PKCE i systemets webbläsarruta, så att tillägget förblir litet.

KlugAuth körs i den aktuella versionen av våra appar, vårt proof of concept, för registrering, inloggning och bekräftelse av utloggning från en enhet med Apple eller Google.

Funktioner

  • Fristående: ett ANE, inget kärnbibliotek eller beroende-ANE:er att lägga till
  • Sign in with Apple på iOS 13+, macOS 10.15+ och iPad-appar på Mac med Apple silicon
  • Sign in with Google på Android (Credential Manager) och på iOS / macOS (systemets inloggningsfönster, ingen Google SDK)
  • Identitetstoken, användar-ID, e-post och namn; Apple-auktoriseringskod för förnyelse och återkallelse
  • Nonce-hjälpare för skydd mot replay-attacker (Apple bär dess SHA-256, Google det råa värdet)
  • Kontroll av Apples credential state (authorized / revoked) för återvändande användare
  • Separata händelser för lyckat resultat, avbrott och fel; avbrott rapporteras, aldrig som fel

Plattformar som stöds

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

Sign in with Apple på Android är möjligt med Apples webbflöde och en liten serversida; det kan vi leverera som en del av ett projekt. isSupported (Apple) och isGoogleSupported talar om för din kod vad enheten erbjuder.

Kom igång

Lägg till tillägget i din applikationsbeskrivning (application descriptor):

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

För Sign in with Apple lägger du till entitlement (iOS: Entitlements i descriptor; macOS: vid signeringen):

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

För Google skapar du OAuth-klienter i Google Cloud-konsolen: en webbklient (dess ID är token-audience på Android), en Android-klient med ditt paketnamn och SHA-1, och en iOS-klient för iOS och macOS.

Kodexempel

Fem kompletta flöden, från knapparna till din server. Varje anrop returnerar direkt; resultat kommer som KlugAuthEvents. Fullständig dokumentation →

1 · Erbjud det enheten stöder
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 · Sign in with 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 · Sign in with 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 · Avbrott och fel
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 · Kontrollera en återvändande Apple-användare
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-översikt

KlugAuth.getInstance()Returnerar den enda instansen.
isSupportedTrue där Sign in with Apple är tillgängligt (iOS, macOS).
isGoogleSupportedTrue där Sign in with Google är tillgängligt (Android, iOS, macOS).
generateNonce()Statisk. En ny slumpmässig nonce (32 byte som hex); använd den en gång och skicka samma värde till din server.
signInWithApple(nonce)Öppnar Apples inloggningsruta. Returnerar false om den inte kunde starta (stöds inte, eller en inloggning pågår redan).
signInWithGoogle(clientId, nonce)Öppnar Google-inloggning. Android: webbklientens ID; iOS / macOS: iOS-klientens ID. Returnerar false om den inte kunde starta.
getCredentialState(userID)Frågar Apple om användaren fortfarande är auktoriserad; svaret kommer som APPLE_CREDENTIAL_STATE. iOS och macOS.
KlugAuthEventidentityToken, authorizationCode, userID, email, givenName, familyName, fullName, state, errorCode, errorMessage.

Händelser

APPLE_SUCCESSidentityToken, authorizationCode, userID; email och namn endast vid den första auktoriseringen.
APPLE_CANCELEDAnvändaren stängde rutan.
APPLE_ERRORerrorCode och errorMessage från systemet.
APPLE_CREDENTIAL_STATEuserID och state: authorized · revoked · notFound · transferred · unknown
GOOGLE_SUCCESSidentityToken, userID (kontots e-postadress), email, givenName, familyName.
GOOGLE_CANCELEDAnvändaren stängde rutan.
GOOGLE_ERRORerrorCode och errorMessage; på Android NO_ACCOUNT när enheten saknar Google-konto.

Köp KlugAuth

En årslicens för en AIR-applikation, med alla uppdateringar i 12 månader. Efter betalning får du tillägget, ActionScript-biblioteket och dokumentationen via e-post, vanligtvis inom en arbetsdag. Licens och villkor

Enkel
€19 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Ingen support
Köp Enkel
Standard
€149 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Svar via e-post inom 7 dagar
Köp Standard
Prioritet
€299 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Svar via e-post inom 48 timmar
Köp Prioritet
Skatter beräknas i kassan av Link (Stripe). Du anger application ID för din AIR-app under köpet.

Krav

AIR SDK51.x (HARMAN)
iOSiOS 13 eller senare
AndroidAndroid 6 eller senare, Google Play services
macOSmacOS 10.15 eller senare
AppleCapability Sign in with Apple på ditt App ID
GoogleOAuth-klienter i Google Cloud-konsolen