تحدد المصادقة هوية الشخص ويُشار إليها عادةً باسم اشتراك المستخدم أو تسجيل الدخول. الترخيص هو عملية منح أو رفض الوصول إلى البيانات أو الموارد. على سبيل المثال، يطلب تطبيقك الحصول على موافقة للوصول إلى Google Drive للمستخدم.
يجب أن تكون طلبات المصادقة والترخيص عبارة عن مسارين منفصلين ومميّزين استنادًا إلى احتياجات الموقع الإلكتروني أو التطبيق.
إذا كان تطبيقك يحتوي على ميزات يمكنها الاستفادة من بيانات Google API، ولكنها ليست مطلوبة كجزء من الميزات الأساسية لتطبيقك، يجب تصميم التطبيق بحيث يتمكن من التعامل بشكل جيّد مع الحالات التي يتعذّر فيها الوصول إلى بيانات واجهة برمجة التطبيقات. على سبيل المثال، يمكنك إخفاء قائمة بالملفات المحفوظة مؤخرًا إذا لم يمنح المستخدم الوصول إلى Drive.
يجب طلب الوصول إلى النطاقات التي تحتاج إليها للوصول إلى Google APIs فقط عندما ينفِّذ المستخدم إجراءً يتطلب الوصول إلى واجهة برمجة تطبيقات معيّنة. على سبيل المثال، يجب عليك طلب إذن للوصول إلى حساب Drive الخاص بالمستخدم كلما نقر المستخدم على زر "حفظ في Drive".
من خلال فصل التفويض عن المصادقة، يمكنك تجنب إرباك المستخدمين الجدد، أو إرباك المستخدمين في معرفة سبب مطالبتهم بالحصول على أذونات معينة.
في خدمات هوية Google، تتم المصادقة باستخدام 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(builder.build())
.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);
}
}