java使用AppIdentityService进行身份验证时未找到电子表格
我可以使用AppIdentityService
成功验证我的应用程序引擎应用程序。但是,当我执行SpreadsheetService.getEntries
时,我没有收到任何条目
这是我的密码:
SpreadsheetService service = new SpreadsheetService("Spreadsheet editing");
String[] SCOPESArray = { "https://spreadsheets.google.com/feeds" };
final List SCOPES = Arrays.asList(SCOPESArray);
AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(SCOPES);
Credential creds = new Credential(BearerToken.authorizationHeaderAccessMethod());
creds.setAccessToken(accessToken.getAccessToken());
service.setOAuth2Credentials(creds);
SpreadsheetFeed feed = service.getFeed(new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"), SpreadsheetFeed.class);
List spreadsheets = feed.getEntries();
此时,电子表格是一个空列表
通过在电子表格的“共享”框中输入服务帐户电子邮件,我已与我的应用程序共享了电子表格-这是形式为:xxx@developer.gserviceaccount.com
的电子邮件
我是否误解了这里的权限?与服务帐户“共享”电子表格是否不足以使服务帐户“看到”电子表格
# 1 楼答案
目前,我认为在使用Google App Engine的Sheets API进行更新时,
AppIdentity
不受支持似乎可以进行身份验证,但
SpreadsheetEntry
的列表始终为空相反,通过在
GoogleCredential
实例中指定凭据,使用Google App Engine的服务帐户:# 2 楼答案
我发现谷歌文档上的共享效果不太好,即“与我共享”文件夹相当不完整。这似乎已经改善了驱动器,但电子表格API是古老的
我要做的是与App Engine服务帐户共享包含电子表格的文件夹,并使用Drive API列出这些文件夹中的电子表格。这些文件夹是通过其密钥访问的。这允许我为单元测试、测试和生产配置不同的文件夹
以下是从文件夹中获取电子表格的一些示例代码:
然后可以使用
File.getId()
检索要与电子表格API一起使用的文件密钥另外,我建议不要使用App Engine的电子表格API。当从GAE调用API时,API经常会遇到超时和其他异常。我不得不将处理转移到一个排队的任务中,不幸的是,该任务没有承诺的更长的URLFetch超时时间(请参见issue 10470),但至少请求没有被取消
我编写了大多数电子表格API调用的包装器,以便在出现异常时重试调用。我不断地添加更多的包装