برای بهترین تجربه کاربری، باید هنگام ورود اولیه کاربران، تا حد امکان تعداد کمتری scope درخواست کنید. اگر عملکرد اصلی برنامه شما به هیچ سرویس گوگلی وابسته نیست، پیکربندی GoogleSignInOptions.DEFAULT_SIGN_IN اغلب تنها چیزی است که هنگام ورود به سیستم نیاز دارید.
اگر برنامه شما دارای ویژگیهایی است که میتوانند از دادههای API گوگل استفاده کنند، اما به عنوان بخشی از عملکرد اصلی برنامه شما مورد نیاز نیستند، باید برنامه خود را طوری طراحی کنید که بتواند مواردی را که دادههای API در دسترس نیستند، به راحتی مدیریت کند. به عنوان مثال، ممکن است لیستی از فایلهای ذخیره شده اخیر را زمانی که کاربر به Drive دسترسی نداده است، پنهان کنید.
شما باید فقط زمانی که کاربر عملی را انجام میدهد که نیاز به دسترسی به یک API خاص دارد، محدودههای اضافی مورد نیاز برای دسترسی به APIهای گوگل را درخواست کنید. به عنوان مثال، ممکن است فقط زمانی که کاربر برای اولین بار دکمه "ذخیره در درایو" را لمس میکند، درخواست دسترسی به درایو کاربر را داشته باشید.
با استفاده از این تکنیک، میتوانید از شلوغ کردن بیش از حد کاربران جدید یا گیج کردن آنها در مورد دلیل درخواست مجوزهای خاص جلوگیری کنید.
درخواست مجوزهای مورد نیاز توسط اقدامات کاربر
هر زمان که کاربری عملی را انجام میدهد که نیاز به محدودهای دارد که در هنگام ورود به سیستم درخواست نشده است، 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 مربوط به activity خود، میتوانید بررسی کنید که آیا مجوزهای مورد نیاز با موفقیت کسب شدهاند یا خیر، و در این صورت، اقدام مورد نظر کاربر را انجام دهید.
@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 ارسال کنید تا بررسی و دریافت مجموعهای از مجوزها راحتتر شود.