Demander des champs d'application supplémentaires

Pour une expérience utilisateur optimale, demandez le moins de champs d'application possible lorsque vous connectez les utilisateurs pour la première fois. Si la fonctionnalité de base de votre application n'est pas liée à un service Google, la configuration GoogleSignInOptions.DEFAULT_SIGN_IN suffit souvent à vous connecter.

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

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

En utilisant cette technique, vous pouvez éviter de submerger de nouveaux utilisateurs ou de les perturber sur la raison pour laquelle certaines autorisations leur sont demandées.

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. Si ce n'est pas le cas, appelez GoogleSignIn.requestPermissions pour lancer une activité qui demande à l'utilisateur les champs d'application supplémentaires requis.

Par exemple, si un utilisateur effectue une action nécessitant l'accès à l'espace de 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 bien été acquises et, le cas échéant, effectuer l'action 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 rechercher et acquérir plus facilement un ensemble d'autorisations.