Tek Dokunuşla oturum açma ihtiyaçlarınızı karşılıyorsa, bunun yerine kullanmayı düşünün. One Tap, güncellenmiş bir kullanıcı deneyimine ve diğer iyileştirmelere sahiptir.

Kullanıcıya oturum açma ipuçları sağlama

Kullanıcı kimlik bilgilerini alma istekleri, bir kullanıcı henüz kimlik bilgilerini kaydetmediğinde veya henüz uygulamanıza kaydolmadıysa başarısız olabilir. Bu durumlarda, kullanıcı adı ve e-posta adresi gibi oturum açma ipuçlarını almak için Credentials API'yi kullanın. Uygulamanızın ipuçlarını kullanarak oturum açma ve kaydolma formlarını önceden doldurmak için bu ipuçlarından yararlanarak uygulamanızın ilk katılım sürecini hızlandırabilirsiniz.

Android 6.0 (Marshmallow) ve sonraki sürümlerde, uygulamanızın kimlik bilgisi API'si 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()'e geçirin. Son olarak, amacı startIntentSenderForResult() ile başlatı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);
}

Smart Lock oturum açma ipucu seçici

Kullanıcıdan kullanılacak bir e-posta adresi seçmesi istenir.

Ardından, etkinliğin onActivityResult() yönteminde Credential.EXTRA_KEY paketinden ipuçlarını alın, kullanıcının kullanıcı 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 doldurun

Kullanıcı, kullanıcı veritabanınızdaysa ve uygulamanızın oturum açma etkinliğini başlattıysanız (isteğe bağlı olarak) Credential nesnesinin bir kimlik jetonu içerip içermediğini kontrol edebilirsiniz. Böylece, kullanıcının şifre yazmasını gerektirmeden kimlik jetonuyla oturum açabilirsiniz.

Credential nesnesi bir kimlik jetonu içermiyorsa (veya kimlik jetonunu kullanmak istemiyorsanız) oturum açma alanlarını amacına 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 doldurun

Kullanıcı, kullanıcı veritabanınızda yoksa ve uygulamanızın kayıt 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ış bir e-posta adresine sahip bir kimlik jetonu içerip içermediğini de kontrol edebilirsiniz. Bu durumda, e-posta adresi Google tarafından zaten doğrulandığından, uygulamanızın e-posta doğrulama adımını atlayabilirsiniz.