我正在尝试使用gdata来获取特定用户的Google联系人。该操作将在控制台应用程序中执行。拥有用户名(电子邮件)和密码我可以检索我需要的数据,以防在帐户级别访问未经检查的应用程序(我知道我使用ClientLogin)。如果在帐户级别设置,我也可以使用特定于应用程序的密码。 我知道我可以使用Oauth进行授权而不使用userId-password,但这对我来说几乎不起作用,因为我了解每次使用都必须为本机应用程序生成Client ID,包括CLIENT ID,CLIENT SECRET和REDIRECT URIS(请更正我如果我不对的话)
我使用的代码是:
ContactsService contactsService = new ContactsService("projectName");
contactsService.setUserCredentials(email, password);
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
Query myQuery = new Query(feedUrl);
myQuery.setMaxResults(100);
ContactFeed resultFeed = contactsService.getFeed(myQuery, ContactFeed.class);
有没有办法让帐户中的所有联系人不依赖于帐户设置,拥有userId(email)和passowrd? (打开浏览器并让用户进行授权或类似的东西也可以工作)
答案 0 :(得分:0)
最终成功实现了它 以防万一有人面临同样的问题
在Google中创建一个帐户,生成json文件(本机应用程序的客户端ID),包括CLIENT ID,CLIENT SECRET和REDIRECT 将json文件放入您的应用程序中 以与以下
类似的方式创建凭据public class AuthorizationHelper {
public static Credential authorize() throws Exception {
java.io.File DATA_STORE_DIR =
new java.io.File("permissionsFile", "PermissionsFolder");
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
FileDataStoreFactory dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
// load client secrets
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(new FileInputStream("client_secrets.json")));
if (clientSecrets.getDetails().getClientId().startsWith("Enter")
|| clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) {
System.out.println(
"Enter Client ID and Secret from https://code.google.com/apis/console/?api=plus "
+ "into plus-cmdline-sample/src/main/resources/client_secrets.json");
System.exit(1);
}
// set up authorization code flow
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JSON_FACTORY, clientSecrets,
Collections.singleton("https://www.google.com/m8/feeds/contacts/default/full")).setDataStoreFactory(
dataStoreFactory).build();
// authorize
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("googleAccount");
}
}
其中permissionsFile和permissionsFolder是文件和文件夹,暂时存储您尝试登录的帐户的权限 googleAccount - 您创建的帐户(我在没有@ gmail.com的情况下使用)
然后就这样做
myService.setOAuth2Credentials(AuthorizationHelper.authorize());
并删除
contactsService.setUserCredentials(email, password);
因为您不需要代码中的登录名和密码。
您将被重定向到浏览器中的登录页面并要求输入login和passord
希望能帮助某人
由于
Ievgenii