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

Android项目使用Application Default Credentials访问Google Sheets遇错求助

问题解答

核心问题分析

你当前使用的GoogleCredentials.getApplicationDefault()是为服务器端/Google云环境设计的凭证获取方式,并不适用于Android客户端场景,这是触发错误的根本原因。


你的疑问解答

1. Android上能否设置环境变量?

可以,但完全不适合你的场景:

  • 模拟器的环境变量仅对模拟器有效,真机无法继承Windows机器的环境变量;
  • 即便在真机上手动设置环境变量,操作繁琐且存在严重安全风险——credentials.json属于服务账号密钥,暴露给普通用户会导致密钥泄露,威胁你的Google Sheets数据安全。

2. Google Compute Engine是什么?

它是Google Cloud Platform(GCP)提供的虚拟机服务,属于Google云计算基础设施。在GCE上运行的应用会自动获取Google提供的默认服务账号凭证,因此错误提示中会提及这个环境。


正确的Android访问Google Sheets方案

Android应用应采用OAuth 2.0用户授权流程,通过Google Sign-In获取用户授权的凭证,而非使用服务账号密钥。具体实现步骤如下:

步骤1:配置OAuth客户端ID

在Google Cloud Console中创建Android类型的OAuth客户端ID,配置你的应用包名和签名证书指纹。

步骤2:集成Google Sign-In到应用

添加Google Sign-In依赖,实现用户登录流程,获取已授权的GoogleAccountCredential。

步骤3:修改Sheets服务构建代码

替换你当前的凭证获取逻辑,示例代码如下:

// 先通过Google Sign-In获取用户授权的账号凭证
val credential = GoogleAccountCredential.usingOAuth2(
    context,
    listOf(SheetsScopes.SPREADSHEETS)
).setSelectedAccount(account) // account为Google Sign-In返回的用户账号

// 构建Sheets服务实例
val service = Sheets.Builder(
    NetHttpTransport(),
    GsonFactory.getDefaultInstance(),
    credential
).setApplicationName("FRCScout22").build()

// 调用Sheets API获取数据
val result: ValueRange = service.spreadsheets().values().get(ID, range).execute()
return result.toString()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30