अपने Android ऐप्लिकेशन में Google Sign-In को इंटिग्रेट करना

अपने Android ऐप्लिकेशन में 'Google साइन इन' को इंटिग्रेट करने के लिए, 'Google साइन इन' को कॉन्फ़िगर करें. इसके बाद, अपने ऐप्लिकेशन के लेआउट में एक बटन जोड़ें, ताकि साइन इन करने की प्रोसेस शुरू हो सके.

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

Google API कंसोल प्रोजेक्ट को कॉन्फ़िगर करें और Android Studio प्रोजेक्ट सेट अप करें.

Google साइन-इन और GoogleSignInClient ऑब्जेक्ट को कॉन्फ़िगर करना

  1. साइन इन करने की गतिविधि के onCreate तरीके में, Google से साइन इन करने की सुविधा को कॉन्फ़िगर करें, ताकि आपका ऐप्लिकेशन उपयोगकर्ता से ज़रूरी डेटा का अनुरोध कर सके. उदाहरण के लिए, उपयोगकर्ताओं के आईडी और बुनियादी प्रोफ़ाइल की जानकारी का अनुरोध करने के लिए, Google से साइन इन करने की सुविधा को कॉन्फ़िगर करने के लिए, DEFAULT_SIGN_IN पैरामीटर के साथ GoogleSignInOptions ऑब्जेक्ट बनाएं. अगर आपको उपयोगकर्ताओं के ईमेल पतों का अनुरोध भी करना है, तो GoogleSignInOptions ऑब्जेक्ट को requestEmail विकल्प के साथ बनाएं.

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    अगर आपको Google API ऐक्सेस करने के लिए, अतिरिक्त स्कोप का अनुरोध करना है, तो उन्हें requestScopes के साथ बताएं. उपयोगकर्ता को बेहतर अनुभव देने के लिए, साइन इन करने के दौरान सिर्फ़ उन स्कोप के लिए अनुरोध करें जो आपके ऐप्लिकेशन के लिए ज़रूरी हैं. किसी भी अतिरिक्त स्कोप का अनुरोध सिर्फ़ तब करें, जब आपको उनकी ज़रूरत हो. इससे आपके उपयोगकर्ताओं को सहमति वाली स्क्रीन, उनकी की गई कार्रवाई के हिसाब से दिखेगी. ज़्यादा स्कोप का अनुरोध करना लेख पढ़ें.

  2. इसके बाद, साइन-इन गतिविधि के onCreate तरीके में, आपके दिए गए विकल्पों के साथ एक GoogleSignInClient ऑब्जेक्ट बनाएं.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

साइन इन किए हुए किसी मौजूदा उपयोगकर्ता की जांच करना

अपनी गतिविधि के onStart तरीके में देखें कि किसी उपयोगकर्ता ने Google खाते से आपके ऐप्लिकेशन में पहले से साइन इन किया है या नहीं.

// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);

अगर GoogleSignIn.getLastSignedInAccount, null के बजाय GoogleSignInAccount ऑब्जेक्ट दिखाता है, तो इसका मतलब है कि उपयोगकर्ता ने पहले ही Google खाते से आपके ऐप्लिकेशन में साइन इन कर लिया है. इसके मुताबिक, अपने यूज़र इंटरफ़ेस (यूआई) को अपडेट करें. जैसे, साइन इन बटन को छिपाएं, अपनी मुख्य गतिविधि शुरू करें या अपने ऐप्लिकेशन के लिए जो भी सही हो उसे करें.

अगर GoogleSignIn.getLastSignedInAccount, null दिखाता है, तो इसका मतलब है कि उपयोगकर्ता ने अब तक Google खाते से आपके ऐप्लिकेशन में साइन इन नहीं किया है. Google से साइन इन करने का बटन दिखाने के लिए, अपने यूज़र इंटरफ़ेस (यूआई) को अपडेट करें.

अपने ऐप्लिकेशन में 'Google से साइन इन करें' बटन जोड़ना

  1. Google से साइन इन करने का स्टैंडर्ड बटन अपने ऐप्लिकेशन के लेआउट में SignInButton जोड़ें:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. ज़रूरी नहीं: अगर आपने साइन इन बटन की अपनी ऐसेट देने के बजाय, डिफ़ॉल्ट साइन-इन बटन ग्राफ़िक का इस्तेमाल किया है, तो setSize तरीके से बटन के साइज़ को पसंद के मुताबिक बनाया जा सकता है.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. Android गतिविधि में (उदाहरण के लिए, onCreate तरीके में), अपने बटन के OnClickListener को रजिस्टर करें, ताकि क्लिक करने पर उपयोगकर्ता साइन इन कर सके:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

साइन-इन फ़्लो शुरू करना

  1. साइन-इन करने के लिए खाता चुनने की सुविधा की इमेज ऐक्टिविटी के onClick मेथड में, साइन इन बटन पर टैप करने की सुविधा को मैनेज करें. इसके लिए, getSignInIntent मेथड का इस्तेमाल करके साइन इन करने का इंटेंट बनाएं और startActivityForResult का इस्तेमाल करके इंटेंट शुरू करें.

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            // ...
        }
    }
    
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    इस इंटेंट को शुरू करने पर, उपयोगकर्ता को साइन इन करने के लिए Google खाता चुनने का अनुरोध किया जाता है. अगर आपने profile, email, और openid से ज़्यादा स्कोप का अनुरोध किया है, तो उपयोगकर्ता को अनुरोध किए गए संसाधनों का ऐक्सेस देने के लिए भी कहा जाता है.

  2. उपयोगकर्ता के साइन इन करने के बाद, आपको गतिविधि के onActivityResult तरीके में उपयोगकर्ता के लिए GoogleSignInAccount ऑब्जेक्ट मिल सकता है.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    GoogleSignInAccount ऑब्जेक्ट में, साइन इन किए हुए उपयोगकर्ता के बारे में जानकारी होती है. जैसे, उपयोगकर्ता का नाम.

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
    
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    getEmail की मदद से, उपयोगकर्ता का ईमेल पता भी पाया जा सकता है. साथ ही, getId की मदद से, उपयोगकर्ता का Google आईडी (क्लाइंट-साइड के इस्तेमाल के लिए) और getIdToken की मदद से, उपयोगकर्ता के लिए आईडी टोकन पाया जा सकता है. अगर आपको इस समय साइन-इन किए हुए उपयोगकर्ता की जानकारी किसी बैकएंड सर्वर को देनी है, तो अपने बैकएंड सर्वर को आईडी टोकन भेजें और सर्वर पर टोकन की पुष्टि करें.