Bir kullanıcı henüz kimlik bilgilerini kaydetmediğinde veya uygulamanıza henüz kaydolmamışsa kullanıcı kimlik bilgilerini alma istekleri başarısız olabilir. Bu durumlarda, kullanıcının adı ve e-posta adresi gibi oturum açma ipuçlarını almak için Credentials API'yi kullanın. Uygulamanızın oturum açma ve kayıt formlarını önceden doldurmak için bu ipuçlarından yararlanın ve uygulamanızın ilk katılım sürecini hızlandırın.
Android 6.0 (Marshmallow) ve daha yeni sürümlerde uygulamanızın Authenticator API ile oturum açma ipuçlarını almak için herhangi bir cihaz veya çalışma zamanı izni istemesine gerek yoktur.
Başlamadan önce
Bir Android Studio projesi yapılandırın.
Oturum açma ipuçlarını alma
Oturum açma ipuçlarını almak için önce bir HintRequest
nesnesi oluşturarak ipucu seçici iletişim kutusunu yapılandırın. Ardından, kullanıcıdan bir e-posta adresi seçmesini istemek için HintRequest
nesnesini CredentialsClient.getHintPickerIntent()
adresine iletin. Son olarak amacı startIntentSenderForResult()
ile başlayın.
HintRequest hintRequest = new HintRequest.Builder()
.setHintPickerConfig(new CredentialPickerConfig.Builder()
.setShowCancelButton(true)
.build())
.setEmailAddressIdentifierSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Could not start hint picker Intent", e);
}
Kullanıcıdan kullanacağı e-posta adresini seçmesi istenir.
Ardından, etkinliğin onActivityResult()
yönteminde Credential.EXTRA_KEY
paketinden ipuçlarını alın, kullanıcının veritabanınızda olup olmadığını kontrol edin ve kimlik bilgisi ipucuyla uygun etkinliği başlatın.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_HINT) { if (resultCode == RESULT_OK) { Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); Intent intent; // Check for the user ID in your user database. if (userDatabaseContains(credential.getId())) { intent = new Intent(this, SignInActivity.class); } else { intent = new Intent(this, SignUpNewUserActivity.class); } intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential); startActivity(intent); } else { Log.e(TAG, "Hint Read: NOT OK"); Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show(); } } ... }
Oturum açma formunu önceden doldurma
Kullanıcı, kullanıcı veritabanınızdaysa ve uygulamanızın oturum açma etkinliğini başlattıysanız Credential
nesnesinin kimlik jetonu içerip içermediğini (isteğe bağlı olarak) kontrol edebilirsiniz. Bu durumda, kullanıcının şifre yazmasına gerek kalmadan kimlik jetonuyla kullanıcının oturumunu açabilirsiniz.
Credential
nesnesi kimlik jetonu içermiyorsa (veya kimlik jetonunu kullanmak istemiyorsanız) oturum açma alanlarını amaca eklediğiniz ipuçlarıyla önceden doldurun.
public class SignInActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill ID field
mUsernameView.setText(credential.getId());
...
}
...
}
Kayıt formunu önceden doldurma
Kullanıcı, kullanıcı veritabanınızda yoksa ve uygulamanızın kaydolma etkinliğini başlattıysanız kayıt alanlarını amaca eklediğiniz oturum açma ipuçlarıyla önceden doldurun.
public class SignUpNewUserActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill sign-up fields
mUsernameView.setText(credential.getId());
mDisplaynameView.setText(credential.getName()); // Might be null.
...
}
...
}
İsteğe bağlı olarak, Credential
nesnesinin doğrulanmış e-posta adresi olan bir kimlik jetonu içerip içermediğini de kontrol edebilirsiniz. Bu durumda, e-posta adresi Google tarafından zaten doğrulandığı için uygulamanızın e-posta doğrulama adımını atlayabilirsiniz.