Flutter Android集成Google OAuth 2.0:浏览器无法跳转回应用咨询
Flutter Android集成Google OAuth2跳转回应用问题解决
问题分析
你当前使用Web类型Client ID搭配HTTPS回调URL,但授权后无法跳转回应用,核心原因是:
- 未精确匹配回调URL的路径,导致系统无法识别该链接属于你的应用
- HTTPS类型的回调需要配置App Links(深度链接的一种)完成域名验证,否则系统不会将HTTPS链接路由到你的应用;或者可以改用自定义URI Scheme快速解决
两种可行解决方案
方案一:自定义URI Scheme(快速生效)
这种方式无需域名验证,配置简单:
- 调整Google Cloud配置:
- 如果你继续用Web类型Client ID,需在该Client ID的「授权重定向URI」列表中添加自定义URI,比如
com.yourcompany.app://google-callback - 更推荐创建Android类型Client ID,适配移动应用场景,此时自定义URI会自动被允许
- 如果你继续用Web类型Client ID,需在该Client ID的「授权重定向URI」列表中添加自定义URI,比如
- 修改build.gradle:
defaultConfig { manifestPlaceholders += [ appAuthRedirectScheme: 'com.yourcompany.app' ] // 其他配置 } - 修改AndroidManifest.xml:
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity"> <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="com.yourcompany.app" android:host="google-callback" /> </intent-filter> </activity> - 修改Flutter代码:
final AuthorizationTokenResponse? result = await appAuth.authorizeAndExchangeCode( AuthorizationTokenRequest( '你的Client ID', 'com.yourcompany.app://google-callback', // 对应自定义URI scopes: ['openid', 'profile', 'email'], serviceConfiguration: AuthorizationServiceConfiguration( authorizationEndpoint: 'https://accounts.google.com/o/oauth2/v2/auth', tokenEndpoint: 'https://oauth2.googleapis.com/token', ), ), );
方案二:HTTPS深度链接(App Links,规范方案)
如果坚持使用HTTPS回调URL,需完成域名验证:
- 完善AndroidManifest配置:
添加路径匹配和自动验证属性,确保系统识别该回调URL属于你的应用:<activity android:name="net.openid.appauth.RedirectUriReceiverActivity"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="companyname.com" android:path="/api/oauth/google/callback" /> </intent-filter> </activity> - 配置域名验证文件:
在你的域名companyname.com的根目录下创建.well-known/assetlinks.json文件,内容如下(替换你的应用包名和SHA-256指纹):[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["你的应用SHA-256指纹"] } } ] - 验证配置:
确保该文件可以通过https://companyname.com/.well-known/assetlinks.json访问,并且Google Cloud控制台的Web Client ID已添加https://companyname.com/api/oauth/google/callback作为授权重定向URI
当前配置的快速修复
如果不想改动回调URL,先尝试给AndroidManifest的intent-filter添加路径匹配,看是否能临时解决:
<data android:scheme="https" android:host="companyname.com" android:pathPrefix="/api/oauth/google/callback" />
但这种方式仍需App Links的域名验证才能稳定生效,否则部分设备可能无法跳转。
内容的提问来源于stack exchange,提问作者Mohsin Naqvi
相关产品推荐
相关产品推荐

