הרשאת גישה לנתוני משתמש ב-Android

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

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

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

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

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