请求其他范围

为了提供最佳用户体验,在以下情况下,您应该请求尽可能少的范围: 初始登录用户如果应用的核心功能与 使用 Google 服务时,GoogleSignInOptions.DEFAULT_SIGN_IN 配置通常是 所需的全部信息。

如果您的应用中的功能可以利用 Google API 数据, 作为应用核心功能的一部分,您在设计应用时 能够妥善处理无法访问 API 数据的情况。例如: 如果用户未授予云端硬盘访问权限,您可以隐藏最近保存的文件的列表 访问权限。

您应该请求仅访问 Google API 所需的其他范围 当用户执行需要访问特定 API 的操作时触发。对于 例如,您可能仅在 用户点按“保存到云端硬盘”按钮。

通过这种方法,您可以避免新用户感到无所适从或困惑 并向用户说明为何请求他们提供某些权限

请求用户操作所需的权限

每当用户执行需要作用域的操作,而该作用域未在 登录,调用 GoogleSignIn.hasPermissions 以检查用户是否已 授予了所需权限如果不是,则调用 GoogleSignIn.requestPermissions 启动一个 activity,从 用户。

例如,如果用户执行了一项需要访问其云端硬盘的操作 应用存储空间,请执行以下操作:

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

在 activity 的 onActivityResult 回调中,您可以检查是否需要 已成功获取权限,如果已获取,请执行该用户操作。

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

您还可以将 GoogleSignInOptionsExtension 传递给 hasPermissionsrequestPermissions,用于检查并获取一组权限 。