यदि वन टैप साइन-इन आपकी आवश्यकताओं को पूरा करता है, तो इसके बजाय इसका उपयोग करने पर विचार करें। वन टैप में एक अद्यतन उपयोगकर्ता अनुभव और अन्य सुधार हैं।

उपयोगकर्ता को साइन इन करने के बारे में जानकारी देना

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

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

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

फिर, गतिविधि&#39 के 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 ऑब्जेक्ट में आईडी टोकन ##39 नहीं है (या आप आईडी टोकन का इस्तेमाल नहीं करना चाहते), तो साइन इन फ़ील्ड को पहले बताए गए संकेतों के साथ भरें.

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 पते की पुष्टि पहले ही की जा चुकी है.