You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android/iOS集成Google登录:能否让弹窗仅显示仅需邮箱权限?

解决Google登录弹窗仅展示邮箱权限的问题

可以实现仅在登录弹窗中展示邮箱权限的效果,问题出在当前代码未正确限制授权Scope,默认包含了获取姓名、头像的profile权限。以下是Android和iOS端的修正方案:

Android端(CredentialManager)

默认情况下,GetSignInWithGoogleOption会自动包含openid、profile、email三个Scope,导致弹窗显示额外权限。需要显式指定仅包含邮箱相关的Scope:

val credentialManager = CredentialManager.create(context)
val request = GetCredentialRequest(
    listOf(
        GetSignInWithGoogleOption.Builder(google_client_id)
            // 仅指定邮箱权限相关的Scope,覆盖默认值
            .setScopes(listOf("openid", "https://www.googleapis.com/auth/userinfo.email"))
            .build()
    )
)
val result = credentialManager.getCredential(context, request)

说明:openid是Google OIDC登录的必要基础Scope,必须保留;userinfo.email用于获取用户邮箱,两者组合后弹窗只会提示获取邮箱权限。

iOS端(GoogleSignIn-iOS)

当前代码仅设置了additionalScopes,但默认配置中已包含profile权限(对应姓名、头像),需要直接覆盖配置的scopes属性,而非追加:

// 直接设置仅包含邮箱权限的Scope,替换默认值
let config = GIDConfiguration(clientID: "你的Google客户端ID")
config.scopes = ["https://www.googleapis.com/auth/userinfo.email", "openid"]
GIDSignIn.sharedInstance.configuration = config

// 发起登录请求
GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in
    // 处理登录结果
}

说明:同样需要保留openid作为基础Scope,仅添加userinfo.email后,弹窗将只显示获取用户邮箱的权限提示。

验证要点

  1. 确保Google Cloud控制台中,你的OAuth客户端ID已启用对应的Scope(userinfo.email和openid默认已启用);
  2. 测试前需清除应用的Google登录缓存(Android可在系统设置中清除应用数据,iOS可卸载重装应用),避免旧权限缓存影响测试结果。

内容的提问来源于stack exchange,提问作者Jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:25:00