Aracılığıyla paylaş


Eğitim: Yerel kimlik doğrulaması kullanarak Android mobil uygulamasına kayıt özelliği ekleme

Şunun için geçerlidir: Aşağıdaki içeriğin dış kiracılar için geçerli olduğunu gösteren beyaz onay işareti simgesine sahip yeşil daire. Dış kiracılar (daha fazla bilgi edinin)

Bu öğreticide, tek seferlik geçiş kodu veya kullanıcı adı (e-posta) ve parola kullanarak bir kullanıcıya kaydolma ve yerel kimlik doğrulaması kullanarak Android mobil uygulamanızda kullanıcı özniteliklerini toplama işlemleri gösterilmektedir.

Bu eğitimde, siz:

  • Tek seferlik geçiş kodu veya kullanıcı adı (e-posta) ve parola kullanarak bir kullanıcıya kaydolun.
  • Kaydolma sırasında kullanıcı özniteliklerini toplayın.
  • Kayıt hatalarını ele alma.

Önkoşullar

Kullanıcı kaydolma

Tek seferlik geçiş kodunu veya kullanıcı adını (e-posta) ve parolayı kullanarak bir kullanıcıya kaydolmak için, kullanıcıdan bir e-posta toplar ve ardından kullanıcıya tek seferlik bir e-posta geçiş kodu içeren bir e-posta gönderirsiniz. Kullanıcı, kullanıcı adını doğrulamak için tek seferlik geçerli bir e-posta geçiş kodu girer.

Bir kullanıcıya kaydolmak için şunları yapmanız gerekir:

  1. Kullanıcı arabirimi (UI) oluşturmak:

    • Kullanıcıdan bir e-posta toplayın. Kullanıcının geçerli bir e-posta adresi girdiğinden emin olmak için girişlerinize doğrulama ekleyin.
    • Kullanıcı adı (e-posta) ve parola ile kaydolarak bir parola toplayın.
    • Kullanıcıdan tek seferlik bir e-posta geçiş kodu toplayın.
    • Gerekirse kullanıcı özniteliklerini toplayın.
    • Tek seferlik geçiş kodunu yeniden gönderin (önerilir).
    • Kaydolma akışını başlatın.
  2. Uygulamanızda, seçme olayı aşağıdaki kod parçacığını tetikleyen bir düğme ekleyin:

    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
             }
        }
    }
    
    • Kaydolma akışını başlatmak için SDK'nın örnek yöntemini signUp(parameters) kullanın.
    • Kullanıcı adı (e-posta adresi) ve parola kullanarak kaydolmak için NativeAuthSignUpParameters sınıfının bir örneğini oluşturun ve kullanıcı adınızı ve parolanızı atayın.
    • usernamekaydolma parametresi, kullanıcıdan topladığınız e-posta adresidir.
    • En yaygın senaryoda signUp(parameters), SDK'nın kullanıcının e-posta adresine gönderilen tek seferlik e-posta şifresini uygulamanın göndermesini beklediğini belirten bir sonucu SignUpResult.CodeRequiredolarak döndürür.
    • SignUpResult.CodeRequired nesnesi, actionResult.nextStatearacılığıyla alabildiğimiz yeni bir durum başvurusu içeriyor.
    • Yeni durum iki yeni yönteme erişmemizi sağlar:
      • submitCode(), uygulamanın kullanıcıdan topladığı e-posta geçiş kodunu tek seferlik gönderir.
      • resendCode(), kullanıcı kodu almazsa e-postayla gönderilen tek seferlik geçiş kodunu tekrar gönderir.
    • submitCode(), akışın tamamlandığını ve kullanıcının kaydolduğunu gösteren SignUpResult.Completedöndürür.
    • signUp(parameters), bir hata oluştuğunu belirtmek için SignUpError'i de döndürebilir.

Kaydolma sırasında kullanıcı özniteliklerini toplama

Bir kullanıcıyı tek kullanımlık kod veya e-posta (kullanıcı adı) ve parola kullanarak kayıt yapsanız da, kullanıcının hesabı oluşturulmadan önce kullanıcı özniteliklerini toplayabilirsiniz.

  • NativeAuthSignUpParameters örneği bir attributes parametresi kabul eder:

        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)
            //...
        }
    
  • Android SDK, kullanıcı öznitelikleri oluşturmak için kullandığınız bir yardımcı program sınıfı UserAttribute.Builder sağlar. Örneğin, şehir ve ülke kullanıcı özniteliklerini göndermek için, userAttributes değişkenini oluşturmak için aşağıdaki kod parçacığını kullanın:

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

    UserAttribute.Builder sınıfındaki yöntem adları, derledikleri kullanıcı özniteliklerinin programlanabilir adlarıyla aynıdır. Android SDK öznitelik oluşturucusu hakkında daha fazla bilgi edinin.

  • signUp(parameters) yöntemi, Microsoft Entra bir hesap oluşturmadan önce uygulamanın bir veya daha fazla gerekli öznitelik göndermesi gerektiğini belirtmek için SignUpResult.AttributesRequired döndürebilir. Bu öznitelikler, Yönetici tarafından Microsoft Entra yönetim merkezinde zorunlu olarak yapılandırılır. Microsoft Entra, isteğe bağlı kullanıcı öznitelikleri için açıkça istekte bulunmaz.

  • SignUpResult.AttributesRequired sonucu bir requiredAttributes parametresi içerir. requiredAttributes, uygulamanın göndermesi gereken kullanıcı öznitelikleriyle ilgili ayrıntıları içeren RequiredUserAttribute nesnelerinin listesidir. actionResult is SignUpResult.AttributesRequiredişlemek için aşağıdaki kod parçacığını kullanın:

    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
            )
    }
    

