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

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

One-tap साइन-अप यूज़र इंटरफ़ेस (यूआई)

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

'एक टैप करके खाता बनाएं' सुविधा को लागू करने के लिए, ये दो काम करने होते हैं:

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

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

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

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

एक टैप से साइन इन करने की सुविधा का इस्तेमाल शुरू करना में दिए गए निर्देशों के मुताबिक, Google API कंसोल प्रोजेक्ट और Android प्रोजेक्ट सेट अप करें.

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

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

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

    • सर्वर क्लाइंट आईडी को Google APIs console में बनाए गए आईडी पर सेट करें. ध्यान दें कि यह आपके सर्वर का क्लाइंट आईडी है, न कि आपके Android ऐप्लिकेशन का क्लाइंट आईडी.
    • क्लाइंट को इस तरह कॉन्फ़िगर करें कि वह डिवाइस पर मौजूद सभी 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 साइन-अप का इस्तेमाल करने से पहले ही मना कर दिया है या नहीं. यह आपकी गतिविधि की बूलियन प्रॉपर्टी जितनी आसान हो सकती है. (नीचे, One Tap यूज़र इंटरफ़ेस (यूआई) को दिखाना बंद करना देखें.)

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

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

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

अगर उपयोगकर्ता के डिवाइस पर कोई 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. उपयोगकर्ता के जवाब को मैनेज करना

उपयोगकर्ता ने एक टैप करके साइन अप करने के प्रॉम्प्ट का जो जवाब दिया होगा उसे आपके ऐप्लिकेशन को बताया जाएगा. इसके लिए, आपकी गतिविधि के 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 साइन-इन की सुविधा देनी है या नहीं. हालांकि, 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})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

अगले चरण

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

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