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

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