我在Java API中查看谷歌日历并感到困惑。
我的问题是:当我运行我的应用程序时,它会生成一个URL,当我将它放入浏览器时会生成一个代码。我想知道下次我将如何运行应用程序不需要这个url来生成代码,我想知道是否有可能只做一次这些步骤!
以下是代码:
public void setUp() throws IOException, GeneralSecurityException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();
// The clientId and clientSecret can be found in Google Developers Console
String clientSecret = "0XgfTEYxDjTyQITWHd6YtxnT";
// Or your redirect URL for web based applications.
String redirectUrl = "urn:ietf:wg:oauth:2.0:oob";
String scope = "https://www.googleapis.com/auth/calendar";
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
httpTransport, jsonFactory, CLIENT_ID, clientSecret, Collections.singleton(scope));
// Step 1: Authorize
String authorizationUrl = flow.newAuthorizationUrl().setRedirectUri(redirectUrl).build();
// Point or redirect your user to the authorizationUrl.
System.out.println("Go to the following link in your browser:");
System.out.println(authorizationUrl);
// Read the authorization code from the standard input stream.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("What is the authorization code?");
String code = in.readLine();
// End of Step 1
// Step 2: Exchange
GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(redirectUrl)
.execute();
// End of Step 2
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport).setJsonFactory(jsonFactory).setClientSecrets(CLIENT_ID, clientSecret)
.build().setFromTokenResponse(response);
service = new Calendar.Builder(httpTransport, jsonFactory, credential).setApplicationName("YOUR_APPLICATION_NAME").build();
}
答案 0 :(得分:0)
流程就像这样
您发送客户端ID / secret并获取用于身份验证的网址。
使用网址验证您自己并获取代码。
您使用access_token交换代码。
此访问令牌可以与api一起使用特定时间(通常为1小时)
因此,您可以生成一次access_tone,并且可以使用它一小时而不是一次又一次地生成它。
static {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
synchronized(Singleton.class) {
access_token = new MethodToInitializeAccessToken();
}
}
}, 60 * 60 * 1000L /* Once per hour */);
}
答案 1 :(得分:0)
抱歉,我没有足够的声誉来评论或要求你。但是,让我解释它的工作原理。
第一次使用正确的redirect_uri调用Google日历api网址时。只有当用户在Google商家信息页面中接受条件时,您才会获得authorization_code
。
获得authorization_code后,您会在回复中获得access_token
和refresh_token
。
access_token有限时间(我不知道确切的时间范围)。但是除非记录用户删除此活动的permissions,否则可以使用refresh_token。
如果您丢失了refresh_token,则需要再次从步骤1开始。