احراز هویت مشخص میکند که شخص چه کسی است، و معمولاً به عنوان ثبت نام یا ورود به سیستم کاربر شناخته میشود. مجوز فرآیند اعطای یا رد دسترسی به داده ها یا منابع است. به عنوان مثال، برنامه شما رضایت کاربر شما را برای دسترسی به Google Drive کاربر درخواست می کند.
تماسهای احراز هویت و مجوز باید دو جریان مجزا و مجزا بر اساس نیازهای برنامه باشند.
اگر برنامه شما دارای ویژگیهایی است که میتواند از دادههای API Google استفاده کند، اما به عنوان بخشی از ویژگیهای اصلی برنامه شما مورد نیاز نیستند، باید برنامه خود را طوری طراحی کنید که بتوانید مواردی را که دادههای API در دسترس نیست بهخوبی مدیریت کنید. برای مثال، زمانی که کاربر به Drive اجازه دسترسی نداده است، ممکن است فهرستی از فایلهای اخیراً ذخیره شده را پنهان کنید.
فقط زمانی که کاربر اقدامی را انجام میدهد که نیاز به دسترسی به یک API خاص دارد، باید به دامنههایی که برای دسترسی به Google API نیاز دارید، درخواست کنید. برای مثال، هر زمان که کاربر روی دکمه «ذخیره در Drive» ضربه میزند، باید اجازه دسترسی به Drive کاربر را درخواست کنید.
با جدا کردن مجوز از احراز هویت، میتوانید از سرکوب کاربران جدید یا سردرگمی کاربران در مورد اینکه چرا از آنها مجوزهای خاص خواسته میشود جلوگیری کنید.
برای احراز هویت، توصیه میکنیم از Credential Manager API استفاده کنید. برای مجوز دادن به اقداماتی که نیاز به دسترسی به داده های کاربر ذخیره شده توسط Google دارند، توصیه می کنیم از AuthorizationClient استفاده کنید.
خود را تنظیم کنید پروژه
- پروژه خود را در ، یا اگر قبلا پروژه ای ندارید ایجاد کنید.
- در ، مطمئن شوید که همه اطلاعات کامل و دقیق هستند.
- مطمئن شوید که نام برنامه، نشانواره برنامه و صفحه اصلی برنامه به برنامه شما اختصاص داده شده است. این مقادیر در صفحه رضایت ورود به سیستم با Google هنگام ثبت نام و صفحه برنامهها و خدمات شخص ثالث به کاربران ارائه میشوند.
- مطمئن شوید که نشانیهای اینترنتی خطمشی رازداری و شرایط خدمات برنامهتان را مشخص کردهاید.
- در ، یک شناسه کلاینت Android برای برنامه خود ایجاد کنید، اگر قبلاً آن را ندارید. شما باید نام بسته برنامه و امضای SHA-1 را مشخص کنید.
- در ، شناسه مشتری «برنامه وب» جدید ایجاد کنید، اگر قبلاً این کار را نکرده اید. فعلاً میتوانید از فیلدهای «اصالتهای مجاز جاوا اسکریپت» و «URIs تغییر مسیر مجاز» چشمپوشی کنید. این شناسه مشتری برای شناسایی سرور پشتیبان شما هنگام برقراری ارتباط با سرویسهای احراز هویت Google استفاده میشود.
وابستگی ها را اعلام کنید
در فایل build.gradle ماژول خود، وابستگی ها را با استفاده از آخرین نسخه کتابخانه Google Identity Services اعلام کنید.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
درخواست مجوزهای مورد نیاز اقدامات کاربر
هر زمان که کاربر عملی را انجام داد که به محدوده بیشتری نیاز دارد، 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);
}
}
اگر به APIهای Google در سمت سرور دسترسی دارید، میتوانید با متد ()getServerAuthCode از AuthorizationResult تماس بگیرید تا کد احراز هویتی را دریافت کنید که به باطن خود ارسال میکنید تا با یک نشانه دسترسی و بازخوانی مبادله شود.