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

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

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