Uwierzytelnianie potwierdza tożsamość użytkownika i jest często określane jako rejestracja lub logowanie. Autoryzacja to proces przyznawania lub odrzucania 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 osobnymi i odrębnymi procesami, które zależą od potrzeb aplikacji.
Jeśli Twoja aplikacja ma funkcje, które mogą korzystać z danych interfejsu Google API, ale nie są wymagane jako podstawowe funkcje aplikacji, zaprojektuj ją tak, aby w przypadku niedostępności danych interfejsu API działała prawidłowo. Możesz na przykład ukryć listę ostatnio zapisanych plików, jeśli użytkownik nie przyznał dostępu do Dysku.
Prośby o dostęp do zakresów, które są potrzebne do uzyskania dostępu do interfejsów API Google, należy wysyłać tylko wtedy, gdy użytkownik wykona działanie wymagające dostępu do konkretnego interfejsu API. Na przykład należy poprosić o uprawnienia dostępu do Dysku użytkownika za każdym razem, gdy kliknie on przycisk „Zapisz na Dysku”.
Oddzielenie autoryzacji od uwierzytelniania pozwala uniknąć przytłoczenia nowych użytkowników lub wprowadzenia ich w błąd co do tego, dlaczego są proszeni o określone uprawnienia.
Do uwierzytelniania zalecamy używanie interfejsu Credential Manager API. Do autoryzowania działań, które wymagają dostępu do danych użytkownika przechowywanych przez Google, zalecamy używanie AuthorizationClient.
Konfigurowanie projektu
- Otwórz projekt w lub utwórz projekt, jeśli jeszcze go nie masz.
- Na stronie upewnij się, że wszystkie informacje są kompletne i prawidłowe.
- Upewnij się, że aplikacja ma przypisaną prawidłową nazwę, logo i stronę główną. Te wartości będą wyświetlane użytkownikom na ekranie zgody funkcji Zaloguj się przez Google podczas rejestracji oraz na ekranie aplikacji i usług innych firm.
- Upewnij się, że masz podane adresy URL polityki prywatności i warunków korzystania z usługi w swojej aplikacji.
- W utwórz identyfikator klienta Androida dla swojej aplikacji, jeśli jeszcze go nie masz. Musisz podać nazwę pakietu aplikacji i podpis SHA-1.
- W sekcji utwórz nowy identyfikator klienta „Aplikacja internetowa”, jeśli jeszcze go nie masz. Pola „Autoryzowane źródła JavaScript” i „Autoryzowane identyfikatory URI przekierowania” możesz na razie zignorować. Ten identyfikator klienta będzie używany do identyfikowania serwera backendu podczas komunikacji z usługami uwierzytelniania Google.
Deklarowanie zależności
W pliku build.gradle modułu zadeklaruj zależności, używając najnowszej wersji biblioteki usług tożsamości Google.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Prośby o uprawnienia wymagane przez działania użytkownika
Za każdym razem, 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 pamięci aplikacji 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 onActivityResult
wywołaniu zwrotnym aktywności możesz sprawdzić, czy wymagane uprawnienia zostały uzyskane, 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);
}
}
Jeśli uzyskujesz dostęp do interfejsów API Google po stronie serwera, możesz wywołać metodę getServerAuthCode() w obiekcie AuthorizationResult, aby uzyskać kod autoryzacji, który możesz wysłać do backendu w celu wymiany na token dostępu i token odświeżania.