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

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);
}

Smart Lock oturum açma ipucu seçici

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.