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

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

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

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