Aby zadbać o wygodę użytkowników, podczas początkowego logowania się użytkowników należy prosić o jak najmniejszą liczbę zakresów. Jeśli główna funkcja aplikacji nie jest powiązana z usługą Google, często do logowania wystarczy konfiguracja GoogleSignInOptions.DEFAULT_SIGN_IN
.
Jeśli aplikacja ma funkcje, które mogą korzystać z danych interfejsu API Google, ale nie są wymagane w ramach jej głównej funkcji, zaprojektuj ją tak, aby działała płynnie w sytuacjach, gdy dane interfejsu API nie są dostępne. Jeśli użytkownik nie przyzna dostępu do Dysku, możesz na przykład ukryć listę ostatnio zapisanych plików.
Dodatkowe zakresy potrzebne do uzyskania dostępu do interfejsów API Google należy zgłosić tylko wtedy, gdy użytkownik wykona działanie wymagające dostępu do określonego interfejsu API. Możesz na przykład poprosić o dostęp do Dysku użytkownika tylko wtedy, gdy po raz pierwszy kliknie przycisk „Zapisz na Dysku”.
Dzięki tej metodzie unikniesz przytłoczenia nowych użytkowników i dezorientowania ich, dlaczego są proszeni o określone uprawnienia.
Wysyłanie prośby o uprawnienia wymagane przez działania użytkownika
Za każdym razem, gdy użytkownik wykonuje działanie wymagające zakresu, które nie jest żądane podczas logowania, wywołaj GoogleSignIn.hasPermissions
, aby sprawdzić, czy użytkownik przyznał już wymagane uprawnienia. Jeśli nie, wywołaj GoogleSignIn.requestPermissions
, aby uruchomić aktywność, która zażąda od użytkownika dodatkowych wymaganych zakresów.
Jeśli na przykład użytkownik wykona działanie, które wymaga dostępu do miejsca w aplikacji Dysk, wykonaj te czynności:
if (!GoogleSignIn.hasPermissions(
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER)) {
GoogleSignIn.requestPermissions(
MyExampleActivity.this,
RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION,
GoogleSignIn.getLastSignedInAccount(getActivity()),
Drive.SCOPE_APPFOLDER);
} else {
saveToDriveAppFolder();
}
W wywołaniu zwrotnym onActivityResult
możesz sprawdzić, czy wymagane uprawnienia zostały uzyskane, a jeśli tak, wykonaj działanie użytkownika.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (RC_REQUEST_PERMISSION_SUCCESS_CONTINUE_FILE_CREATION == requestCode) {
saveToDriveAppFolder();
}
}
}
Możesz też przekazać GoogleSignInOptionsExtension
do hasPermissions
i requestPermissions
, aby ułatwić sobie sprawdzanie i uzyskiwanie zestawu uprawnień.