Demander des niveaux d'accès supplémentaires

Pour une expérience utilisateur optimale, vous devez demander le moins de niveaux d'accès possible lors de la première connexion des utilisateurs. Si la fonctionnalité principale de votre application n'est pas liée à un service Google, la configuration GoogleSignInOptions.DEFAULT_SIGN_IN est souvent tout ce dont vous avez besoin lors de la connexion.

Si votre application comporte des fonctionnalités qui peuvent utiliser les données des API Google, mais qui ne sont pas requises pour les fonctionnalités de base de votre application, vous devez la concevoir de manière à ce qu'elle puisse gérer correctement les cas où les données des API ne sont pas accessibles. Par exemple, vous pouvez masquer une liste de fichiers récemment enregistrés lorsque l'utilisateur n'a pas accordé l'accès à Drive.

Vous ne devez demander les champs d'application supplémentaires dont vous avez besoin pour accéder aux API Google que lorsque l'utilisateur effectue une action nécessitant l'accès à une API spécifique. Par exemple, vous pouvez demander l'autorisation d'accéder au Drive de l'utilisateur uniquement lorsque celui-ci appuie sur un bouton "Enregistrer dans Drive" pour la première fois.

Cette technique vous permet d'éviter de submerger les nouveaux utilisateurs ou de les dérouter en leur demandant certaines autorisations.

Demander les autorisations requises par les actions de l'utilisateur

Chaque fois qu'un utilisateur effectue une action nécessitant un champ d'application qui n'est pas demandé lors de la connexion, appelez GoogleSignIn.hasPermissions pour vérifier si l'utilisateur a déjà accordé les autorisations requises. Sinon, appelez GoogleSignIn.requestPermissions pour lancer une activité qui demande à l'utilisateur les niveaux d'accès supplémentaires requis.

Par exemple, si un utilisateur effectue une action qui nécessite d'accéder au stockage de son application Drive, procédez comme suit :

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();
}

Dans le rappel onActivityResult de votre activité, vous pouvez vérifier si les autorisations requises ont été obtenues et, le cas échéant, effectuer l'action de l'utilisateur.

@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();
        }
    }
}

Vous pouvez également transmettre un GoogleSignInOptionsExtension à hasPermissions et requestPermissions pour vérifier et acquérir un ensemble d'autorisations plus facilement.