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

One Tap की मदद से साइन-इन करने वाले क्लाइंट का इस्तेमाल करके, उपयोगकर्ता से डेटा वापस पाने की अनुमति मांगें आपके ऐप्लिकेशन में साइन इन करने के लिए इस्तेमाल किया गया कोई एक क्रेडेंशियल. ये क्रेडेंशियल Google खाते या उपयोगकर्ता नाम-पासवर्ड के कॉम्बिनेशन में हो सकते हैं जानकारी सेव करने के लिए Chrome, Android की ऑटोमैटिक भरने की सुविधा या Smart Lock की सुविधा का इस्तेमाल करके पासवर्ड.

एक टैप में साइन इन करने के लिए यूज़र इंटरफ़ेस (यूआई)

क्रेडेंशियल वापस मिलने के बाद, बिना किसी रुकावट के उनका इस्तेमाल किया जा सकता है उपयोगकर्ता को आपके ऐप्लिकेशन में साइन इन करवाएं.

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

मुझे One Tap साइन इन की सुविधा का इस्तेमाल कहां करना चाहिए?

अगर आपके ऐप्लिकेशन में उपयोगकर्ताओं के लिए साइन इन करना ज़रूरी है, तो अपने साइन इन करने के दौरान One Tap यूज़र इंटरफ़ेस (यूआई) दिखाएं स्क्रीन. यह तब भी मददगार हो सकता है, जब आपके डिवाइस पर पहले से "Google से साइन इन करें" सुविधा मौजूद हो बटन: क्योंकि One Tap यूज़र इंटरफ़ेस (यूआई) को सिर्फ़ क्रेडेंशियल दिखाने के लिए कॉन्फ़िगर किया जा सकता है अगर उपयोगकर्ता ने पहले साइन इन किया है, तो यह उन उपयोगकर्ताओं को रिमाइंडर हो सकता है जो कभी-कभी साइन इन करते हैं साइन इन करें और पिछली बार उन्हें इस तरह साइन इन करें अपने ऐप्लिकेशन से नए खाते बनाकर.

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

साइन-इन करने की सुविधा देने वाले वैकल्पिक ऐप्लिकेशन को भी अपनी साइन-इन स्क्रीन पर, One Tap की मदद से साइन-इन करने की सुविधा का इस्तेमाल करना चाहिए, ऊपर बताई गई वजहों से.

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

1. One Tap साइन इन क्लाइंट को कॉन्फ़िगर करें

सेव की गई जानकारी का इस्तेमाल करके, उपयोगकर्ताओं को साइन इन करने के लिए, One Tap की सुविधा से साइन-इन करने वाले क्लाइंट को कॉन्फ़िगर किया जा सकता है पासवर्ड, सेव किए गए Google खाते या कोई और. (दोनों का समर्थन करने का सुझाव दिया जाता है, नए उपयोगकर्ताओं के लिए, एक टैप में खाता बनाने और अपने-आप या एक टैप में साइन-इन की सुविधा चालू करें लौटने वाले ज़्यादा से ज़्यादा उपयोगकर्ताओं के लिए.)

अगर आपका ऐप्लिकेशन, पासवर्ड की मदद से साइन इन करने की सुविधा का इस्तेमाल करता है, तो setPasswordRequestOptions() का इस्तेमाल करके पासवर्ड क्रेडेंशियल अनुरोध सक्षम करें.

अगर आपका ऐप्लिकेशन 'Google साइन इन' का इस्तेमाल करता है, तो इन कामों के लिए setGoogleIdTokenRequestOptions() का इस्तेमाल करें Google आईडी टोकन के अनुरोधों को चालू और कॉन्फ़िगर करें:

  • सर्वर क्लाइंट आईडी को Google API में बनाए गए आईडी पर सेट करें कंसोल में बदल सकता है. ध्यान दें कि यह आपके सर्वर का क्लाइंट आईडी है, न कि अपना Android क्लाइंट आईडी डालें.

  • अनुमति वाले खातों के हिसाब से फ़िल्टर करने के लिए, क्लाइंट को कॉन्फ़िगर करें. इसे चालू करने पर विकल्प चुनने पर, One Tap क्लाइंट को सिर्फ़ वे Google खाते जिनका इस्तेमाल वे पहले कर चुके हैं. इससे उपयोगकर्ताओं को साइन इन करने में मदद मिल सकती है का पता नहीं है जब उन्हें नहीं पता होता कि उनके पास पहले से कोई खाता है या नहीं या जो इस Google खाते का इस्तेमाल किया है. साथ ही, इससे लोग गलती से नए Google खाते का इस्तेमाल नहीं कर पाएंगे खाते हैं.

  • अगर आपको यह सुविधा चाहिए कि जब भी मुमकिन हो, उपयोगकर्ताओं को अपने-आप साइन इन होने की सुविधा दे, तो इस सुविधा को चालू करें setAutoSelectEnabled() के साथ. अपने-आप साइन-इन होने की सुविधा का इस्तेमाल तब किया जा सकता है, जब ये शर्तें पूरी की गई हैं:

    • उपयोगकर्ता ने आपके ऐप्लिकेशन के लिए सिर्फ़ एक क्रेडेंशियल सेव किया है. इसका मतलब है कि एक ने पासवर्ड या सेव किया गया एक Google खाता होना चाहिए.
    • उपयोगकर्ता ने अपने खाते में अपने-आप साइन-इन होने की सुविधा को बंद नहीं किया है Google खाते की सेटिंग.
  • हालांकि, हमारा सुझाव है कि आप नॉन्स का इस्तेमाल करके साइन-इन की सुरक्षा को बेहतर बनाएं और रीप्ले से होने वाली हमलों से बचें. इस्तेमाल की जाने वाली चीज़ें setNonce हर अनुरोध में नॉन्स शामिल करें. SafetyNet देखें नॉन्स लें सेक्शन देखें.

