Google Sheets API + Swift:调用者无权限问题求助
解决Google Sheets API私有表格权限不足问题
问题根源
你代码里设置了sheetService.apiKey = strAPIKey,这会强制请求使用API密钥认证,而API密钥仅能访问公开共享的表格资源。哪怕你已经通过OAuth2登录并获取了用户授权,这个API密钥的设置会覆盖用户的凭证,导致私有表格(公司域受限)无法访问。
解决方案
移除API密钥设置:直接删除
sheetService.apiKey = strAPIKey这一行。当使用用户OAuth2授权访问私有资源时,sheetService应该依赖用户登录后生成的授权凭证(即OAuth流程返回的GTLRServiceAuthorization实例),不需要额外设置API密钥。确认OAuth权限范围:确保你的应用申请的OAuth2 scope包含以下任一权限:
- 只读访问:
https://www.googleapis.com/auth/spreadsheets.readonly - 读写访问:
https://www.googleapis.com/auth/spreadsheets
要保证用户在登录授权时,已经同意了这些权限范围。
- 只读访问:
检查公司域限制:如果是公司G Suite域内的表格,需要确认域管理员没有限制第三方应用访问G Suite资源,你的应用已获得域内的访问许可。
代码优化提示
你的读取逻辑里有个重复添加数据的问题,这段代码会导致行数据翻倍:
var stringRows = rows as! [[String]] for row in stringRows { stringRows.append(row) print(row) }
直接删除这个循环即可,rows已经是包含所有行数据的数组,无需二次添加。
内容的提问来源于stack exchange,提问作者PruitIgoe
相关产品推荐
相关产品推荐

