Sdílet prostřednictvím


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

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

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.
  • Řešte chyby při registraci

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:

    • Získejte 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.
    • Získejte jednorázový přístupový kód zaslaný e-mailem od uživatele.
    • V případě potřeby shromážděte atributy uživatele.
    • Znovu odeslat jednorázové heslo (doporučeno).
    • Zahajte proces 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 parameters = NativeAuthSignUpParameters(username = email)
         // Assign 'password' param if you sign in with username (email) and password
         // parameters.password = password
         val actionResult: SignUpResult = authClient.signUp(parameters)
    
         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 instance sady SDK signUp(parameters) spusťte tok registrace.
    • Pokud se chcete zaregistrovat pomocí uživatelského jména (e-mailové adresy) a hesla, vytvořte instanci třídy NativeAuthSignUpParameters a přiřaďte své uživatelské jméno a heslo.
    • Parametr registrace usernameje e-mailová adresa, kterou od uživatele shromažďujete.
    • Ve většině běžných scénářů signUp(parameters) vrátí výsledek, SignUpResult.CodeRequired, což naznačuje, že sada SDK očekává, že aplikace odešle jednorázový přístupový kód e-mailu, který byl odeslán 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() znovu odešle jednorázový přístupový kód e-mailem, pokud uživatel kód neobdrží.
    • submitCode() vrátí SignUpResult.Complete, což znamená, že tok je dokončený a uživatel se zaregistroval.
    • signUp(parameters) může také vrátit SignUpError a označit, ž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:

  • Instance NativeAuthSignUpParameters přijímá parametr attributes:

        CoroutineScope(Dispatchers.Main).launch {
            val parameters = NativeAuthSignUpParameters(username = email)
            // Assign 'password' param if you sign in with username (email) and password
            // parameters.password = password
            parameters.attributes = userAttributes
            val actionResult: SignUpResult = authClient.signUp(parameters)
            //...
        }
    
  • Sada Android SDK poskytuje třídu nástrojů UserAttribute.Builder, kterou používáte k vytváření atributů uživatele. Pokud chcete například odeslat atributy uživatele město a zemi, použijte následující fragment kódu k sestavení proměnné userAttributes:

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

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

  • Metoda signUp(parameters) 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 parametr requiredAttributes. requiredAttributes je seznam objektů RequiredUserAttribute, které obsahují podrobnosti o atributech uživatele, které aplikace potřebuje odeslat. Ke zpracování actionResult is SignUpResult.AttributesRequiredpoužijte následující fragment kódu:

    val parameters = NativeAuthSignUpParameters(username = email)
    // Assign 'password' param if you sign in with username (email) and password
    // parameters.password = password
    parameters.attributes = userAttributes
    val actionResult: SignUpResult = authClient.signUp(parameters)
    
    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.

Řešení chyby při zahájení registrace

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

 val parameters = NativeAuthSignUpParameters(username = email)
 // Assign 'password' param if you sign in with username (email) and password
 // parameters.password = password
val actionResult: SignUpResult = authClient.signUp(parameters)

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(parameters) 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 SignUpError, sada MSAL Android SDK poskytuje pomocné metody, které vám umožní dále analyzovat konkrétní chyby:

    • Metoda isUserAlreadyExists() zkontroluje, zda 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. Zjistěte více 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 (webové varianty) k dokončení průběhu 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 jako metodu ověřování nakonfiguruje e-mail a heslo, ale aplikace neposílá heslo jako typ výzvy nebo ji jednoduše nepodporuje. Při zpracování scénáře, kdy k tomu dojde, použijte kroky v Podpora webového záložního režimu v aplikaci pro Android.
    • isAuthNotSupported() zkontroluje, jestli aplikace odesílá typ výzvy, který Microsoft Entra nepodporuje, jestliže se jedná o jinou hodnotu typu výzvy než oob nebo password. Přečtěte si další informace o výzvách typu .

    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 parameters = NativeAuthSignUpParameters(username = email)
    // Assign 'password' param if you sign in with username (email) and password
    // parameters.password = password
    parameters.attributes = userAttributes
    val actionResult: SignUpResult = authClient.signUp(parameters)
    
    if (actionResult is SignUpError && actionResult.isInvalidAttributes()) {
        val invalidAttributes = actionResult.invalidAttributes
    
        // Handle "invalid attributes" error, this time submit valid attributes
        val parameters = NativeAuthSignUpParameters(username = email)
        // Assign 'password' param if you sign in with username (email) and password
        // parameters.password = password
        parameters.attributes = userAttributes
        authClient.signUp(parameters)
    } 
    //...
    

Zpracování chyby při odesílání jednorázového hesla e-mailem

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.

  • Pomocí metody isInvalidCode() zkontrolujte konkrétní chybu, 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 pro vás měl automaticky zahrnout příkazy pro import.

Dokončili jste všechny potřebné kroky k úspěšné registraci uživatele do aplikace. Sestavte a spusťte vaši 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 procesu 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 pro Android.

Další kroky

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