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

使用OAuth2Authenticator调用Google Drive API后e.Account为null如何解决

Google Drive OAuth2 授权后返回Account为null问题修复

你判断的方向完全正确,故障核心是Google授权完成后的回调没有被你的应用正确拦截并传递给OAuth组件,按以下步骤逐一排查即可解决:

  • 首先校验Android清单文件的拦截配置
    你需要给接收授权回调的Activity配置IntentFilter,配置的scheme、host必须和代码里传入的重定向URI完全字符级匹配,多一个斜杠、错一个字符都会拦截失败,参考配置:
    <activity android:name="你的应用命名空间.RedirectInterceptorActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- 和代码中new Uri("com.***.myapp:/oauth2redirect")完全对应 -->
            <data
                android:scheme="com.***.myapp"
                android:host="oauth2redirect" />
        </intent-filter>
    </activity>
    
    不要随意加path配置,你当前用的重定向格式里,oauth2redirect是host不是路径,写错位置直接拦截失效。
  • 修正OAuth组件初始化逻辑
    你当前传空字符串作为clientSecret是符合移动端OAuth规范的,但要注意两个容易踩的坑:
    1. Google Cloud控制台创建的OAuth客户端ID必须选择Android类型,绝对不能用Web端、桌面端的客户端ID,同时要把你当前安装包的debug、release签名SHA1、包名完整添加到控制台配置里,签名不匹配Google不会正常回调
    2. 先把isUsingNativeUI: true改成false测试,安卓12以上部分机型的系统定制WebView对原生授权UI兼容有问题,会导致回调丢失,改用Chrome Custom Tab流程稳定性高很多
  • 补全回调传递的代码逻辑
    90%的同类问题都是漏了这一步:你在拦截回调的Activity里,必须把收到的Intent数据传给之前发起授权的同一个OAuth2Authenticator实例,绝对不能在这里new新的实例,参考代码:
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // 获取你之前发起授权时保存的auth全局实例,不要新建
        OAuth2Authenticator auth = AuthManager.StoredAuthInstance;
        // 把回调数据传给auth组件解析
        auth.OnPageLoading(Intent.Data);
        Finish();
    }
    
    如果你每次发起授权都新建auth实例、或者回调的时候找不到之前发起请求的实例,Completed事件永远不会触发正确结果。
  • 校验三处重定向地址完全一致
    代码里初始化auth传入的重定向地址、Manifest里IntentFilter配置的地址、Google Cloud控制台里配置的授权回调地址,三个地方必须完全一模一样,你当前写的com.***.myapp:/oauth2redirect是单斜杠格式,不要写成常见的双斜杠com.***.myapp://oauth2redirect,格式不匹配会直接拦截失败。

快速定位技巧:授权完成跳回应用时打日志看Intent.Data的值,如果这个值为null,说明Manifest拦截配置错了;如果Intent.Data有授权码参数但Completed事件还是报未认证,说明你没正确调用OnPageLoading传值,或者用了错误的auth实例。

内容的提问来源于stack exchange,提问作者Maxime V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:15:30