Tek Dokunuşla oturum açma ihtiyaçlarınızı karşılıyorsa, bunun yerine kullanmayı düşünün. One Tap, güncellenmiş bir kullanıcı deneyimine ve diğer iyileştirmelere sahiptir.

Kullanıcının kayıtlı kimlik bilgilerini alma

Kullanıcılarınız için depolanan kimlik bilgilerini istemek ve almak üzere Credentials API'yi kullanarak kullanıcıların uygulamanızda otomatik olarak oturum açmasını sağlayın.

Başlamadan önce

Bir Android Studio projesi yapılandırın.

CredentialsClient nesnesi oluşturma

Depolanan kimlik bilgilerini istemek için Credentials API'ye erişmek üzere bir CredentialsClient örneği oluşturmanız gerekir:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

CredentialRequest nesnesi oluşturma

CredentialRequest nesnesi, kimlik bilgilerini istemek istediğiniz oturum açma sistemlerini belirtir. Şifre tabanlı oturum açma için setPasswordLoginSupported yöntemini ve Google ile Oturum Açma gibi birleşik oturum açma hizmetleri için setAccountTypes() yöntemini kullanarak bir CredentialRequest oluşturun.

mCredentialRequest = new CredentialRequest.Builder()
    .setPasswordLoginSupported(true)
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
    .build();

Yaygın olarak kullanılan oturum açma sağlayıcılarını belirtmek için IdentityProviders içinde tanımlanan sabitleri kullanın. Diğer oturum açma sağlayıcıları için sağlayıcıyı benzersiz şekilde tanımlayan herhangi bir dize kullanın. Kimlik bilgilerini depolamak için kullandığınız sağlayıcı tanımlayıcısını kullanmanız gerekir.

Kayıtlı kimlik bilgilerini isteme

CredentialsClient ve CredentialRequest nesnelerini oluşturduktan sonra, uygulamanızda depolanan kimlik bilgilerini istemek için istek nesnesini CredentialsClient.request() yöntemine geçirin.

  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
                  // See "Handle successful credential requests"
                  onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }

              // See "Handle unsuccessful and incomplete credential requests"
              // ...
          }
      });

Başarılı ve başarısız istekleri yönetmek için addOnCompleteListener() yöntemini kullanarak bir geri çağırma tanımlayın.

Başarılı kimlik bilgisi isteklerini işleme

Başarılı bir oturum açma durumunu gösteren kısa ileti Başarılı bir kimlik bilgisi isteğinde, kullanıcının uygulamanızda oturum açmasını sağlamak için sonuçta ortaya çıkan Credential nesnesini kullanın. Alınan kimlik bilgilerinin türünü belirlemek için getAccountType() yöntemini kullanın, ardından uygun oturum açma işlemini tamamlayın. Örneğin, Google ile Oturum Açma işlemi için, kullanıcının kimliğini içeren bir GoogleSignInClient nesnesi oluşturun, ardından oturum açma akışını başlatmak için nesneyi kullanın. Şifre tabanlı oturum açma için, uygulamanızın oturum açma işlemini tamamlamak üzere kimlik kimliğini kullanarak kullanıcının kimliğini ve şifresini kullanın.

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential.
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}

Kayıtlı birden fazla kimlik bilgisini işleme

Smart Lock hesap seçici

Kimlik bilgisi seçmek için kullanıcı girişi gerektiğinde request() görevi bir ResolvableApiException ile başarısız olur. getStatusCode() kullanıcısının RESOLUTION_REQUIRED hesabı döndürdüğünden emin olun ve kullanıcıdan hesap seçmesini istemek için istisna startResolutionForResult() yöntemini çağırın. Ardından, kullanıcının getParcelableExtra() yöntemine Credential.EXTRA_KEY ileterek etkinliğin seçtiği kimlik bilgilerini onActivityResult() etkinliğinden alın.

mCredentialsClient.request(request).addOnCompleteListener(
        new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    // ...
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // This is most likely the case where the user has multiple saved
                    // credentials and needs to pick one. This requires showing UI to
                    // resolve the read request.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    resolveResult(rae, RC_READ);
                } else if (e instanceof ApiException) {
                    // The user must create an account or sign in manually.
                    Log.e(TAG, "Unsuccessful credential request.", e);

                    ApiException ae = (ApiException) e;
                    int code = ae.getStatusCode();
                    // ...
                }
            }
        });
private void resolveResult(ResolvableApiException rae, int requestCode) {
    try {
        rae.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving = true;
    } catch (IntentSender.SendIntentException e) {
        Log.e(TAG, "Failed to send resolution.", e);
        hideProgress();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // ...

    if (requestCode == RC_READ) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved(credential);
        } else {
            Log.e(TAG, "Credential Read: NOT OK");
            Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    // ...

}

Depolanan kimlik bilgileri bulunamadığında, kullanıcıların hesap oluşturması veya manuel olarak oturum açması gerekir. getStatusCode() SIGN_IN_REQUIRED döndürürse kullanıcıdan e-posta adresi ve ad gibi son kullanılan oturum açma bilgilerini seçmesini ve formlardaki bazı alanları bu bilgilerle otomatik olarak doldurmasını isteyerek kayıt ve oturum açma işlemlerini hızlandırabilirsiniz. Ayrıntılar için Kullanıcıya oturum açma ipuçları sağlama başlıklı makaleye bakın.

Başarılı bir oturum açma sırasında, kullanıcıların kimlik doğrulamalarını tüm cihazlarında otomatik hale getirmek için kimlik bilgilerini kaydetmelerine izin verin.