Flutter使用flutter_web_auth实现Google OAuth2登录后无法跳转回应用
问题根因
你当前的配置核心问题出在回调链路的跳转逻辑上:
- 授权请求中传入的
redirect_uri是服务端HTTPS地址,Google授权完成后浏览器会直接加载该服务端地址,不会触发跳转回你的App - 你在AndroidManifest中注册的是
my.app自定义Scheme,只有当浏览器重定向到my.app://开头的地址时,系统才会识别并拉起你的App,触发flutter_web_auth的回调逻辑
修复步骤
1. 调整服务端回调逻辑
修改你服务端的https://sl-cinema.herokuapp.com/oauth2/callback/google接口逻辑:
- 接口拿到Google返回的授权码、完成Token交换后,不要返回任何页面内容,直接返回302重定向响应,重定向地址为你的App自定义Scheme地址,同时把生成的token作为参数拼接,示例重定向地址:
my.app://oauth/callback/google?token=你的实际token值
2. 修复AndroidManifest配置(适配Android 12+)
如果你的应用 targetSdkVersion >= 31(Android 12及以上),需要给CallbackActivity添加android:exported="true"属性,否则系统无法识别该回调入口,修改后配置如下:
<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" android:exported="true"> <intent-filter android:label="flutter_web_auth"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="my.app" /> </intent-filter> </activity>
3. 可选:iOS端补充配置
如果同时适配iOS,需要在项目的Info.plist中添加自定义Scheme注册:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>my.app</string> </array> </dict> </array>
验证效果
修改完成后重新走登录流程即可:
用户完成Google授权后,服务端会自动重定向到你的App自定义Scheme地址,系统会自动拉起你的App,flutter_web_auth会自动捕获回调地址并返回给Dart层,同时关闭当前的授权WebView,你直接解析返回的地址拿到token即可。
内容的提问来源于stack exchange,提问作者Maneesha Randeniya
相关产品推荐
相关产品推荐

