安卓APP集成Google Sign-In后登录完成如何关闭谷歌登录窗口
问题根因
你遇到的现象由两个核心限制导致:
- 系统浏览器没有关联你的应用跳转规则,谷歌登录完成后的回调地址无法直接唤起你的应用
- 安卓端浏览器不允许第三方网页调用
window.close()关闭顶层窗口,只有浏览器自身打开的子页面才能通过该API关闭,因此你调用该方法自然不生效
解决方案
1. 配置应用的自定义URI Scheme/Deep Link
在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
相关产品推荐
相关产品推荐

