Samouczek: dodawanie rejestracji w aplikacji mobilnej systemu Android przy użyciu uwierzytelniania natywnego
W tym samouczku pokazano, jak zarejestrować użytkownika przy użyciu jednorazowego kodu dostępu lub nazwy użytkownika (adresu e-mail) oraz hasła oraz zbierać atrybuty użytkownika w aplikacji mobilnej systemu Android przy użyciu uwierzytelniania natywnego.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Zarejestruj użytkownika przy użyciu jednorazowego kodu dostępu lub nazwy użytkownika (e-mail) i hasła.
- Zbierz atrybuty użytkownika podczas rejestracji.
- Obsługa błędów rejestracji.
Wymagania wstępne
- Wykonaj kroki opisane w artykule Samouczek: przygotowywanie aplikacji systemu Android do uwierzytelniania natywnego.
- Jeśli chcesz zbierać atrybuty użytkownika podczas rejestracji, skonfiguruj atrybuty użytkownika podczas tworzenia przepływu użytkownika rejestracji i logowania.
Tworzenie konta użytkownika
Aby zarejestrować użytkownika przy użyciu jednorazowego kodu dostępu lub nazwy użytkownika (adresu e-mail) i hasła, należy zebrać wiadomość e-mail od użytkownika, a następnie wysłać wiadomość e-mail zawierającą jednorazowy kod dostępu do użytkownika. Użytkownik wprowadza prawidłowy kod dostępu jednorazowego wiadomości e-mail, aby zweryfikować swoją nazwę użytkownika.
Aby zarejestrować użytkownika, musisz:
Utwórz interfejs użytkownika w celu:
- Zbierz wiadomość e-mail od użytkownika. Dodaj walidację do danych wejściowych, aby upewnić się, że użytkownik wprowadzi prawidłowy adres e-mail.
- Zbierz hasło, jeśli zarejestrujesz się przy użyciu nazwy użytkownika (e-mail) i hasła.
- Zbierz jednorazowy kod dostępu wiadomości e-mail od użytkownika.
- W razie potrzeby zbierz atrybuty użytkownika.
- Wyślij ponownie jednorazowy kod dostępu (zalecane).
- Uruchom przepływ rejestracji.
W aplikacji dodaj przycisk, którego wybranie powoduje wyzwolenie następującego fragmentu kodu:
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 } } }
- Użyj metody wystąpienia zestawu SDK,
signUp(username)
aby uruchomić przepływ rejestracji.- Aby zarejestrować się przy użyciu nazwy użytkownika (adresu e-mail) i hasła, przekaż parametr hasła do
signUp
funkcjisignUp(username, password)
.
- Aby zarejestrować się przy użyciu nazwy użytkownika (adresu e-mail) i hasła, przekaż parametr hasła do
- Parametr
username
metody , to adres e-mail zbierany od użytkownika. - W najbardziej typowym scenariuszu
signUp(username)
metoda lubsignUp(username, password)
zwraca wynik , który wskazuje,SignUpResult.CodeRequired
że zestaw SDK oczekuje, że aplikacja będzie przesyłać jednorazowy kod dostępu do wiadomości e-mail wysłany na adres e-mail użytkownika. - Obiekt
SignUpResult.CodeRequired
zawiera nowe odwołanie do stanu, które możemy pobrać za pomocąactionResult.nextState
polecenia . - Nowy stan daje nam dostęp do dwóch nowych metod:
submitCode()
przesyła jednorazowy kod dostępu wiadomości e-mail zbierany przez aplikację od użytkownika.resendCode()
wysyła ponownie kod dostępu jednorazowego wiadomości e-mail, jeśli użytkownik nie otrzyma kodu.
SignUpResult.Complete
Zwraca wartośćsubmitCode()
, która wskazuje, że przepływ został ukończony, a użytkownik został zarejestrowany.- Element
signUp(username)
lubsignUp(username, password)
może również wrócićSignUpError
, aby określić, że wystąpił błąd.
- Użyj metody wystąpienia zestawu SDK,
Zbieraj atrybuty użytkownika podczas rejestracji
Niezależnie od tego, czy rejestrujesz użytkownika przy użyciu jednorazowego kodu dostępu e-mail, czy nazwy użytkownika (poczty e-mail) i hasła, możesz zbierać atrybuty użytkownika przed utworzeniem konta użytkownika:
Metoda
signUp()
akceptujeattributes
parametr jakosignUp(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 ) //... }
Zestaw Android SDK udostępnia klasę
UserAttribute.Builder
narzędzi używaną do tworzenia atrybutów użytkownika. Aby na przykład przesłać atrybuty użytkownika miasta i kraju , użyj następującego fragmentu kodu, aby skompilować zmiennąuserAttributes
:val userAttributes = UserAttributes.Builder () .country(country) .city(city) .build()
Nazwy metod w
UserAttribute.Builder
klasie są takie same jak programowalne nazwy atrybutów użytkownika, które tworzą. Dowiedz się więcej o konstruktorze atrybutów zestawu SDK systemu Android.Metoda
signUp(username, attributes)
orsignUp(username, attributes, password)
może wrócićSignUpResult.AttributesRequired
, aby wskazać, że aplikacja musi przesłać co najmniej jeden wymagany atrybut, zanim firma Microsoft Entra utworzy konto. Te atrybuty są konfigurowane przez administratora jako obowiązkowe w centrum administracyjnym firmy Microsoft Entra. Firma Microsoft Entra nie żąda jawnie opcjonalnych atrybutów użytkownika.Wynik
SignUpResult.AttributesRequired
zawierarequiredAttributes
parametr.requiredAttributes
to listaRequiredUserAttribute
obiektów, które zawierają szczegółowe informacje o atrybutach użytkownika, które aplikacja musi przesłać. Aby obsłużyćactionResult is SignUpResult.AttributesRequired
metodę , użyj następującego fragmentu kodu: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 ) }
Obsługa błędów rejestracji
Podczas rejestracji nie wszystkie akcje kończą się powodzeniem. Na przykład użytkownik może próbować zarejestrować się przy użyciu już używanego adresu e-mail lub przesłać nieprawidłowy kod dostępu jednorazowego wiadomości e-mail.
Błąd obsługi uruchamiania rejestracji
Aby obsłużyć błędy dla signUp()
metody, użyj następującego fragmentu kodu:
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)
lubsignUp(username, password, attributes)
może zwrócić wartośćSignUpError
.SignUpError
wskazuje wynik nieudanej akcji zwrócony przezsignUp()
element i nie będzie zawierać odwołania do nowego stanu.Jeśli
actionResult is SignUpError
zestaw SDK biblioteki MSAL dla systemu Android udostępnia metody narzędziowe umożliwiające dalsze analizowanie określonych błędów:- Metoda
isUserAlreadyExists()
sprawdza, czy nazwa użytkownika została już użyta do utworzenia konta. isInvalidAttributes()
Sprawdza, czy co najmniej jeden atrybut przesłany przez aplikację zakończył się niepowodzeniem weryfikacji, na przykład nieprawidłowy typ danych. ZawierainvalidAttributes
parametr, który jest listą wszystkich atrybutów przesłanych przez aplikacje, ale nie powiodła się walidacja.isInvalidPassword()
Sprawdź, czy hasło jest nieprawidłowe, na przykład gdy hasło nie spełnia wszystkich wymagań dotyczących złożoności hasła. Dowiedz się więcej o zasadach haseł firmy Microsoft EntraisInvalidUsername()
sprawdź, czy nazwa użytkownika jest nieprawidłowa, na przykład gdy adres e-mail użytkownika jest nieprawidłowy.isBrowserRequired()
sprawdza potrzebę korzystania z przeglądarki (rezerwowej w sieci Web), aby ukończyć przepływ uwierzytelniania. Ten scenariusz występuje, gdy uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu uwierzytelniania. Na przykład administrator konfiguruje adres e-mail i hasło jako metodę uwierzytelniania, ale aplikacja nie może wysłać hasła jako typu wyzwania lub po prostu nie obsługuje go. Wykonaj kroki opisane w temacie Obsługa rezerwowego w internecie w aplikacji dla systemu Android, aby obsłużyć scenariusz w takim przypadku.isAuthNotSupported()
Sprawdza, czy aplikacja wysyła typ wyzwania, którego firma Microsoft Entra nie obsługuje, jest to wartość typu wyzwania innego niż oob lub hasło. Dowiedz się więcej o typach wyzwań.
Powiadom użytkownika, że wiadomość e-mail jest już używana lub niektóre atrybuty są nieprawidłowe, używając przyjaznej wiadomości w interfejsie użytkownika aplikacji.
- Metoda
Aby obsłużyć błąd nieprawidłowych atrybutów, użyj następującego fragmentu kodu:
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 ) } //...
Obsługa jednorazowego kodu dostępu do przesyłania wiadomości e-mail
Aby obsłużyć błędy dla submitCode()
metody, użyj następującego fragmentu kodu:
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()
może zwrócić wartośćSubmitCodeError
.isInvalidCode()
Użyj metody , aby sprawdzić konkretny błąd, taki jak przesłany kod jest nieprawidłowy. W takim przypadku należy użyć poprzedniego odwołania do stanu w celu ponownego wykonania akcji.Aby pobrać nowy kod dostępu jednorazowego wiadomości e-mail, użyj następującego fragmentu kodu:
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 ) }
Upewnij się, że dołączysz instrukcje importowania. Program Android Studio powinien automatycznie dołączać instrukcje importowania.
Wszystkie kroki niezbędne do pomyślnego zarejestrowania użytkownika w aplikacji zostały wykonane. Skompiluj i uruchom aplikację. Jeśli wszystko jest dobre, powinno być możliwe pomyślne zarejestrowanie użytkownika przy użyciu jednorazowego kodu dostępu lub wiadomości e-mail i hasła.
Opcjonalnie: Zaloguj się po przepływie rejestracji
Po pomyślnym przepływie rejestracji możesz zalogować się do użytkownika bez inicjowania przepływu logowania. Dowiedz się więcej w artykule Samouczek: logowanie użytkownika po zarejestrowaniu się w systemie Android .
Następne kroki
Samouczek: dodawanie logowania i wylogowywanie przy użyciu jednorazowego kodu dostępu poczty e-mail w aplikacji systemu Android.