Przyznawanie dostępu do danych użytkownika na Androidzie

Uwierzytelnianie określa, kim jest dana osoba, i jest powszechnie nazywane użytkownikiem rejestracji czy logowania. Autoryzacja to proces przyznawania lub odrzucania dostępu danych lub zasobów. Aplikacja prosi na przykład o zgodę użytkownika na: uzyskać dostęp do Dysku Google użytkownika.

Wywołania uwierzytelniania i autoryzacji powinny być 2 osobnymi i różnymi wywołaniami w zależności od potrzeb witryny lub aplikacji.

Jeśli aplikacja ma funkcje, które mogą korzystać z danych interfejsu API Google, ale nie są są wymagane w ramach jej podstawowych funkcji, należy ją zaprojektować tak, sprawnego radzenia sobie z przypadkami, gdy dane interfejsu API nie są dostępne. Przykład: Możesz ukryć listę ostatnio zapisanych plików, jeśli użytkownik nie przyznał Dysku dostęp.

Należy poprosić o dostęp do zakresów, których potrzebujesz tylko do interfejsów API Google gdy użytkownik wykonuje działanie, które wymaga dostępu do określonego interfejsu API. Dla: należy na przykład prosić o dostęp do Dysku użytkownika za każdym razem, użytkownik klika „Zapisz na Dysku”. Przycisk

Oddzielenie autoryzacji od uwierzytelniania pozwala uniknąć przytłoczenia nowych użytkowników lub dezorientować użytkowników, dlaczego prosimy o określone uprawnień.

W usługach tożsamości Google uwierzytelnianie odbywa się za pomocą SignInClient. W celu autoryzowania działań, które wymagają dostępu do danych użytkownika przechowywanych przez Google, zalecamy użycie obiektu AuthorizationClient.

Prośba o uprawnienia wymagane przez działania użytkownika

Gdy użytkownik wykona działanie, które wymaga dodatkowego zakresu, wywołaj AuthorizationClient.authorize()

Na przykład jeśli użytkownik wykona działanie, które wymaga dostępu do jego Dysku pamięci aplikacji, 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 wywołaniu zwrotnym Twojej aktywności (onActivityResult) możesz sprawdzić, czy wymagane – jeśli tak, wykonaj 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);
  }
}