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

安卓APP集成Google Sign-In后登录完成如何关闭谷歌登录窗口

问题根因

你遇到的现象由两个核心限制导致:

  • 系统浏览器没有关联你的应用跳转规则,谷歌登录完成后的回调地址无法直接唤起你的应用
  • 安卓端浏览器不允许第三方网页调用window.close()关闭顶层窗口,只有浏览器自身打开的子页面才能通过该API关闭,因此你调用该方法自然不生效
解决方案

在AndroidManifest.xml中为处理登录回调的Activity添加intent filter,配置和谷歌后台一致的重定向规则:

<activity
    android:name=".GoogleSignInCallbackActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="your-custom-scheme"
            android:host="google-signin-callback" />
    </intent-filter>
</activity>

上述配置的your-custom-scheme://google-signin-callback必须和你在Google Cloud控制台OAuth客户端配置的重定向URI完全一致

2. 优化登录页打开方式(可选,推荐)

如果之前是直接调用系统默认浏览器打开登录页,替换为Chrome自定义Tab,既保留浏览器的登录兼容性,又能和应用的跳转逻辑更好联动:

// 安卓端打开谷歌登录页示例代码
val loginAuthUrl = "你拼接好的谷歌OAuth授权请求地址"
CustomTabsIntent.Builder()
    .setShowTitle(true)
    .build()
    .launchUrl(context, Uri.parse(loginAuthUrl))

3. 调整回调页逻辑,移除window.close()调用

登录完成后的回调页不需要调用window.close(),直接拼接授权参数跳转到你配置的自定义Scheme地址即可,系统会自动唤起你的应用:

// 回调页前端逻辑示例
const authCode = new URLSearchParams(window.location.search).get('code')
const state = new URLSearchParams(window.location.search).get('state')
// 跳转到应用自定义Scheme地址
window.location.href = `your-custom-scheme://google-signin-callback?code=${authCode}&state=${state}`

4. 应用内处理回调完成登录

在你配置的GoogleSignInCallbackActivity中接收跳转携带的参数,拿到授权code后到服务端交换用户凭证,完成登录流程即可。

排查注意事项
  • 确认Google Cloud控制台配置的OAuth客户端ID对应的SHA1指纹和你当前打包应用的SHA1一致,debug、release签名的SHA1需要分别配置
  • 如果使用https域名的App Links作为重定向地址,需要保证域名下的.well-known/assetlinks.json配置正确,否则系统无法自动唤起应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:08