احراز هویت مشخص میکند که شخص چه کسی است، و معمولاً به عنوان ثبت نام یا ورود به سیستم کاربر شناخته میشود. مجوز فرآیند اعطای یا رد دسترسی به داده ها یا منابع است. به عنوان مثال، برنامه شما رضایت کاربر شما را برای دسترسی به Google Drive کاربر درخواست می کند.
تماسهای احراز هویت و مجوز باید دو جریان مجزا و مجزا بر اساس نیازهای سایت یا برنامه باشد.
اگر برنامه شما دارای ویژگیهایی است که میتواند از دادههای API Google استفاده کند، اما به عنوان بخشی از ویژگیهای اصلی برنامه شما مورد نیاز نیستند، باید برنامه خود را طوری طراحی کنید که بتوانید مواردی را که دادههای API در دسترس نیست بهخوبی مدیریت کنید. برای مثال، زمانی که کاربر به Drive اجازه دسترسی نداده است، ممکن است فهرستی از فایلهای اخیراً ذخیره شده را پنهان کنید.
فقط زمانی که کاربر اقدامی را انجام میدهد که نیاز به دسترسی به یک API خاص دارد، باید به دامنههایی که برای دسترسی به Google API نیاز دارید، درخواست کنید. برای مثال، هر زمان که کاربر روی دکمه «ذخیره در Drive» ضربه میزند، باید اجازه دسترسی به Drive کاربر را درخواست کنید.
با جدا کردن مجوز از احراز هویت، میتوانید از سرکوب کاربران جدید یا سردرگمی کاربران در مورد اینکه چرا از آنها مجوزهای خاص خواسته میشود جلوگیری کنید.
در خدمات هویت گوگل، احراز هویت با استفاده از SignInClient انجام می شود. برای مجوز دادن به اقداماتی که نیاز به دسترسی به داده های کاربر ذخیره شده توسط Google دارند، توصیه می کنیم از AuthorizationClient استفاده کنید.
درخواست مجوزهای مورد نیاز توسط اقدامات کاربر
هر زمان که کاربر عملی را انجام داد که به محدوده بیشتری نیاز دارد، AuthorizationClient.authorize()
را فراخوانی کنید.
به عنوان مثال، اگر کاربر عملی را انجام میدهد که نیاز به دسترسی به فضای ذخیرهسازی برنامه Drive خود دارد، موارد زیر را انجام دهید:
List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
.authorize(authorizationRequest)
.addOnSuccessListener(
authorizationResult -> {
if (authorizationResult.hasResolution()) {
// Access needs to be granted by the user
PendingIntent pendingIntent = authorizationResult.getPendingIntent();
try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
}
} else {
// Access already granted, continue with user action
saveToDriveAppFolder(authorizationResult);
}
})
.addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
در پاسخ به تماس onActivityResult
فعالیت خود، می توانید بررسی کنید که آیا مجوزهای لازم با موفقیت به دست آمده اند یا خیر، و در این صورت، اقدام کاربر را انجام دهید.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
saveToDriveAppFolder(authorizationResult);
}
}