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 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
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.