Aby zapewnić użytkownikom jak najlepsze wrażenia, podczas wstępnego logowania 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, do konfiguracji często wystarczy konfiguracja GoogleSignInOptions.DEFAULT_SIGN_IN
.
Jeśli aplikacja oferuje funkcje, które mogą korzystać z danych interfejsu Google API, ale nie są wymagane w jej głównej funkcji, zaprojektuj ją tak, aby działała w sposób płynny, gdy dane z interfejsu API są niedostępne. Możesz na przykład ukryć listę ostatnio zapisanych plików, gdy użytkownik nie przyzna dostępu do Dysku.
Dodatkowe zakresy potrzebne do uzyskania dostępu do interfejsów API Google należy prosić tylko wtedy, gdy użytkownik wykonuje 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 użytkownik po raz pierwszy kliknie przycisk „Zapisz na Dysku”.
Dzięki tej metodzie możesz uniknąć przytłoczenia nowych użytkowników i zdezorientowania ich prośbami o przyznanie określonych uprawnień.
Prośba o uprawnienia wymagane przez działania użytkownika
Gdy użytkownik wykona działanie, które wymaga zakresu, który nie jest wymagany przy logowaniu, wywołaj funkcję GoogleSignIn.hasPermissions
, aby sprawdzić, czy użytkownik przyznał już wymagane uprawnienia. Jeśli nie, wywołaj GoogleSignIn.requestPermissions
, aby uruchomić aktywność, która wymaga od użytkownika dodatkowych wymaganych zakresów.
Jeśli na przykład użytkownik wykona czynność, która wymaga dostępu do miejsca na Dysku aplikacji, 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
w aktywności 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
w postaci hasPermissions
i requestPermissions
, aby w wygodny sposób wygodniej korzystać z zestawu uprawnień.