السماح بالوصول إلى بيانات المستخدم على Android

تحدّد المصادقة هوية المستخدم، ويُشار إليها عادةً باسم اشتراك المستخدم أو تسجيل الدخول. الترخيص هو عملية منح أو رفض الوصول إلى البيانات أو الموارد. على سبيل المثال، يطلب التطبيق موافقة المستخدم للوصول إلى حساب Google Drive الخاص به.

يجب أن تكون طلبات المصادقة والتفويض مسارَين منفصلَين ومميّزَين استنادًا إلى احتياجات الموقع الإلكتروني أو التطبيق.

إذا كان تطبيقك يحتوي على ميزات يمكنها الاستفادة من بيانات Google API، ولكنّها ليست مطلوبة كجزء من الميزات الأساسية لتطبيقك، عليك تصميم التطبيق ليتمكّن من التعامل بسلاسة مع الحالات التي يتعذّر فيها الوصول إلى بيانات واجهة برمجة التطبيقات. على سبيل المثال، يمكنك إخفاء قائمة بالملفات المحفوظة مؤخرًا عندما لا يمنح المستخدم الإذن بالوصول إلى Drive.

يجب طلب الوصول إلى النطاقات التي تحتاج إليها للوصول إلى Google APIs فقط عندما ينفِّذ المستخدم إجراءً يتطلب الوصول إلى واجهة برمجة تطبيقات معيّنة. على سبيل المثال، يجب طلب إذن للوصول إلى حساب Drive الخاص بالمستخدم كلما نقر المستخدم على زر "حفظ في Drive".

من خلال فصل التفويض عن المصادقة، يمكنك تجنب إرباك المستخدمين الجدد، أو إرباك المستخدمين بشأن سبب مطالبتهم بأذونات معينة.

في Google Identity Services، تتم المصادقة باستخدام 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);
  }
}