Bir kullanıcının depolanan kimlik bilgilerini alma

İstekte bulunmak için Credentials API'yi kullanarak kullanıcıların uygulamanızda otomatik olarak oturum açmasını sağlayın ve kullanıcılarınızın depolanmış kimlik bilgilerini alabilirsiniz.

Başlamadan önce

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

CredentialsClient nesnesi oluşturma

Depolanan kimlik bilgilerini istemek için şunu oluşturmanız gerekir: Credentials API'ye erişmek için CredentialsClient:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

CredentialRequest nesnesi oluşturma

CredentialRequest nesnesi kimlik bilgileri istemek istediğiniz oturum açma sistemleriyle ilgili bilgileri inceleyin. Bir Şunun için setPasswordLoginSupported yöntemini kullanarak CredentialRequest: şifre tabanlı oturum açma ve birleşik için setAccountTypes() yöntemi Google ile Oturum Açma gibi oturum açma hizmetlerine izin verilmez.

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

IdentityProviders bölümünde tanımlanan sabitleri kullanın yaygın olarak kullanılan oturum açma sağlayıcılarını belirtin. Diğer oturum açma sağlayıcıları için sağlayıcıyı benzersiz şekilde tanımlayan dizedir. Aynı sağlayıcı tanımlayıcısını kullanmanız gerekir. depolama alanını kullanmayın.

Depolanmış kimlik bilgilerini iste

CredentialsClient ve CredentialRequest nesneleri oluşturduktan sonra istek nesnesini iletin CredentialsClient.request() yöntemini kullanabilirsiniz.

  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 işlemek için addOnCompleteListener() yöntemini çağırın.

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

Oturum açma işleminin başarılı olduğunu gösteren kısa mesaj. Başarılı bir kimlik bilgisi isteğinde, sonuç olarak Credential nesnesini ifade eder. getAccountType() yöntemini kullanma ve ardından uygun oturum açma işlemini tamamlayın. bahsedeceğim. Örneğin, Google ile Oturum Açma için şunu içeren bir GoogleSignInClient nesnesi oluşturun: ve ardından oturum açma akışını başlatmak için nesneyi kullanın. Şifre tabanlı oturum açın, kimlik bilgileri nesnesindeki kullanıcı kimliğini ve şifresini kullanarak uygulamanızın oturum açma işlemini gerçekleştirin.

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

Birden fazla kayıtlı kimlik bilgisini işleme

Smart Lock hesap seçici

Kimlik bilgisi seçmek için kullanıcı girişi gerektiğinde request() görevi ResolvableApiException ile başarısız olabilir. Doğrulama getStatusCode(), RESOLUTION_REQUIRED ve kullanıcıdan istekte bulunmak için istisnanın startResolutionForResult() yöntemini çağırın hesap seçin. Ardından, kullanıcının seçtiği kimlik bilgilerini şuradan alın: etkinliğinin onActivityResult() yöntemini Credential.EXTRA_KEY getParcelableExtra() yöntemidir.

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 oluşturması gerekir. oturum açın. getStatusCode() ise SIGN_IN_REQUIRED değerini döndürür, isteğe bağlı olarak kayıt ve oturum açma işlemlerini hızlandırabilir ve oturum açma bilgilerini (ör. e-posta adresi ve formların bazı alanlarını otomatik olarak bu bilgilerle doldurmaktır. Kullanıcılara oturum açma ipuçları sağlama konusuna bakın. inceleyebilirsiniz.

Başarılı bir şekilde oturum açtıktan sonra kullanıcıların kimlik bilgilerini kaydetmelerine izin verin. yeni kimlik doğrulamasını tüm cihazlarında otomatik olarak gerçekleştirmelerini sağlar.