通过Gmail Api添加新的Gmail用户

时间:2017-11-07 17:32:57

标签: java google-api gmail google-oauth gmail-api

我使用Gmail API for Java与用户的Gmail框进行互动(阅读电子邮件,文件夹等) 这就是我授权的方式(主要是代码来自快速入门)

static GMailAuthorizationProvider getGmailProvider(String userMail) throws IOException {
    return new GMailAuthorizationProvider(userMail);
}

private GMailAuthorizationProvider(String userId) throws IOException {
    gmailService = getGmailService(userId);
    try {
        gmailService.users().getProfile(userId).execute();
    }
    catch (IOException e) {
        DATA_STORE_FACTORY.getDataStore("StoredCredential").delete(userId);
        throw  new IOException(e);
    }
}

private Gmail getGmailService(String id) throws IOException {
    return new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, getAuthorizedCredential(id))
                    .setApplicationName(APP_NAME)
                    .build();
}

private Credential getAuthorizedCredential(String id) throws IOException {
    InputStream in = GMailAuthorizationProvider.class.getResourceAsStream("client_secret.json");
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                    .setDataStoreFactory(DATA_STORE_FACTORY)
                    .setAccessType("offline")
                    .build();

    return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize(id);
}

此处出现问题...当我输入空字符串时,流程为:

  • 创建新的GMailAuthorizationProvider实例
  • 打开默认浏览器
  • 用户在Google的视图中选择或创建新帐户
  • 在我的应用程序中输入邮件(记住它是一个空字符串),并且用户选择的帐户彼此不相同,我在尝试加载用户信息时收到错误:

gmailService.users().getProfile(userId).execute();

或者,如果我删除此行,则在尝试加载用户的邮件文件夹时仍会出现404错误。

但是如果用户输入类似

的内容
  

username@gmail.com

然后使用此ID创建新帐户,即可。 API传递,我获得所有邮件文件夹。

那么如何处理用户输入的空字符串(这意味着在我的应用程序中创建新帐户)?我希望能够通过已经创建的帐户ID传递API,或者在Web视图中选择。

提前致谢。

0 个答案:

没有答案