我目前正在通过 OAuth 2.0 和所谓的服务帐户实现对 Google 通讯录的访问。服务帐户是为像“My.Name@gmail.com”这样的普通用户生成的。
生成 OAuth 2.0 凭据的代码是:
public static GoogleCredential getCredentials() throws GeneralSecurityException, IOException {
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SingleUserCredentials.SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes("https://www.google.com/m8/feeds")
.setServiceAccountPrivateKeyFromP12File(new File(SingleUserCredentials.SERVICE_ACCOUNT_PKCS12_FILE_PATH))
.build();
credential.refreshToken();
return credential;
}
然后我试图通过以下方式检索联系人:
ContactsService myService = new ContactsService(
"myApp");
myService.setOAuth2Credentials(getCredentials());
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
Query myQuery = new Query(feedUrl);
ContactFeed resultFeed = myService.query(myQuery, ContactFeed.class);
// Print the results
for (ContactEntry entry : resultFeed.getEntries()) {
System.out.println(entry.getName().getFullName().getValue());
System.out.println("Updated on: " + entry.getUpdated().toStringRfc822());
}
问题是我没有从我的帐户中获得任何联系人。提要始终为空。没有错误。没有什么。
当通过相同的方法访问 Google Apps 托管域时,它运行良好。
我想知道在使用 p12 密钥文件和服务帐户时,Contacts Api 是否支持普通(又名@gmail.com)帐户的 OAuth 2.0。