किसी उपयोगकर्ता के सेव किए गए क्रेडेंशियल वापस पाएं

अनुरोध करने के लिए, Credentials API का इस्तेमाल करें. इससे, लोगों को आपके ऐप्लिकेशन में अपने-आप साइन इन होने की सुविधा मिल जाएगी और अपने उपयोगकर्ताओं के लिए सेव किए गए क्रेडेंशियल पाएं.

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

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

CredentialsClient ऑब्जेक्ट बनाएं

सेव किए गए क्रेडेंशियल का अनुरोध करने के लिए, आपको एक इंस्टेंस बनाना होगा क्रेडेंशियल एपीआई ऐक्सेस करने के लिए CredentialsClient:

CredentialsClient mCredentialsClient;

// ...

mCredentialsApiClient = Credentials.getClient(this);

CredentialRequest ऑब्जेक्ट बनाएं

CredentialRequest ऑब्जेक्ट, साइन-इन सिस्टम चुनें जिनसे आप क्रेडेंशियल के लिए अनुरोध करना चाहते हैं. किसी प्रॉडक्ट की पिच के लिए इसके लिए, setPasswordLoginSupported तरीके का इस्तेमाल करके CredentialRequest पासवर्ड पर आधारित साइन-इन और फ़ेडरेटेड के लिए setAccountTypes() तरीका जैसी साइन-इन सेवाएं.

mCredentialRequest = new CredentialRequest.Builder()
    .setPasswordLoginSupported(true)
    .setAccountTypes(IdentityProviders.GOOGLE, IdentityProviders.TWITTER)
    .build();

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

सेव किए गए क्रेडेंशियल के लिए अनुरोध करें

CredentialsClient और CredentialRequest ऑब्जेक्ट बनाने के बाद, अनुरोध ऑब्जेक्ट पास करें CredentialsClient.request() तक का इस्तेमाल किया जा सकता है.

  mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
                  // See "Handle successful credential requests"
                  onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }

              // See "Handle unsuccessful and incomplete credential requests"
              // ...
          }
      });

सफल और पूरे न हो पाने वाले अनुरोधों को मैनेज करने के लिए, कॉलबैक को तय करें. इसके लिए, addOnCompleteListener() तरीका.

क्रेडेंशियल के सफल अनुरोधों को मैनेज करना

टोस्ट से पता चलता है कि साइन इन हो गया है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है क्रेडेंशियल का अनुरोध पूरा होने पर, नतीजे के तौर पर Credential ऑब्जेक्ट को इकट्ठा करने की ज़रूरत नहीं होती. getAccountType() तरीके का इस्तेमाल करें का पता लगाएं कि क्रेडेंशियल किस तरह के हैं. इसके बाद, सही तरीके से साइन-इन करें प्रोसेस. उदाहरण के लिए, 'Google साइन-इन' के लिए, ऐसा GoogleSignInClient ऑब्जेक्ट बनाएं जो उपयोगकर्ता का आईडी शामिल करता है, फिर साइन-इन फ़्लो शुरू करने के लिए ऑब्जेक्ट का इस्तेमाल करें. पासवर्ड-आधारित साइन-इन करें, फिर अपने ऐप्लिकेशन की साइन-इन प्रोसेस.

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential.
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

सेव किए गए एक से ज़्यादा क्रेडेंशियल मैनेज करना

Smart Lock खाता चुनने की सुविधा

जब क्रेडेंशियल चुनने के लिए उपयोगकर्ता के इनपुट की ज़रूरत होगी, तब request() टास्क ResolvableApiException से विफल. जांच लें कि getStatusCode(), RESOLUTION_REQUIRED और वैल्यू दिखाता है उपयोगकर्ता को प्रॉम्प्ट भेजने के लिए, अपवाद के startResolutionForResult() तरीके को कॉल करें खाता चुनने के लिए. इसके बाद, ऐक्टिविटी की onActivityResult() विधि Credential.EXTRA_KEY को getParcelableExtra() तरीका.

mCredentialsClient.request(request).addOnCompleteListener(
        new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    // ...
                    return;
                }

                Exception e = task.getException();
                if (e instanceof ResolvableApiException) {
                    // This is most likely the case where the user has multiple saved
                    // credentials and needs to pick one. This requires showing UI to
                    // resolve the read request.
                    ResolvableApiException rae = (ResolvableApiException) e;
                    resolveResult(rae, RC_READ);
                } else if (e instanceof ApiException) {
                    // The user must create an account or sign in manually.
                    Log.e(TAG, "Unsuccessful credential request.", e);

                    ApiException ae = (ApiException) e;
                    int code = ae.getStatusCode();
                    // ...
                }
            }
        });
private void resolveResult(ResolvableApiException rae, int requestCode) {
    try {
        rae.startResolutionForResult(MainActivity.this, requestCode);
        mIsResolving = true;
    } catch (IntentSender.SendIntentException e) {
        Log.e(TAG, "Failed to send resolution.", e);
        hideProgress();
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // ...

    if (requestCode == RC_READ) {
        if (resultCode == RESULT_OK) {
            Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
            onCredentialRetrieved(credential);
        } else {
            Log.e(TAG, "Credential Read: NOT OK");
            Toast.makeText(this, "Credential Read Failed", Toast.LENGTH_SHORT).show();
        }
    }

    // ...

}

सेव किए गए क्रेडेंशियल न मिलने पर, उपयोगकर्ताओं को खाता या मैन्युअल तरीके से बनाना होगा साइन इन करें. अगर getStatusCode() SIGN_IN_REQUIRED दिखाता है, आपके पास यह प्रॉम्प्ट उपयोगकर्ता को हाल ही में इस्तेमाल की गई साइन-इन जानकारी चुनने के लिए कहा जाएगा, जैसे कि ईमेल पता और साथ ही, फ़ॉर्म के कुछ फ़ील्ड में वह जानकारी अपने-आप भर जाएगी. उपयोगकर्ता को साइन इन करने के संकेत देना देखें देखें.

साइन इन करने के बाद, उपयोगकर्ताओं को अपने क्रेडेंशियल सेव करने की अनुमति दें ताकि वे आने वाले समय में अपने सभी डिवाइसों पर अपने-आप पुष्टि कर सकें.