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