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
相关产品推荐
相关产品推荐

