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

Bir kullanıcı kimlik bilgilerini henüz kaydetmediyse 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ını kullanarak uygulamanızın katılım sürecini hızlandırabilirsiniz.

Android 6.0 (Marshmallow) ve daha yeni sürümlerde uygulamanızın Authentications API ile oturum açma ipuçlarını almak için herhangi bir cihaz veya çalışma zamanı izni istemesi gerekmez.

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 isteyecek bir niyet almak için HintRequest nesnesini CredentialsClient.getHintPickerIntent() öğesine iletin. Son olarak, niyeti 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 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 doldurun

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 kontrol edebilirsiniz (isteğe bağlı). 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 doldurun

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