एक टैप से नए खाते बनाएं

अगर आपके पास Google खातों से साइन इन करने की सुविधा है, तो One Tap की मदद से साइन-इन करने की सुविधा का इस्तेमाल किया जा सकता है ताकि आपके उपयोगकर्ताओं को खाता बनाने का आसान अनुभव दिया जा सके. उन्हें आपके ऐप्लिकेशन के संदर्भ से बाहर नहीं ले जाता.

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

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

One Tap का खाता बनाने की प्रोसेस को लागू करने के दो चरण हैं:

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

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

उपयोगकर्ताओं को One Tap की मदद से साइन-अप करने की सुविधा देने का सबसे असरदार तरीका यह है कि साइन इन करने से नई सुविधाएं चालू हो जाएंगी. सबसे पहले, उपयोगकर्ता को किसी क्रेडेंशियल सेव किया गया. अगर सेव किया गया कोई क्रेडेंशियल नहीं मिलता है, तो नया क्रेडेंशियल बनाने का विकल्प दें उपयोगकर्ता के लिए खाता होना चाहिए.

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

अपने Google API कंसोल प्रोजेक्ट और Android प्रोजेक्ट को बताए गए तरीके से सेट अप करें One Tap साइन इन का इस्तेमाल शुरू करें में.

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

अगर आपको खाता बनाने के लिए One Tap क्लाइंट को कॉन्फ़िगर करना है, तो ये काम करें:

  • पासवर्ड क्रेडेंशियल के अनुरोध चालू न करें. (सिर्फ़ एक बार टैप करके साइन-अप किया जा सकता है पुष्टि करने के लिए टोकन का इस्तेमाल करें.)
  • setGoogleIdTokenRequestOptions() का इस्तेमाल करके Google आईडी टोकन के अनुरोध चालू करें ये सेटिंग:

Java

public class YourActivity extends AppCompatActivity {

  // ...

  private SignInClient oneTapClient;
  private BeginSignInRequest signUpRequest;

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

      oneTapClient = Identity.getSignInClient(this);
      signUpRequest = BeginSignInRequest.builder()
              .setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder()
                      .setSupported(true)
                      // Your server's client ID, not your Android client ID.
                      .setServerClientId(getString(R.string.your_web_client_id))
                      // Show all accounts on the device.
                      .setFilterByAuthorizedAccounts(false)
                      .build())
              .build();

      // ...
  }
}

Kotlin

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

    private lateinit var oneTapClient: SignInClient
    private lateinit var signUpRequest: BeginSignInRequest

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

        oneTapClient = Identity.getSignInClient(this)
        signUpRequest = BeginSignInRequest.builder()
            .setGoogleIdTokenRequestOptions(
                BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
                    .setSupported(true)
                    // Your server's client ID, not your Android client ID.
                    .setServerClientId(getString(R.string.your_web_client_id))
                    // Show all accounts on the device.
                    .setFilterByAuthorizedAccounts(false)
                    .build())
            .build()
        // ...
    }
    // ...
}

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

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

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

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

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

अगर उपयोगकर्ता के पास डिवाइस पर कोई Google खाता नहीं है, तो 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 Google Accounts found. Just continue presenting the signed-out UI.
                Log.d(TAG, e.getLocalizedMessage());
            }
        });

Kotlin

oneTapClient.beginSignIn(signUpRequest)
    .addOnSuccessListener(this) { result ->
        try {
            startIntentSenderForResult(
                result.pendingIntent.intentSender, REQ_ONE_TAP,
                null, 0, 0, 0)
        } catch (e: IntentSender.SendIntentException) {
            Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
        }
    }
    .addOnFailureListener(this) { e ->
        // No Google Accounts found. Just continue presenting the signed-out UI.
        Log.d(TAG, e.localizedMessage)
    }

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

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

Google आईडी टोकन का इस्तेमाल करके खाता बनाना

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

अपने बैकएंड पर खाता बनाने के लिए, आईडी टोकन का इस्तेमाल करें. इसके बारे में ज़्यादा जानने के लिए, आईडी टोकन का इस्तेमाल करके बैकएंड) और उपयोगकर्ता को साइन इन करने की अनुमति दें.

क्रेडेंशियल में मांगी गई अन्य जानकारी भी शामिल होती है, जैसे खाते का पुष्टि किया गया फ़ोन नंबर डालें.

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();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  }
              } 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
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token!")
                        }
                    }
                } 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})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

अगले चरण

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

अगर आपको खाता बनाने की प्रक्रिया पूरी करने के लिए ज़्यादा जानकारी की ज़रूरत है, तो उदाहरण के लिए, उपयोगकर्ता जन्म की तारीख—उपयोगकर्ता को साइन-अप की जानकारी देने वाले फ़्लो के बारे में बताएं, जहां आपको यह अतिरिक्त जानकारी चाहिए होगी. इसके बाद, खाता बनाने के लिए इसे अपने बैकएंड पर भेजें.