Demander des champs d'application supplémentaires

Pour une expérience utilisateur optimale, vous devez demander 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 associé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 de l'API Google, mais qui ne sont pas requises dans les fonctionnalités de base de votre application, vous devez la concevoir pour qu'elle puisse gérer correctement les cas où les données de l'API ne sont pas accessibles. Par exemple, vous pouvez masquer une liste de fichiers enregistrés récemment 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 particulière. Par exemple, vous pouvez demander l'autorisation d'accéder à 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 d'accabler les nouveaux utilisateurs ou de les confondre quant à 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. 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 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 vérifier et acquérir plus facilement un ensemble d'autorisations.