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

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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ı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 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 Bilgileri 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 projesini 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 iletin. Son olarak startIntentSenderForResult() ile hedefi 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, kullanmak üzere bir e-posta adresi seçmesi istenir.

Ardından, etkinliğin onActivityResult() yönteminde, Credential.EXTRA_KEY paketindeki ipuçlarını alın, kullanıcının kullanıcı veritabanınızda olup olmadığını kontrol edin ve kimlik bilgisi ipucu ile 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ızda bulunuyorsa ve uygulamanızın oturum açma etkinliğini başlattıysanız Credential nesnesinin bir kimlik jetonu içerip içermediğini (isteğe bağlı olarak) 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ı 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 kayıt etkinliğini başlattıysanız, amaç alanlarına eklediğiniz oturum açma ipuçlarıyla kayıt alanlarını ö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 olan bir kimlik jetonu içerip içermediğini de kontrol edebilirsiniz. E-posta adresi Google tarafından zaten doğrulandığından, uygulamanızın e-posta doğrulaması adımını atlayabilirsiniz.