Kullanıcılarınız için depolanan kimlik bilgilerini istemek ve almak üzere Credentials API'yi kullanarak uygulamanızda otomatik olarak oturum açmaları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 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 sabit değerleri 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 kimlik bilgilerini alırken kullandığınız sağlayıcı tanımlayıcısını kullanmanız gerekir.
Depolanan kimlik bilgilerini iste
CredentialsClient
ve CredentialRequest
nesnelerini oluşturduktan sonra, uygulamanız için depolanan kimlik bilgilerini istemek amacıyla istek nesnesini CredentialsClient.request()
yöntemine iletin.
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"
// ...
}
});
addOnCompleteListener()
yöntemini kullanarak başarılı ve başarısız istekleri işlemek için 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çma işlemini tamamlamak 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çin, kullanıcı kimliğini içeren bir GoogleSignInClient
nesnesi oluşturun, ardından bu nesneyi oturum açma akışını başlatmak için kullanın. Şifre tabanlı oturum açmak için Kimlik Bilgisi nesnesindeki kullanıcı kimliğini ve şifresini kullanarak uygulamanızın oturum açma işlemini tamamlayı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();
// ...
}
}
Birden fazla kayıtlı kimlik bilgisini işleyin
Kimlik bilgisi seçmek için kullanıcı girişi gerektiğinde request()
görevi ResolvableApiException
ile başarısız olur. getStatusCode()
işlevinin RESOLUTION_REQUIRED
değerini döndürdüğünden emin olun ve kullanıcıdan hesap seçmesini istemek için istisnanın startResolutionForResult()
yöntemini çağırın. Ardından Credential.EXTRA_KEY
öğesini getParcelableExtra()
yöntemine geçirerek etkinliğin onActivityResult()
yönteminden kullanıcının seçtiği kimlik bilgilerini 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
değerini döndürürse isteğe bağlı olarak kullanıcıdan e-posta adresi ve ad gibi son kullanılan oturum açma bilgilerini seçmesini isteyerek ve formdaki bazı alanları bu bilgilerle otomatik olarak doldurarak 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 sayfasına göz atın.
Başarılı bir şekilde oturum açıldığında, kullanıcıların tüm cihazlarında gelecekteki kimlik doğrulamasını otomatikleştirmek için kimlik bilgilerini kaydetmesine izin verin.