Kaydolma hatalarını işleme

Kaydolma sırasında tüm eylemler başarılı olmaz. Örneğin, kullanıcı zaten kullanılmış bir e-posta adresiyle kaydolmayı veya tek seferlik geçersiz bir e-posta geçiş kodu göndermeyi dener.

Kayıt işlemi başlatma hatasını düzeltme

signUp() yönteminin hatalarını işlemek için aşağıdaki kod parçacığını kullanın:

 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) SignUpError döndürebilir.

  • SignUpError, signUp() tarafından döndürülen başarısız bir eylem sonucunu gösterir ve yeni duruma başvuru içermez.

  • actionResult is SignUpErrorise, MSAL Android SDK'sı belirli hataları daha fazla analiz etmenizi sağlayan yardımcı program yöntemleri sağlar:

    • yöntemi isUserAlreadyExists() kullanıcı adının hesap oluşturmak için zaten kullanılıp kullanılmadığını denetler.
    • isInvalidAttributes(), uygulamanın gönderdiği bir veya daha fazla özniteliğin yanlış veri türü gibi doğrulamanın başarısız olup olmadığını denetler. Uygulamaların gönderdiği, ancak doğrulamanın başarısız olduğu tüm özniteliklerin listesi olan bir invalidAttributes parametresi içerir.
    • isInvalidPassword(), parolanın tüm parola karmaşıklık gereksinimlerini karşılamaması gibi parolanın geçersiz olup olmadığını denetleyin. Microsoft Entra'nın parola ilkeleri hakkında daha fazla bilgi edinin
    • isInvalidUsername() kullanıcı e-postasının geçersiz olması gibi kullanıcı adının geçersiz olup olmadığını denetleyin.
    • isBrowserRequired(), kimlik doğrulama akışını tamamlamak için tarayıcı (web geri dönüşü) gereksinimini denetler. Bu senaryo, yerel kimlik doğrulaması kimlik doğrulama akışını tamamlamak için yeterli olmadığında gerçekleşir. Örneğin, yönetici kimlik doğrulama yöntemi olarak e-postayı ve parolayı yapılandırıyor, ancak uygulama parola sınama türü olarak gönderemiyor veya bunu desteklemiyor. Android uygulamasında web geri dönüş desteğini senaryo gerçekleştiğinde işlemek için adımlarını kullanın.
    • isAuthNotSupported(), uygulamanın Microsoft Entra'nın desteklemediği bir sınama türü gönderip göndermediğini denetler; bu, oob veya paroladışında bir sınama türü değeridir. sınama türleri hakkında daha fazla bilgi edinin.

    Uygulamanın kullanıcı arabiriminde kolay bir ileti kullanarak kullanıcıya e-postanın zaten kullanımda olduğunu veya bazı özniteliklerin geçersiz olduğunu bildirin.

  • Geçersiz özniteliklerin hatasını işlemek için aşağıdaki kod parçacığını kullanın:

    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)
    } 
    //...
    

E-posta gönderme tek seferlik doğrulama kodu hatasını işleme

submitCode() yönteminin hatalarını işlemek için aşağıdaki kod parçacığını kullanın:

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() SubmitCodeError döndürebilir.

  • Gönderilen kodun geçersiz olması gibi belirli bir hatayı denetlemek için isInvalidCode() yöntemini kullanın. Bu durumda, eylemi yeniden gerçekleştirmek için önceki durum başvurusu kullanılmalıdır.

  • Tek seferlik yeni bir e-posta geçiş kodu almak için aşağıdaki kod parçacığını kullanın:

    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
        )
    }
    

İthalat ifadelerini eklediğinizden emin olun. Android Studio sizin için içeri aktarma deyimlerini otomatik olarak içermelidir.

Bir kullanıcıyı uygulamanıza başarıyla kaydolmak için gerekli tüm adımları tamamladınız. Uygulamanızı derleyin ve çalıştırın. Her şey yolundaysa, tek seferlik geçiş kodu veya e-posta ve parola kullanarak kullanıcıyı başarıyla kaydolabilmeniz gerekir.

İsteğe bağlı: Kayıt akışı sonrasında oturum açma

Başarılı bir kayıt akışı sonrasında, oturum açma akışı başlatmadan bir kullanıcıyla oturum açabilirsiniz. Android'de Kaydolduktan Sonra Kullanıcı Oturumu Açma Eğitimi makalesinde daha fazla bilgi edinin.

Sonraki adımlar

Eğitim: Android uygulamasında tek kullanımlık şifre ile oturum açma ve kapatma ekleme.