Java

public class YourActivity extends AppCompatActivity {
  // ...

  private SignInClient oneTapClient;
  private BeginSignInRequest signInRequest;

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState,
                       @Nullable PersistableBundle persistentState) {
      super.onCreate(savedInstanceState, persistentState);

      oneTapClient = Identity.getSignInClient(this);
      signInRequest = BeginSignInRequest.builder()
              .setPasswordRequestOptions(PasswordRequestOptions.builder()
                      .setSupported(true)
                      .build())
              .setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder()
                      .setSupported(true)
                      // Your server's client ID, not your Android client ID.
                      .setServerClientId(getString(R.string.default_web_client_id))
                      // Only show accounts previously used to sign in.
                      .setFilterByAuthorizedAccounts(true)
                      .build())
              // Automatically sign in when exactly one credential is retrieved.
              .setAutoSelectEnabled(true)
              .build();
      // ...
  }
  // ...
}

Kotlin

class YourActivity : AppCompatActivity() {
    // ...

    private lateinit var oneTapClient: SignInClient
    private lateinit var signInRequest: BeginSignInRequest

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        oneTapClient = Identity.getSignInClient(this)
        signInRequest = BeginSignInRequest.builder()
            .setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder()
                .setSupported(true)
                .build())
            .setGoogleIdTokenRequestOptions(
                BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
                    .setSupported(true)
                    // Your server's client ID, not your Android client ID.
                    .setServerClientId(getString(R.string.your_web_client_id))
                    // Only show accounts previously used to sign in.
                    .setFilterByAuthorizedAccounts(true)
                    .build())
            // Automatically sign in when exactly one credential is retrieved.
            .setAutoSelectEnabled(true)
            .build()
        // ...
    }
    // ...
}

2. साइन इन किए हुए उपयोगकर्ता की जांच करना

अगर साइन इन किए हुए या साइन आउट कर चुके उपयोगकर्ता आपकी ऐक्टिविटी का इस्तेमाल कर सकते हैं, तो One Tap साइन इन यूज़र इंटरफ़ेस (यूआई) दिखाने से पहले उपयोगकर्ता का स्टेटस.

आपको यह भी ट्रैक करना चाहिए कि उपयोगकर्ता ने पहले ही इस्तेमाल करने से मना कर दिया है या नहीं One Tap की मदद से साइन-इन करने के लिए, प्रॉम्प्ट को बंद करें या उसके बाहर टैप करें. यह काम कर सकता है आपकी ऐक्टिविटी की बूलियन प्रॉपर्टी जितनी ही आसान होगी. (नीचे, One Tap यूज़र इंटरफ़ेस (यूआई) दिखाना बंद करना देखें.)

3. One Tap का साइन इन यूज़र इंटरफ़ेस (यूआई) दिखाना

अगर उपयोगकर्ता ने साइन इन नहीं किया है और One Tap की मदद से साइन इन करने के अनुरोध को पहले से अस्वीकार नहीं किया है, क्लाइंट ऑब्जेक्ट के beginSignIn() तरीके को कॉल करें और लिसनर को Task यह गड़बड़ी दिखाता है. ऐप्लिकेशन ऐसा आम तौर पर गतिविधि के onCreate() तरीके में करते हैं या एक गतिविधि वाले आर्किटेक्चर का इस्तेमाल करते समय, स्क्रीन ट्रांज़िशन के बाद.

