उपयोगकर्ता के डेटा तक पहुंच की अनुमति देना

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

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

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

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

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

Google Identity Services में, पुष्टि करने के लिए SignInClient का इस्तेमाल किया जाता है. हमारा सुझाव है कि जिन कार्रवाइयों को Google पर सेव किए गए उपयोगकर्ता के डेटा का ऐक्सेस चाहिए उन्हें अनुमति देने के लिए, AuthorizationClient का इस्तेमाल करें.

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

जब भी उपयोगकर्ता ऐसी कार्रवाई करता है जिसके लिए अतिरिक्त दायरे की ज़रूरत है, तो 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);
  }
}