Я пытаюсь читать / писать в Google Sheet (принадлежит мне) через Google Sheets API v4. Для получения объекта Credential
я использую следующий код:
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = ResourceX.class.getResourceAsStream(CLIENT_SECRET_DIR);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
System.out.println(clientSecrets.toPrettyString());
// When I print this ^^ it loads contents of secret key exactly as expected
// Build flow and trigger user authorization request.
Builder builder = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES); // error occurs on this line
builder.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(CREDENTIALS_FOLDER)));
GoogleAuthorizationCodeFlow flow = builder.setAccessType("offline").build();
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
}
Я понимаю, что IllegalArgumentException
означает, что каким-то образом аргумент clientSecrets
является недопустимым для передачи в качестве параметра, однако, когда я распечатываю содержимое файла json (см. Оператор print в коде выше), содержимое, кажется, соответствует ожидаемому содержимому. (Я не могу распечатать содержимое на SO из соображений безопасности, но в файле ничего не изменилось, так как я скачал его с Google).
Я нашел похожий вопрос здесь , но нет ответов на основной вопрос.
Что, возможно, я пропустил, что может вызвать это исключение?
StackTrace
Exception in thread "main" java.lang.IllegalArgumentException
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.getDetails(GoogleClientSecrets.java:82)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.<init>(GoogleAuthorizationCodeFlow.java:195)
at global_projects.GoogleSheetsAPI.getCredentials(GoogleSheetsAPI.java:100)
at global_projects.GoogleSheetsAPI.updateSheetByOauth2(GoogleSheetsAPI.java:116)
at amz.Main.main(Main.java:78)
Обновление:
Я думаю, что нашел проблему. clientSecrets
ожидает, что файл json из идентификатора клиента OAuth 2.0 не является служебной учетной записью ключ / jsonfile (как описано в этой ссылке ). Однако, поскольку я обращаюсь к своей собственной электронной таблице, есть ли способ получить к ней доступ, используя файл ключ учетной записи службы / файл json , или я должен использовать OAuth , что потребовало бы от меня согласия на редактирование моя собственная таблица?