Я делаю API для получения содержимого таблицы Google, но каждый час срок действия токена StoredCredential истекает, поэтому я должен вернуться в пользовательский интерфейс (меню, в котором вы выбираете свою учетную запись Google), как я могу расширить срок службы токена, поскольку программа будет запускаться каждый день, и я не хочу вводить свою учетную запись Google каждый день? Я уже пытался изменить время истечения срока, но это не сработало
Вот мой фактический код:
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "u:\\tokens";
private static final List<String> SCOPES =
Arrays.asList(SheetsScopes.SPREADSHEETS,SheetsScopes.DRIVE);
private static final String CREDENTIALS_FILE_PATH = "credentials.json";
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws Exception {
// Load client secrets.
InputStream in = new FileInputStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH));
DataStore<StoredCredential> datastore = fileDataStoreFactory.getDataStore("StoredCredential");
datastore.values().forEach(x -> x.setExpirationTimeMilliseconds((long) 999999999));
//DEBUG
datastore.values().forEach(x -> System.out.println(x.getExpirationTimeMilliseconds()));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
//.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setCredentialDataStore(datastore)
.setAccessType("online")
.setApprovalPrompt(null)
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}