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

Kullanıcı kimlik bilgilerini alma istekleri, kullanıcı henüz kaydetmediğinde başarısız olabilir veya kullanıcı henüz uygulamanıza kaydolmadığında kimlik bilgileri gösterilir. Bu durumlarda, kullanıcı adı ve e-posta adresi. Uygulamanızın oturum açma bilgilerini önceden doldurmak için bu ipuçlarını kullanın ve kayıt formları oluşturarak uygulamanızın ilk katılım sürecini hızlandırabilirsiniz.

Android 6.0 (Marshmallow) ve sonraki sürümlerde uygulamanızın istekte bulunması gerekmez oturum açma ipuçlarını almak için her cihazda veya çalışma zamanında istenen izinleri Kimlik Bilgileri API'si.

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 ipucu seçici iletişim kutusunu HintRequest oluşturuluyor nesnesini tanımlayın. Ardından HintRequest nesnesini CredentialsClient.getHintPickerIntent() kullanıcının e-posta adresi seçmesini isteme amacıyla çalışır. Son olarak, startIntentSenderForResult() ile niyetinizi gösterin.

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 paketi, kullanıcının kullanıcı veritabanınızda olup olmadığını kontrol edin, ve kimlik bilgileri ipucuyla uygun işlemi 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 işlemini başlattıysanız etkinliği varsa (isteğe bağlı olarak) Credential nesnesinin bir kimlik içerip içermediğini kontrol edebilirsiniz jeton. Bu durumda, kimlik jetonuyla kullanıcının oturum açmasını sağlayabilirsiniz. Böylece kullanıcının şifre girmesi gerekmez.

Credential nesnesi kimlik jetonu içermiyorsa (veya kimlik jetonu olarak) oturum açma alanlarını, isteyebilirsiniz.

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 değilse ve uygulamanızın kaydını başlattıysanız etkinliği için eklediğiniz oturum açma ipuçlarıyla kayıt alanlarını önceden doldurun. düşünmelisiniz.

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 Şuna sahip olan kimlik jetonu: doğrulanmış e-posta adresidir. Öyleyse uygulamanızın e-posta doğrulaması adımını atlayabilirsiniz. çünkü e-posta adresi zaten Google tarafından doğrulanıyor.