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

Android集成Google Photos Library API遇401错误,求OAuth2.0配置方案

解决Google Photos Library API 401错误与Credentials配置指南

嘿,我之前折腾Google Photos API的时候也踩过401的坑,结合你的情况给你梳理下排查步骤和配置方法,应该能帮到你:

一、先搞定Credentials.json的配置(401的核心原因之一)

你猜的没错,client_id和project_id的配置确实是关键,步骤其实很清晰:

  1. 下载正确的Credentials.json

    • 登录Google API控制台找到你的项目,进入「APIs & Services」→「Credentials」页面
    • 要是还没创建OAuth客户端ID,就点「创建凭据」→「OAuth客户端ID」,选「Android」类型
    • 这里一定要填对应用包名和SHA-1指纹!debug和release环境的SHA-1是不一样的,开发阶段用debug的就行,填错了直接导致授权失败
    • 创建完后点击「下载JSON」,这个就是credentials.json
  2. 在Android项目中配置凭据

    • 把credentials.json放到app/src/main/res/raw目录(没有raw目录就新建一个)
    • 加载凭据的时候,别硬编码client_id,最好通过资源文件解析:
      // 示例:在初始化GoogleSignInOptions时配置
      val inputStream = resources.openRawResource(R.raw.credentials)
      val jsonObject = JSONObject(String(inputStream.readBytes()))
      val clientId = jsonObject.getString("client_id")
      
      val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
          .requestScopes(GOOGLE_PHOTOS_SCOPE)
          .setClientId(clientId)
          .build()
      
    • 也可以用Google Services插件偷懒:把credentials.json改名为google-services.json放到app根目录,插件会自动帮你配置这些信息,不用手动解析
  3. 验证权限是否真的拿到了
    你的权限请求代码看着没问题,但要确认用户真的完成了授权:

    • 有没有弹出授权弹窗?用户点了允许吗?
    • 可以加个日志确认权限状态:
      val account = GoogleSignIn.getLastSignedInAccount(this)
      val hasPhotoPerm = GoogleSignIn.hasPermissions(account, GOOGLE_PHOTOS_SCOPE)
      Log.d(TAG, "是否拥有相册读取权限:$hasPhotoPerm")
      

    如果这里返回false,那就是授权流程没走通,大概率是凭据配置错了

二、Google OAuth2.0 最佳实践(踩坑总结)

作为经常和Google API打交道的人,分享几个必须注意的点:

  • 最小权限原则:只请求你需要的权限,比如你只读相册就用photoslibrary.readonly,别贪多请求读写权限,用户更愿意授权,也更安全
  • 别泄露凭据:绝对不要把client_id、client_secret硬编码到代码里,也别提交到Git这类版本控制系统,用资源文件或者Google Services插件处理最稳妥
  • 处理令牌过期:OAuth2的访问令牌通常1小时就过期,Google Sign-In库会自动刷新,但要记得在API请求前检查令牌有效性,或者捕获401错误后触发刷新
  • 精细化错误处理:遇到401别慌,打印完整的响应头(比如WWW-Authenticate字段),里面会告诉你是令牌过期、权限不足还是凭据错误
  • 测试环境隔离:开发和生产用不同的OAuth客户端ID,避免测试操作影响真实用户

最后再检查几个容易忽略的点

  • 确认API控制台里的Photos Library API真的启用了(虽然你说已经开了,但再检查一遍没坏处)
  • 清除应用数据,重新走一遍授权流程,有时候旧的缓存令牌会搞事情
  • 要是用的是模拟器,确认Google Play服务是最新版本,旧版本可能会有授权问题

如果按上面的步骤来还是有问题,把API请求的完整响应日志贴出来,比如响应码、响应头内容,这样更容易定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:31:38