उपयोगकर्ता को साइन इन करने के लिए संकेत दें

अगर किसी उपयोगकर्ता ने क्रेडेंशियल सेव न किए हों या उसने अब तक आपके ऐप्लिकेशन में साइन अप न किया हो, तो क्रेडेंशियल वापस पाने के अनुरोध को प्रोसेस नहीं किया जा सकता है. इन स्थितियों में, उपयोगकर्ता के नाम और ईमेल पते जैसे साइन इन से जुड़े संकेत पाने के लिए, Credentials API का इस्तेमाल करें. अपने ऐप्लिकेशन के साइन-इन और साइन-अप फ़ॉर्म को पहले से भरने के लिए, इन संकेतों का इस्तेमाल करें. इससे आपका ऐप्लिकेशन ऑन-बोर्डिंग की प्रोसेस को तेज़ करता है.

Android 6.0 (Marshmallow) और इसके बाद के वर्शन पर, आपके ऐप्लिकेशन को किसी डिवाइस या रनटाइम की अनुमति का अनुरोध करने की ज़रूरत नहीं है. ऐसा करके, क्रेडेंशियल एपीआई की मदद से साइन-इन से जुड़े संकेत पाए जा सकते हैं.

शुरू करने से पहले

Android Studio प्रोजेक्ट को कॉन्फ़िगर करना.

साइन इन करने के संकेत वापस पाएं

साइन-इन करने के लिए दिए जाने वाले हिंट को फिर से पाने के लिए, पहले संकेत सिलेक्टर वाले डायलॉग बॉक्स को कॉन्फ़िगर करें. इसके लिए, HintRequest ऑब्जेक्ट बनाएं. इसके बाद, उपयोगकर्ता को कोई ईमेल पता चुनने का प्रॉम्प्ट भेजने के लिए, HintRequest ऑब्जेक्ट को CredentialsClient.getHintPickerIntent() पर पास करें. आखिर में, startIntentSenderForResult() से इंटेंट शुरू करें.

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 में साइन इन करने के लिए संकेत चुनने वाला टूल

उपयोगकर्ता को इस्तेमाल करने के लिए कोई ईमेल पता चुनने को कहा जाता है.

इसके बाद, गतिविधि के onActivityResult() तरीके में, Credential.EXTRA_KEY पार्सल से संकेत पाएं, देखें कि उपयोगकर्ता आपके उपयोगकर्ता डेटाबेस में है या नहीं. साथ ही, क्रेडेंशियल की मदद से सही गतिविधि शुरू करें.

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

    ...

}

साइन-इन फ़ॉर्म पहले से भरना

अगर उपयोगकर्ता आपके उपयोगकर्ता डेटाबेस में है और आपने ऐप्लिकेशन में साइन इन करने की गतिविधि शुरू की है, तो यह देखा जा सकता है कि Credential ऑब्जेक्ट में आईडी टोकन मौजूद है या नहीं. हालांकि, ऐसा करना ज़रूरी नहीं है. अगर ऐसा है, तो उपयोगकर्ता को पासवर्ड टाइप किए बिना, आईडी टोकन की मदद से साइन इन किया जा सकता है.

अगर Credential ऑब्जेक्ट में कोई आईडी टोकन नहीं है (या आपको आईडी टोकन का इस्तेमाल नहीं करना है), तो साइन-इन फ़ील्ड में उन संकेतों के साथ पहले से ही जानकारी भरें जिन्हें आपने इंटेंट में जोड़ा है.

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

        ...
    }

    ...
}

साइन-अप फ़ॉर्म पहले से भरें

अगर उपयोगकर्ता आपके उपयोगकर्ता डेटाबेस में नहीं है और आपने ऐप्लिकेशन के लिए साइन अप गतिविधि शुरू की है, तो साइन-अप फ़ील्ड में वे साइन-इन संकेत पहले से ही भरें जिन्हें आपने इंटेंट में जोड़ा है.

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.

        ...
    }

    ...
}

इसके अलावा, यह भी देखा जा सकता है कि Credential ऑब्जेक्ट में, ऐसा आईडी टोकन है या नहीं जिसकी पुष्टि ईमेल पते से की गई हो. अगर ऐसा है, तो आप अपने ऐप्लिकेशन के ईमेल पते की पुष्टि करने वाले चरण को छोड़ सकते हैं, क्योंकि Google ने ईमेल पते की पुष्टि पहले ही कर दी है.