הרשאת גישה לנתוני משתמשים

האימות מזהה את הזהות של המשתמשים, ונקרא בדרך כלל 'הרשמה' או 'כניסה של משתמש'. הרשאה היא תהליך של אישור או דחייה של גישה לנתונים ולמשאבים. לדוגמה, האפליקציה מבקשת את הסכמת המשתמש כדי לגשת ל-Google Drive שלו.

קריאות לאימות ולהרשאה צריכות להיות שני תהליכי עבודה נפרדים ונפרדים, בהתאם לצורכי האתר או האפליקציה.

אם באפליקציה יש תכונות שיכולות להשתמש בנתוני Google API, אבל הן לא נדרשות כחלק מתכונות הליבה של האפליקציה, צריך לתכנן את האפליקציה כך שיוכל לטפל בחינניות במקרים שבהם אין גישה לנתוני ה-API. לדוגמה, אפשר להסתיר רשימה של קבצים שנשמרו לאחרונה אם המשתמש לא העניק גישה ל-Drive.

צריך לבקש גישה להיקפים שנדרשים להם גישה ל-Google APIs רק כשהמשתמש מבצע פעולה שדורשת גישה ל-API מסוים. לדוגמה, עליכם לבקש הרשאת גישה ל-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(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));

בקריאה החוזרת (callback) של 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);
  }
}