अतिरिक्त दायरों का अनुरोध करना

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

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

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

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

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

जब भी कोई उपयोगकर्ता ऐसी कार्रवाई करता है जिसके लिए ज़रूरी स्कोप का अनुरोध साइन इन के समय नहीं किया गया है, तो GoogleSignIn.hasPermissions को कॉल करके देखें कि उपयोगकर्ता ने पहले ही ज़रूरी अनुमतियां दी हैं या नहीं. अगर ऐसा नहीं है, तो GoogleSignIn.requestPermissions को कॉल करके ऐसी गतिविधि शुरू करें जो उपयोगकर्ता से ज़रूरी अतिरिक्त स्कोप का अनुरोध करती हो.

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

if (!GoogleSignIn.hasPermissions(
        GoogleSignIn.getLastSignedInAccount(getActivity()),
        Drive.SCOPE_APPFOLDER)) {
    GoogleSignIn.requestPermissions(
            MyExampleActivity.this,
            RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
            GoogleSignIn.getLastSignedInAccount(getActivity()),
            Drive.SCOPE_APPFOLDER);
} else {
    saveToDriveAppFolder();
}

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

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
            saveToDriveAppFolder();
        }
    }
}

अनुमतियों के सेट की जांच करने और उन्हें आसानी से पाने के लिए, GoogleSignInOptionsExtension को hasPermissions और requestPermissions को भी पास किया जा सकता है.