Sdílet prostřednictvím


Kurz: Přidání registrace do mobilní aplikace pro Android pomocí nativního ověřování

Tento kurz ukazuje, jak zaregistrovat uživatele pomocí jednorázového hesla e-mailu nebo uživatelského jména (e-mailu) a hesla a shromažďovat atributy uživatele v mobilní aplikaci pro Android pomocí nativního ověřování.

V tomto kurzu se naučíte:

  • Zaregistrujte uživatele pomocí jednorázového hesla e-mailu nebo uživatelského jména (e-mailu) a hesla.
  • Shromážděte atributy uživatele během registrace.
  • Zpracování chyb registrace

Požadavky

Registrace uživatele

Pokud chcete zaregistrovat uživatele pomocí jednorázového hesla nebo uživatelského jména (e-mailu) a hesla, shromáždíte e-mail od uživatele a odešlete mu e-mail obsahující jednorázový přístupový kód e-mailu. Uživatel zadá platný jednorázový přístupový kód e-mailu, který ověří své uživatelské jméno.

Pokud se chcete zaregistrovat uživatele, musíte:

  1. Vytvořte uživatelské rozhraní pro:

    • Shromážděte e-mail od uživatele. Přidejte do vstupů ověření, abyste měli jistotu, že uživatel zadá platnou e-mailovou adresu.
    • Pokud se zaregistrujete pomocí uživatelského jména (e-mailu) a hesla, shromážděte heslo.
    • Shromážděte jednorázový přístupový kód e-mailu od uživatele.
    • V případě potřeby shromážděte atributy uživatele.
    • Znovu odeslat jednorázové heslo (doporučeno).
    • Spusťte tok registrace.
  2. V aplikaci přidejte tlačítko, jehož výběr události aktivuje následující fragment kódu:

    CoroutineScope(Dispatchers.Main).launch {
        val actionResult = authClient.signUp(
            username = emailAddress
            //password = password, Pass 'password' param if you sign up with username (email) and password
        )
        if (actionResult is SignUpResult.CodeRequired) {
            val nextState = actionResult.nextState
            val submitCodeActionResult = nextState.submitCode(
                code = code
            )
            if (submitCodeActionResult is SignUpResult.Complete) {
                // Handle sign up success
            }
        }
    }
    
    • Pomocí metody signUp(username) instance sady SDK spusťte tok registrace.
      • Pokud se chcete zaregistrovat pomocí uživatelského jména (e-mailové adresy) a hesla, předejte funkci parametr signUp signUp(username, password)hesla.
    • Parametr metody je pak e-mailová adresa, usernamekterou od uživatele shromažďujete.
    • Ve většině běžných scénářů signUp(username) vrátí nebo signUp(username, password) vrátí výsledek, který značí, SignUpResult.CodeRequiredže sada SDK očekává, že aplikace odešle e-mail jednorázovým heslem odeslaný na e-mailovou adresu uživatele.
    • Objekt SignUpResult.CodeRequired obsahuje nový odkaz na stav, který můžeme načíst prostřednictvím actionResult.nextState.
    • Nový stav nám dává přístup ke dvěma novým metodám:
      • submitCode() odešle jednorázový přístupový kód e-mailu, který aplikace shromažďuje od uživatele.
      • resendCode() Odešle e-mail jednorázový přístupový kód, pokud uživatel kód neobdrží.
    • Vrátí submitCode() hodnotu SignUpResult.Complete, která označuje, že tok je dokončený a uživatel byl zaregistrovaný.
    • Nebo signUp(username) signUp(username, password) se také může vrátit SignUpError k označení, že došlo k chybě.

Shromažďování atributů uživatele během registrace

Bez ohledu na to, jestli si zaregistrujete uživatele pomocí jednorázového hesla e-mailu nebo uživatelského jména (e-mailu) a hesla, můžete před vytvořením účtu uživatele shromažďovat atributy uživatele:

  • Metoda signUp() přijímá attributes parametr, jako signUp(username, attributes):

        CoroutineScope(Dispatchers.Main).launch {
            val actionResult = authClient.signUp(
                username = emailAddress,
                attributes = userAttributes
                //password = password, Pass 'password' param if you sign up with username (email) and password
            )
            //...
        }
    
  • Sada Android SDK poskytuje třídu UserAttribute.Builder nástrojů, kterou používáte k vytváření atributů uživatele. Pokud například chcete odeslat atributy uživatele města a země , pomocí následujícího fragmentu kódu vytvořte proměnnou userAttributes :

         val userAttributes = UserAttributes.Builder ()
        .country(country) 
        .city(city) 
        .build()   
    

    Názvy metod ve UserAttribute.Builder třídě jsou stejné jako programovatelné názvy atributů uživatele, které sestavují. Přečtěte si další informace o tvůrci atributů sady Android SDK.

  • Nebo signUp(username, attributes) signUp(username, attributes, password)metoda se může vrátit SignUpResult.AttributesRequired a indikovat, že aplikace musí odeslat jeden nebo více požadovaných atributů, než Microsoft Entra vytvoří účet. Tyto atributy konfiguruje správce jako povinné v Centru pro správu Microsoft Entra. Microsoft Entra explicitně nepožádá o volitelné atributy uživatele.

  • Výsledek SignUpResult.AttributesRequired obsahuje requiredAttributes parametr. requiredAttributes je seznam RequiredUserAttribute objektů, které obsahují podrobnosti o atributech uživatele, které aplikace potřebuje odeslat. Pro zpracování actionResult is SignUpResult.AttributesRequiredpoužijte následující fragment kódu:

    val actionResult = authClient.signUp(
        username = email,
        attributes = attributes
        //password = password, Pass 'password' param if you sign up with username (email) and password
    )
    if (actionResult is SignUpResult.AttributesRequired) {
            val requiredAttributes = actionResult.requiredAttributes 
            // Handle "attributes required" result 
            val nextState = actionResult.nextState
            nextState.submitAttributes(
                attributes = moreAttributes
            )
    }
    

