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

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