تفويض الوصول إلى بيانات مستخدمي Google

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

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

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

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

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

للمصادقة، ننصحك باستخدام Credential Manager API. للسماح باتّخاذ إجراءات تتطلّب الوصول إلى بيانات المستخدم المخزّنة لدى Google، ننصحك باستخدام AuthorizationClient.

إعداد مشروعك

  1. افتح مشروعك في ، أو أنشئ مشروعًا إذا لم يكن لديك مشروع.
  2. في ، تأكَّد من أنّ جميع المعلومات كاملة ودقيقة.
    1. تأكَّد من أنّ تطبيقك يتضمّن اسم تطبيق وشعار تطبيق وصفحة رئيسية صحيحة. سيتم عرض هذه القيم للمستخدمين على شاشة الموافقة الخاصة بميزة "تسجيل الدخول باستخدام حساب Google" عند الاشتراك وعلى شاشة التطبيقات والخدمات التابعة لجهات خارجية.
    2. تأكَّد من تحديد عناوين URL لسياسة الخصوصية وبنود الخدمة الخاصة بتطبيقك.
  3. في ، أنشئ معرّف عميل Android لتطبيقك إذا لم يكن لديك معرّف. عليك تحديد اسم حزمة تطبيقك وتوقيع SHA-1.
    1. انتقِل إلى .
    2. انقر على إنشاء عميل.
    3. اختَر نوع التطبيق Android.
  4. في ، أنشِئ معرّف عميل جديدًا من نوع "تطبيق ويب" إذا لم يسبق لك إجراء ذلك. يمكنك تجاهل الحقلَين "مصادر JavaScript المسموح بها" و "معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه" في الوقت الحالي. سيتم استخدام معرّف العميل هذا لتحديد خادم الخلفية عندما يتواصل مع خدمات المصادقة من Google.
    1. انتقِل إلى .
    2. انقر على إنشاء عميل.
    3. اختَر نوع تطبيق الويب.

تعريف العناصر التابعة

في ملف build.gradle الخاص بالوحدة، حدِّد التبعيات باستخدام أحدث إصدار من مكتبة "خدمات هوية Google".

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);
  }
}

إذا كنت تريد الوصول إلى واجهات Google APIs من جهة الخادم، يمكنك استدعاء طريقة getServerAuthCode() الخاصة بـ AuthorizationResult للحصول على رمز مصادقة ترسله إلى الخلفية مقابل رمز مميّز للوصول ورمز مميّز لإعادة التحميل.