Zpracování chyb registrace

Během registrace nejsou všechny akce úspěšné. Uživatel se například může pokusit zaregistrovat pomocí již použité e-mailové adresy nebo odeslat neplatný e-mail jednorázovým heslem.

Zpracování chyby při spuštění registrace

K zpracování chyb pro metodu signUp() použijte následující fragment kódu:

val actionResult = authClient.signUp(
    username = email
)
if (actionResult is SignUpResult.CodeRequired) {
    // Next step: submit code
} else if (actionResult is SignUpError) {
     when {
         actionResult.isUserAlreadyExists() -> {
             // Handle "user already exists" error
         }
         else -> {
             // Handle other errors
         }
     }
}
  • signUp(username, attributes) nebo signUp(username, password, attributes) může vrátit SignUpError.

  • SignUpError označuje neúspěšný výsledek akce vrácený signUp() a nebude obsahovat odkaz na nový stav.

  • Pokud actionResult is SignUpErrorsada MSAL Android SDK poskytuje pomocné metody, které vám umožní dále analyzovat konkrétní chyby:

    • Metoda isUserAlreadyExists() zkontroluje, jestli uživatelské jméno již bylo použito k vytvoření účtu.
    • isInvalidAttributes() zkontroluje, jestli jeden nebo více atributů, které aplikace odeslala, selhalo ověření, například nesprávný datový typ. Obsahuje invalidAttributes parametr, což je seznam všech atributů, které aplikace odeslaly, ale ověření se nezdařilo.
    • isInvalidPassword() zkontrolujte, jestli heslo není platné, například pokud heslo nesplňuje všechny požadavky na složitost hesla. Další informace o zásadách hesel Microsoft Entra
    • isInvalidUsername() zkontrolujte, jestli je uživatelské jméno neplatné, například když je e-mail uživatele neplatný.
    • isBrowserRequired() zkontroluje potřebu prohlížeče (záložního webu) k dokončení toku ověřování. K tomuto scénáři dochází v případě, že k dokončení toku ověřování nestačí nativní ověřování. Správce například nakonfiguruje jako metodu ověřování e-mail a heslo, ale aplikace neposílá heslo jako typ výzvy nebo ho jednoduše nepodporuje. Při zpracování scénáře, kdy k tomu dojde, použijte postup v aplikaci Pro podporu webového záložního řešení v aplikaci pro Android.
    • isAuthNotSupported() zkontroluje, jestli aplikace odešle typ výzvy, který Microsoft Entra nepodporuje, jedná se o jinou hodnotu typu výzvy než oob nebo heslo. Přečtěte si další informace o typech úkolů.

    Upozorněte uživatele, že se e-mail už používá nebo jsou některé atributy neplatné, pomocí popisné zprávy v uživatelském rozhraní aplikace.

  • K zpracování chyby neplatných atributů použijte následující fragment kódu:

    val actionResult = authClient.signUp(
        username = email,
        attributes = attributes
        //password = password, Pass 'password' param if you sign up with username (email) and password
    )
    if (actionResult is SignUpError && actionResult.isInvalidAttributes()) {
        val invalidAttributes = actionResult.invalidAttributes
        // Handle "invalid attributes" error, this time submit valid attributes
        authClient.signUp(
            username = emailAddress,
            attributes = resubmittedAttributes
            //password = password, Pass 'password' param if you sign up with username (email) and password
        )
    } 
    //...
    

Zpracování chyby jednorázového hesla pro odeslání e-mailu

K zpracování chyb pro metodu submitCode() použijte následující fragment kódu:

val submitCodeActionResult = nextState.submitCode(
    code = code
)
if (submitCodeActionResult is SignUpResult.Complete) {
    // Sign up flow complete, handle success state.
} else if (submitCodeActionResult is SubmitCodeError) {
    // Handle errors under SubmitCodeError
     when {
         submitCodeActionResult.isInvalidCode() -> {
             // Handle "code invalid" error
         }
         else -> {
             // Handle other errors
         }
     }
}
  • submitCode() může vrátit SubmitCodeError.

  • Použijte metodu isInvalidCode() ke kontrole konkrétní chyby, jako je například neplatný odeslaný kód. V tomto případě musí být předchozí odkaz na stav použit k opětovnému provedení akce.

  • K načtení nového jednorázového hesla e-mailu použijte následující fragment kódu:

    val submitCodeActionResult = nextState.submitCode(
        code = code
    )
    if (submitCodeActionResult is SubmitCodeError && submitCodeActionResult.isInvalidCode()) {
        // Inform the user that the submitted code was incorrect or invalid and ask for a new code to be supplied
        val newCode = retrieveNewCode()
        nextState.submitCode(
            code = newCode
        )
    }
    

Nezapomeňte zahrnout příkazy importu. Android Studio by měl automaticky obsahovat příkazy pro import.

Dokončili jste všechny potřebné kroky k úspěšné registraci uživatele do aplikace. Sestavte a spusťte aplikaci. Pokud je všechno v pořádku, měli byste být schopni uživatele úspěšně zaregistrovat pomocí jednorázového hesla e-mailu nebo e-mailu a hesla.

Volitelné: Přihlášení po toku registrace

Po úspěšném toku registrace se můžete přihlásit uživatele, aniž byste zahájili tok přihlášení. Další informace najdete v kurzu: Přihlášení uživatele po registraci v článku o Androidu .

Další kroky

Kurz: Přidání přihlášení a odhlášení pomocí jednorázového hesla e-mailu v aplikaci pro Android