האימות קובע מי מי, והוא נקרא בדרך כלל רישום או כניסה של משתמש. הרשאה היא תהליך הענקת גישה לנתונים או למשאבים או דחייה של גישה אליהם. לדוגמה, האפליקציה מבקשת מהמשתמשים הסכמה לגשת ל-Google Drive שלהם.
קריאות האימות וההרשאה צריכות להיות שני תהליכים נפרדים ומנויים, בהתאם לצרכים של האפליקציה.
אם באפליקציה שלכם יש תכונות שיכולות להשתמש בנתוני Google API, אבל הן לא נדרשות כחלק מהתכונות המרכזיות של האפליקציה, כדאי לתכנן את האפליקציה כך שתוכל לטפל בצורה חלקה במקרים שבהם אין גישה לנתוני ה-API. לדוגמה, תוכלו להסתיר רשימה של קבצים שנשמרו לאחרונה אם המשתמש לא העניק גישה ל-Drive.
צריך לבקש גישה להיקפים הנדרשים כדי לגשת לממשקי Google API רק כשהמשתמש מבצע פעולה שדורשת גישה ל-API מסוים. לדוגמה, צריך לבקש הרשאה לגשת ל-Drive של המשתמש בכל פעם שהוא מקייש על הלחצן 'שמירה ב-Drive'.
הפרדה בין הרשאה לאימות מונעת עומס על משתמשים חדשים, או בלבול של משתמשים לגבי הסיבה שבגללה הם מתבקשים להעניק הרשאות מסוימות.
לאימות, מומלץ להשתמש ב-Credential Manager API. כדי לאשר פעולות שדורשות גישה לנתוני משתמשים ששמורים ב-Google, מומלץ להשתמש ב-AuthorizationClient.
הגדרת הפרויקט
- פותחים את הפרויקט ב-, או יוצרים פרויקט אם עדיין אין לכם פרויקט.
- בדף , מוודאים שכל המידע מלא ומדויק.
- מוודאים שהאפליקציה כוללת את השם, הלוגו ודף הבית הנכונים. הערכים האלה יוצגו למשתמשים במסך ההסכמה של 'כניסה באמצעות חשבון Google' במהלך ההרשמה, ובמסך 'אפליקציות ושירותים של צד שלישי'.
- חשוב לוודא שציינתם את כתובות ה-URL של מדיניות הפרטיות ושל התנאים וההגבלות של האפליקציה.
- בקטע , יוצרים מזהה לקוח של Android לאפליקציה, אם עדיין אין לה מזהה כזה. תצטרכו לציין את שם החבילה ואת החתימה של SHA-1 של האפליקציה.
- ב-, יוצרים מזהה לקוח חדש מסוג 'אפליקציית אינטרנט', אם עדיין לא עשיתם זאת. בשלב הזה אפשר להתעלם מהשדות 'מקורות JavaScript מורשים' ו'מזהי URI להפניה אוטומטית מורשית'. מזהה הלקוח הזה ישמש לזיהוי שרת הקצה העורפי כשהוא יתקשר עם שירותי האימות של Google.
הצהרת יחסי תלות
בקובץ 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));
ב-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);
}
}
אם אתם ניגשים ל-Google APIs בצד השרת, תוכלו להפעיל את השיטה getServerAuthCode() של AuthorizationResult כדי לקבל קוד אימות, ששולחים לקצה העורפי כדי להמיר אותו לאסימון גישה ולאסימון רענון.