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

Flutter Android集成Google OAuth 2.0:浏览器无法跳转回应用咨询

Flutter Android集成Google OAuth2跳转回应用问题解决

问题分析

你当前使用Web类型Client ID搭配HTTPS回调URL,但授权后无法跳转回应用,核心原因是:

  • 未精确匹配回调URL的路径,导致系统无法识别该链接属于你的应用
  • HTTPS类型的回调需要配置App Links(深度链接的一种)完成域名验证,否则系统不会将HTTPS链接路由到你的应用;或者可以改用自定义URI Scheme快速解决

两种可行解决方案

方案一:自定义URI Scheme(快速生效)

这种方式无需域名验证,配置简单:

  1. 调整Google Cloud配置:
    • 如果你继续用Web类型Client ID,需在该Client ID的「授权重定向URI」列表中添加自定义URI,比如com.yourcompany.app://google-callback
    • 更推荐创建Android类型Client ID,适配移动应用场景,此时自定义URI会自动被允许
  2. 修改build.gradle:
    defaultConfig {
        manifestPlaceholders += [
                appAuthRedirectScheme: 'com.yourcompany.app'
        ]
        // 其他配置
    }
    
  3. 修改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>
    
  4. 修改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,需完成域名验证:

  1. 完善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>
    
  2. 配置域名验证文件:
    在你的域名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指纹"]
        }
      }
    ]
    
  3. 验证配置:
    确保该文件可以通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:23:11