طلب نطاقات إضافية

للحصول على أفضل تجربة للمستخدم، يجب عليك طلب أقل عدد ممكن من النطاقات عند تسجيل دخول المستخدمين في البداية. إذا لم تكن وظيفة التطبيق الأساسية مرتبطة بخدمة Google، غالبًا ما يكون ضبط GoogleSignInOptions.DEFAULT_SIGN_IN هو كل ما تحتاجه عند تسجيل الدخول.

إذا كان تطبيقك يحتوي على ميزات يمكنها الاستفادة من بيانات Google API، ولكنك لست بحاجة إلى استخدامها كجزء من وظيفة تطبيقك الأساسية، عليك تصميم تطبيقك ليكون متوافقًا مع الحالات التي يتعذّر الوصول فيها إلى بيانات واجهة برمجة التطبيقات. على سبيل المثال، يمكنك إخفاء قائمة بالملفات المحفوظة مؤخرًا عندما لا يمنح المستخدم حق الوصول إلى Drive.

يجب طلب نطاقات إضافية تحتاج إلى الوصول إليها في Google APIs فقط عندما ينفذ المستخدم إجراءً يتطلب الدخول إلى واجهة برمجة تطبيقات معينة. على سبيل المثال، يمكنك طلب إذن للوصول إلى حساب المستخدم على Drive فقط عندما ينقر المستخدم على زر "الحفظ في Drive&quot، للمرة الأولى.

وباستخدام هذا الأسلوب، يمكنك تجنّب إزعاج المستخدمين الجدد أو بإرباكهم بشأن سبب طلب أذونات معيّنة.

طلب الأذونات المطلوبة بواسطة إجراءات المستخدم

عندما ينفِّذ مستخدم إجراءً يتطلب نطاقًا لم يتم طلبه عند تسجيل الدخول، يمكنك الاتصال بالرقم 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 للتحقّق من مجموعة من الأذونات والحصول عليها بسهولة أكبر.