我想谷歌日历API基于关春引导我的谷歌应用程序引擎项目的一个集成。使用基于JAVA谷歌 - 客户端API库进行授权。我提供了我的应用程序引擎项目的GoogleAuthorizationCodeFlow
建立的客户ID和密码。在我第一次运行,我得到了用户同意的屏幕,并在受理后,StoredCredential
文件中的目标/令牌创建。在此之后,我所有的谷歌日历API调用工作正常。一段时间后,我的猜测是有关访问令牌到期,我又得到用户同意的屏幕。按照文件,如果接入类型设置为offline
,授权流程将采取管理刷新令牌的照顾。 StoredCredential
文件仍然存在目标/令牌路径,但我仍然看到用户同意画面。授权码的粘贴片段。
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = EventController.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// 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)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
public static Calendar get() throws GeneralSecurityException, IOException {
// Build a new authorized API client com.huddle.processor.service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
return new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
}
更新:虽然远程调试,当谷歌,OAuth的客户端从文件中使用的读取存储的凭据
StoredCredential stored = credentialDataStore.get(userId);
刷新令牌为空。想知道如果这是原因,但不知道为什么它没有得到设置。
将是巨大的,如果有人可以让我知道我失去了什么。谢谢
找到了解决此。它涉及到不能够得到刷新令牌。需要通过approval_prompt =力参数。所以更新程式码是
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.setApprovalPrompt("force")
.build();
参考博客这让我:https://googlecode.blogspot.com/2011/10/upcoming-changes-to-oauth-20-endpoint.html