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

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

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

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