有没有办法让谷歌联系人在没有特定帐户设置的情况下拥有密码和用户名(电子邮件)?

时间:2014-09-26 18:28:10

标签: java authorization gdata

我正在尝试使用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? (打开浏览器并让用户进行授权或类似的东西也可以工作)

1 个答案:

答案 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