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