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

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

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

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

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

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

पुष्टि करने के लिए, हमारा सुझाव है कि आप Credential Manager API का इस्तेमाल करें. 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);
  }
}