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

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

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

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