Uwierzytelnianie służy do ustalania tożsamości użytkownika i jest powszechnie nazywane rejestracją lub logowaniem. Autoryzacja to proces przyznawania lub odmowy przyznania dostępu do danych lub zasobów. Na przykład aplikacja prosi użytkownika o zgodę na dostęp do jego Dysku Google.
Wywołania uwierzytelniania i autoryzacji powinny być 2 osobne i rozróżnione przepływy danych, które zależą od potrzeb aplikacji.
Jeśli Twoja aplikacja zawiera funkcje, które mogą korzystać z danych interfejsu Google API, ale nie są wymagane w ramach jej głównych funkcji, powinna być zaprojektowana tak, aby mogła sprawnie obsługiwać przypadki, gdy dane interfejsu API są niedostępne. Możesz na przykład ukryć listę ostatnio zapisanych plików, jeśli użytkownik nie ma dostępu do Dysku.
Dostęp do zakresów, których potrzebujesz, aby uzyskać dostęp do interfejsów API Google, powinieneś prosić tylko wtedy, gdy użytkownik wykona działanie, które wymaga dostępu do konkretnego interfejsu API. Na przykład, gdy użytkownik kliknie przycisk „Zapisz na Dysku”, powinieneś poprosić o dostęp do jego Dysku.
Oddzielając autoryzację od uwierzytelniania, możesz uniknąć przytłomienia nowych użytkowników lub wprowadzenia ich w błąd co do tego, dlaczego proszą o określone uprawnienia.
Do uwierzytelniania zalecamy użycie interfejsu Credential Manager API. Aby autoryzować działania, które wymagają dostępu do danych użytkownika przechowywanych przez Google, zalecamy użycie AuthorizationClient.
Prośby o uprawnienia wymagane przez działania użytkownika
Gdy użytkownik wykona działanie wymagające dodatkowego zakresu, wywołaj funkcję AuthorizationClient.authorize()
.
Jeśli na przykład użytkownik wykona działanie, które wymaga dostępu do miejsca na Dysku, wykonaj te czynności:
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));
W zgłoszeniu onActivityResult
możesz sprawdzić, czy udało się uzyskać wymagane uprawnienia, a jeśli tak, wykonać działanie użytkownika.
@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);
}
}