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