oauth 2.0 gwt访问令牌和谷歌日历API

时间:2012-11-26 01:58:12

标签: gwt oauth google-calendar-api

我再次踏上不熟悉的领域。

我使用此客户端库https://code.google.com/p/gwt-oauth2/来获取可用于访问Google日历API的访问令牌。

在做了一些研究之后,我注意到了另一个客户端库http://code.google.com/p/gwt-google-apis/source/browse/trunk/apis/samples/calendar/com/google/api/gwt/samples/calendar/client/CalendarEntryPoint.java,我可以使用它来进行谷歌日历api调用。

现在我不明白的是如何将两者结合起来。所以我现在有一个访问令牌,但是第二个客户端库中的示例代码不会在任何地方使用该访问令牌(它只使用来自google api控制台的client_id和api_key)。

这两个图书馆是相互排斥的还是它们要合作?

编辑:

我想要实现的是授权我的应用程序使用第一个库访问Google日历,并使用第二个库进行API调用。问题是,当我使用第二个库进行API调用时,它无法识别我的应用程序已被授权使用Google日历,我相信问题在于示例代码中的这一行:

calendar.initialize(new SimpleEventBus(),
    new GoogleApiRequestTransport(APPLICATION_NAME, API_KEY));

进行此次通话后,它会注册第二个应用程序(我可以在我的Google帐户中看到我的第三方应用程序)。即使第一个应用程序已被授权使用Google日历,新注册的应用程序也希望再次获得授权。

所以我四处查看是否有可以使用现有应用程序的GoogleApiRequestTransport,我设法找到了这个:http://gwt-google-apis.googlecode.com/svn-history/r1914/trunk/apis/javadoc/latest/javadoc/com/google/api/gwt/shared/GoogleApiRequestTransport.html

这个GoogleApiRequestTransport允许我设置访问令牌(这是我首先想要的)。但它已被弃用了。所以我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

我将通过说我的Java知识不存在来作为序言。您指出的第二个库实际上也进行了Oauth2身份验证。在此代码块中(从第75行开始):

private void login() {
  OAuth2Login.get().authorize(CLIENT_ID, CalendarAuthScope.CALENDAR,
      new Callback<Void, Exception>() {
        @Override
        public void onSuccess(Void v) {
          getCalendarId();
        }
        @Override
        public void onFailure(Exception e) {
          GWT.log("Auth failed:", e);
        }
      });
}

您可以看到对OAuth2Login.get().authorize()的调用,这是一个生成访问令牌的过程,类似于您在第一个库中看到的内容(同样,我对Java的熟悉限制了我的实用程序)。长话短说,似乎仍然在实现相同的Oauth2进程,所以为了回答你原来的问题,这两个库基本上是两种完成同样事情的方式 - 第一种只处理Oauth2交互,但第二种提供了完整的包与API本身交互。

答案 1 :(得分:0)

我刚刚记录了我成功整合Google日历的方法。我没有找到任何文档来访问日历而不使用Google库。所以我写了自己的:

http://www.tqis.com/eloquency/googlecalendar.htm