Google उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति देना

पुष्टि करने से यह पता चलता है कि कोई व्यक्ति कौन है. इसे आम तौर पर उपयोगकर्ता का साइन-अप या साइन-इन कहा जाता है. अनुमति, डेटा या संसाधनों का ऐक्सेस देने या अस्वीकार करने की प्रोसेस है. उदाहरण के लिए, आपका ऐप्लिकेशन उपयोगकर्ता के Google Drive को ऐक्सेस करने के लिए, उपयोगकर्ता की सहमति का अनुरोध करता है.

पुष्टि करने और अनुमति देने के कॉल, ऐप्लिकेशन की ज़रूरतों के आधार पर, दो अलग-अलग और अलग-अलग फ़्लो होने चाहिए.

अगर आपके ऐप्लिकेशन में ऐसी सुविधाएं हैं जो Google API के डेटा का इस्तेमाल कर सकती हैं, लेकिन वे आपके ऐप्लिकेशन की मुख्य सुविधाओं के लिए ज़रूरी नहीं हैं, तो आपको अपने ऐप्लिकेशन को इस तरह से डिज़ाइन करना चाहिए कि एपीआई डेटा ऐक्सेस न होने पर भी वह आसानी से काम कर सके. उदाहरण के लिए, अगर उपयोगकर्ता ने Drive का ऐक्सेस नहीं दिया है, तो हाल ही में सेव की गई फ़ाइलों की सूची को छिपाया जा सकता है.

आपको सिर्फ़ उन स्कोप के ऐक्सेस का अनुरोध करना चाहिए जिनकी ज़रूरत आपको Google के एपीआई को ऐक्सेस करने के लिए तब पड़ती है, जब उपयोगकर्ता कोई ऐसी कार्रवाई करता है जिसके लिए किसी खास एपीआई का ऐक्सेस ज़रूरी हो. उदाहरण के लिए, जब भी उपयोगकर्ता "Drive में सेव करें" बटन पर टैप करता है, तो आपको उपयोगकर्ता के Drive को ऐक्सेस करने की अनुमति का अनुरोध करना चाहिए.

पुष्टि करने की प्रक्रिया को अनुमति देने की प्रक्रिया से अलग रखकर, नए उपयोगकर्ताओं को परेशान होने से बचाया जा सकता है. साथ ही, यह भी बताया जा सकता है कि उनसे कुछ अनुमतियों का अनुरोध क्यों किया जा रहा है.

पुष्टि करने के लिए, हमारा सुझाव है कि आप Credential Manager API का इस्तेमाल करें. Google के पास सेव किए गए उपयोगकर्ता के डेटा को ऐक्सेस करने की ज़रूरत वाली कार्रवाइयों को अनुमति देने के लिए, हमारा सुझाव है कि आप AuthorizationClient का इस्तेमाल करें.

अपना प्रोजेक्ट सेट अप करना

  1. में अपना प्रोजेक्ट खोलें या अगर आपके पास पहले से कोई प्रोजेक्ट नहीं है, तो कोई प्रोजेक्ट बनाएं.
  2. पर, पक्का करें कि पूरी जानकारी दी गई हो और वह सही हो.
    1. पक्का करें कि आपके ऐप्लिकेशन के लिए, ऐप्लिकेशन का नाम, ऐप्लिकेशन का लोगो, और ऐप्लिकेशन का होम पेज सही हो. ये वैल्यू, साइन अप करने पर 'Google से साइन इन करें' की सहमति वाली स्क्रीन और तीसरे पक्ष के ऐप्लिकेशन और सेवाओं की स्क्रीन पर उपयोगकर्ताओं को दिखाई जाएंगी.
    2. पक्का करें कि आपने अपने ऐप्लिकेशन की निजता नीति और सेवा की शर्तों के यूआरएल डाले हों.
  3. अगर आपके पास पहले से Android क्लाइंट आईडी नहीं है, तो में जाकर, अपने ऐप्लिकेशन के लिए एक Android क्लाइंट आईडी बनाएं. आपको अपने ऐप्लिकेशन के पैकेज का नाम और SHA-1 हस्ताक्षर डालना होगा.
    1. पर जाएं.
    2. क्लाइंट बनाएं पर क्लिक करें.
    3. Android ऐप्लिकेशन का टाइप चुनें.
  4. अगर आपने अब तक नया "वेब ऐप्लिकेशन" क्लाइंट आईडी नहीं बनाया है, तो में जाकर ऐसा करें. फ़िलहाल, "अनुमति वाले JavaScript ऑरिजिन" और "अनुमति वाले रीडायरेक्ट यूआरआई" फ़ील्ड को अनदेखा किया जा सकता है. इस क्लाइंट आईडी का इस्तेमाल, आपके बैकएंड सर्वर की पहचान करने के लिए किया जाएगा. ऐसा तब किया जाएगा, जब वह Google की पुष्टि करने वाली सेवाओं के साथ इंटरैक्ट करेगा.
    1. पर जाएं.
    2. क्लाइंट बनाएं पर क्लिक करें.
    3. वेब ऐप्लिकेशन टाइप चुनें.

डिपेंडेंसी का एलान करना

अपने मॉड्यूल की build.gradle फ़ाइल में, Google Identity Services लाइब्रेरी के सबसे नए वर्शन का इस्तेमाल करके डिपेंडेंसी का एलान करें.

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

उपयोगकर्ता की कार्रवाइयों के लिए ज़रूरी अनुमतियों का अनुरोध करना

जब भी कोई उपयोगकर्ता कोई ऐसी कार्रवाई करता है जिसके लिए ज़्यादा स्कोप की ज़रूरत होती है, तो AuthorizationClient.authorize() को कॉल करें.

उदाहरण के लिए, अगर कोई उपयोगकर्ता कोई ऐसी कार्रवाई करता है जिसके लिए उसे Drive ऐप्लिकेशन के स्टोरेज का ऐक्सेस चाहिए, तो यह तरीका अपनाएं:

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

अपनी गतिविधि के onActivityResult कॉलबैक में, यह देखा जा सकता है कि ज़रूरी अनुमतियां मिली हैं या नहीं. अगर मिली हैं, तो उपयोगकर्ता कार्रवाई करें.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}

अगर सर्वर साइड पर Google API ऐक्सेस किए जा रहे हैं, तो ऑथराइज़ेशन रिज़ल्ट के getServerAuthCode() तरीके को कॉल करके ऑथराइज़ेशन कोड पाया जा सकता है. इस कोड को बैकएंड पर भेजकर, ऐक्सेस और रीफ़्रेश टोकन के लिए एक्सचेंज किया जा सकता है.