अगर उपयोगकर्ता ने कुछ भी सेव किया है, तो One Tap क्लाइंट, सर्च लिसनर को कॉल करेगा अपने ऐप्लिकेशन के क्रेडेंशियल डालें. सक्सेस लिसनर में, पेंडिंग इंटेंट को Task नतीजा मिला और उसे शुरू करने के लिए startIntentSenderForResult() को पास करें One Tap का साइन इन यूज़र इंटरफ़ेस (यूआई).

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

Java

oneTapClient.beginSignIn(signUpRequest)
        .addOnSuccessListener(this, new OnSuccessListener<BeginSignInResult>() {
            @Override
            public void onSuccess(BeginSignInResult result) {
                try {
                    startIntentSenderForResult(
                            result.getPendingIntent().getIntentSender(), REQ_ONE_TAP,
                            null, 0, 0, 0);
                } catch (IntentSender.SendIntentException e) {
                    Log.e(TAG, "Couldn't start One Tap UI: " + e.getLocalizedMessage());
                }
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // No saved credentials found. Launch the One Tap sign-up flow, or
                // do nothing and continue presenting the signed-out UI.
                Log.d(TAG, e.getLocalizedMessage());
            }
        });

Kotlin

oneTapClient.beginSignIn(signInRequest)
    .addOnSuccessListener(this) { result ->
        try {
            startIntentSenderForResult(
                result.pendingIntent.intentSender, REQ_ONE_TAP,
                null, 0, 0, 0, null)
        } catch (e: IntentSender.SendIntentException) {
            Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
        }
    }
    .addOnFailureListener(this) { e ->
        // No saved credentials found. Launch the One Tap sign-up flow, or
        // do nothing and continue presenting the signed-out UI.
        Log.d(TAG, e.localizedMessage)
    }

4. लोगों के जवाब मैनेज करना

One Tap की मदद से साइन-इन करने के अनुरोध पर, उपयोगकर्ता का जवाब आपके ऐप्लिकेशन को रिपोर्ट कर दिया जाएगा आपकी गतिविधि के onActivityResult() तरीके का इस्तेमाल करके. अगर उपयोगकर्ता ने साइन इन करने का विकल्प चुना हो, तो एक सेव किया गया क्रेडेंशियल मिलेगा. अगर उपयोगकर्ता ने साइन इन करने से मना कर दिया हो, तो One Tap यूज़र इंटरफ़ेस (यूआई) को बंद करने या उसके बाहर टैप करने पर, कोड RESULT_CANCELED. आपके ऐप्लिकेशन को दोनों सुविधाएं पूरी करनी होंगी.

वापस लिए गए क्रेडेंशियल की मदद से साइन इन करें

अगर उपयोगकर्ता ने आपके ऐप्लिकेशन के साथ क्रेडेंशियल शेयर करने का विकल्प चुना है, तो आपके पास उन्हें इस तरीके से वापस पाने का विकल्प है इंटेंट डेटा को onActivityResult() से One Tap क्लाइंट में पास करना getSignInCredentialFromIntent() तरीका. क्रेडेंशियल में एक गैर-शून्य होगा googleIdToken प्रॉपर्टी, अगर उपयोगकर्ता ने Google खाते का क्रेडेंशियल इनके साथ शेयर किया है आपका ऐप्लिकेशन या बिना शून्य वाली password प्रॉपर्टी.

अपने ऐप्लिकेशन के बैकएंड से पुष्टि करने के लिए, क्रेडेंशियल का इस्तेमाल करें.

  • अगर कोई उपयोगकर्ता नाम और पासवर्ड की जोड़ी मिल गई है, तो उसी में साइन इन करने के लिए उनका इस्तेमाल करें उस तरीके से होगा, जो उपयोगकर्ता से मैन्युअल रूप से मिलता.
  • अगर Google खाते के क्रेडेंशियल मिल गए हैं, तो पुष्टि करने के लिए आईडी टोकन का इस्तेमाल करें साथ मिलकर काम करें. अगर आपने शॉर्ट वीडियो को दोबारा चलाने से रोकने के लिए, नॉन्स का इस्तेमाल करने का विकल्प चुना है हमलों की जांच करके, अपने बैकएंड सर्वर पर रिस्पॉन्स वैल्यू की जांच की जाती है. यहां जाएं: आईडी टोकन का इस्तेमाल करके, बैकएंड की मदद से पुष्टि करें.

Java

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
                  String idToken = credential.getGoogleIdToken();
                  String username = credential.getId();
                  String password = credential.getPassword();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  } else if (password != null) {
                      // Got a saved username and password. Use them to authenticate
                      // with your backend.
                      Log.d(TAG, "Got password.");
                  }
              } catch (ApiException e) {
                  // ...
              }
              break;
      }
  }
}

