מתן הרשאה לגישה לנתוני משתמשים ב-Google

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

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

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

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

הפרדה בין הרשאה לאימות יכולה למנוע עומס על משתמשים חדשים או בלבול לגבי הסיבה לבקשת הרשאות מסוימות.

לצורך אימות, מומלץ להשתמש ב-Credential Manager API. כדי לאשר פעולות שדורשות גישה לנתוני משתמשים שנשמרו על ידי Google, מומלץ להשתמש ב-AuthorizationClient.

הגדרת הפרויקט

  1. פותחים את הפרויקט ב-, או יוצרים פרויקט אם עדיין אין לכם אחד.
  2. בדף , מוודאים שכל המידע מלא ומדויק.
    1. מוודאים שהוקצו לאפליקציה שם אפליקציה, לוגו אפליקציה ודף הבית של האפליקציה נכונים. הערכים האלה יוצגו למשתמשים במסך ההסכמה של 'כניסה באמצעות חשבון Google' במהלך ההרשמה ובמסך האפליקציות והשירותים של צד שלישי.
    2. חשוב לוודא שציינתם את כתובות ה-URL של מדיניות הפרטיות ושל התנאים וההגבלות של האפליקציה.
  3. ב-, יוצרים מזהה לקוח של Android לאפליקציה, אם עדיין אין כזה. תצטרכו לציין את שם החבילה של האפליקציה ואת חתימת SHA-1.
    1. עוברים אל .
    2. לוחצים על Create client.
    3. בוחרים בסוג האפליקציה Android.
  4. בקטע , יוצרים Client-ID חדש מסוג 'אפליקציית אינטרנט' אם עוד לא עשיתם זאת. בינתיים אפשר להתעלם מהשדות Authorized JavaScript Origins (מקורות JavaScript מורשים) ו-Authorized redirect URIs (כתובות URI מורשות להפניה אוטומטית). מזהה הלקוח הזה ישמש לזיהוי שרת הקצה העורפי שלכם כשהוא מתקשר עם שירותי האימות של Google.
    1. עוברים אל .
    2. לוחצים על Create client.
    3. בוחרים בסוג Web application.

הצהרה על יחסי תלות

בקובץ build.gradle של המודול, מצהירים על תלות באמצעות הגרסה האחרונה של ספריית Google Identity Services.

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

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

@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 כדי לקבל קוד אימות שאתם שולחים לקצה העורפי כדי להמיר אותו לאסימון גישה ולאסימון רענון.