Kotlin

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
             REQ_ONE_TAP -> {
                try {
                    val credential = oneTapClient.getSignInCredentialFromIntent(data)
                    val idToken = credential.googleIdToken
                    val username = credential.id
                    val password = credential.password
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        password != null -> {
                            // Got a saved username and password. Use them to authenticate
                            // with your backend.
                            Log.d(TAG, "Got password.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token or password!")
                        }
                    }
                } catch (e: ApiException) {
                    // ...
                }
            }
        }
    }
    // ...
}

One Tap की सुविधा का यूज़र इंटरफ़ेस (यूआई) दिखाना बंद करें

अगर उपयोगकर्ता ने साइन इन करने से मना कर दिया, तो getSignInCredentialFromIntent() पर कॉल किया जाएगा एक CommonStatusCodes.CANCELED स्थिति कोड के साथ एक ApiException देगा. ऐसा होने पर, आपको One Tap की मदद से साइन-इन करने के यूज़र इंटरफ़ेस (यूआई) को कुछ समय के लिए बंद कर देना चाहिए, ताकि अपने उपयोगकर्ताओं को बार-बार प्रॉम्प्ट से परेशान न करें. यहां दिए गए उदाहरण से कुछ नतीजे मिलते हैं को गतिविधि पर एक प्रॉपर्टी सेट करके इसे ऐसा किया जाता है, जिसका इस्तेमाल यह तय करने के लिए करता है कि उपयोगकर्ता को One Tap की सुविधा से साइन-इन करने की सुविधा देने के लिए; हालांकि, आप SharedPreferences या किसी दूसरे तरीके का इस्तेमाल करें.

यह ज़रूरी है कि आप One Tap साइन-इन प्रॉम्प्ट के लिए, अपने हिसाब से अनुरोध की संख्या सीमित करें. अगर ऐसा नहीं किया जाता है और कोई उपयोगकर्ता एक ही लाइन में कई प्रॉम्प्ट रद्द कर देता है, तो One Tap क्लाइंट को उपयोगकर्ता को अगले 24 घंटे तक सूचना नहीं देगा.

Java

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  // ...
              } catch (ApiException e) {
                  switch (e.getStatusCode()) {
                      case CommonStatusCodes.CANCELED:
                          Log.d(TAG, "One-tap dialog was closed.");
                          // Don't re-prompt the user.
                          showOneTapUI = false;
                          break;
                      case CommonStatusCodes.NETWORK_ERROR:
                          Log.d(TAG, "One-tap encountered a network error.");
                          // Try again or just ignore.
                          break;
                      default:
                          Log.d(TAG, "Couldn't get credential from result."
                                  + e.getLocalizedMessage());
                          break;
                  }
              }
              break;
      }
  }
}

Kotlin

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            REQ_ONE_TAP -> {
                try {
                    // ...
                } catch (e: ApiException) {
                    when (e.statusCode) {
                        CommonStatusCodes.CANCELED -> {
                            Log.d(TAG, "One-tap dialog was closed.")
                            // Don't re-prompt the user.
                            showOneTapUI = false
                        }
                        CommonStatusCodes.NETWORK_ERROR -> {
                            Log.d(TAG, "One-tap encountered a network error.")
                            // Try again or just ignore.
                        }
                        else -> {
                            Log.d(TAG, "Couldn't get credential from result." +
                                " (${e.localizedMessage})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

5. साइन-आउट की प्रक्रिया को मैनेज करना

जब कोई उपयोगकर्ता आपके ऐप्लिकेशन से साइन आउट हो जाता है, तो One Tap क्लाइंट के signOut() तरीके को कॉल करें. signOut() को कॉल करने से, अपने-आप साइन इन होने की सुविधा तब तक बंद रहती है, जब तक उपयोगकर्ता फिर से साइन इन नहीं करता.

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

अगले चरण

अगर आपने Google क्रेडेंशियल फिर से पाने के लिए, One Tap क्लाइंट को कॉन्फ़िगर किया है, तो आपका ऐप्लिकेशन अब Google आईडी टोकन पा सकते हैं जो आपके उपयोगकर्ताओं के Google खाते. ज़्यादा जानें बैकएंड पर इन टोकन का इस्तेमाल करने का तरीका जानें.

अगर आपके खाते में 'Google साइन इन' की सुविधा काम करती है, तो One Tap क्लाइंट का इस्तेमाल करके आपके ऐप्लिकेशन पर, बिना किसी रुकावट के खाता बनाने की सुविधा मिलती है.