0

我目前正在尝试将我的 android 应用程序与 GoogleCalendar 中的一些日历连接起来。

但我对如何验证呼叫完全感到困惑。我明白我必须用 OAuth2.0 来做这件事

但是没有我可以正确遵循/理解的明确示例或教程。我尝试按照此处描述的以下步骤进行操作:

https://developers.google.com/google-apps/calendar/auth

但我一直对可能非常基础的东西感到困惑。

我的问题是这个。任何人都可以帮助我理解以下步骤并提供一些示例代码吗?

第 1 步:请求 OAuth2.0 令牌。

第 2 步:验证 OAuth2.0 令牌并检索 accessToken

第 3 步:使用 accessToken 并实际执行 HTTPRequest 调用,这给了我我想要的 JSON。

4

1 回答 1

0

你的问题是最新的还是你已经解决了你的问题?

编辑:

这里有一些基本信息如何实现 GoogleCalendar:

1.创建一个类来处理日历:

public class MyCalendar
{
  private static final String   AUTH_TOKEN_TYPE = "cl";
  public static final String KEY = "YOUR_API_KEY";  //You can find below Simple API Access at GoogleApiConsole
  final HttpTransport   transport = AndroidHttp.newCompatibleTransport();
  final JsonFactory factory = new GsonFactory();
  GoogleAccountManager accountManager;
  String name;
  String token;
  public com.google.api.services.calendar.Calendar mycalendar;

  private HttpRequestInitializer initializer = new HttpRequestInitializer() 
  {
     public void initialize(HttpRequest request) throws IOException
     {           
        request.getHeaders().setAuthorization(GoogleHeaders.getGoogleLoginValue(authToken));
     }
  };

  public MyCalendar()
  {
  }
}
  1. 创建一个日历对象(我在 MyCalendar 的构造函数中执行此操作

    mycalendar = com.google.api.services.calendar.Calendar.builder(transport,jsonFactory)
                  .setApplicationName("CHOOSE_A_APPNAME")                      
                  .setHttpRequestInitializer(initializer)
                  .setJsonHttpRequestInitializer(new GoogleKeyInitializer(KEY))
                  .build();
    accountManager = new GoogleAccountManager(TimetableApplication.getInstance().getActivity());
    findGoogleAcc();
    

如果您想访问您的日历,初始化程序的初始化方法 [;-)] 将在稍后调用。

2.搜索用户手机所指的GoogleAccount

void findGoogleAcc()
{
    Account account = accountManager.getAccountByName(name);
    if(account == null)
    {
        //Handle wrong name, or if user connect more than one accounts to phone
    }
    if(token != null)
    {
        //you already got your token for user's account and these method is not necessary
    }
    accountManager.getAccountManager().getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {

        public void run(AccountManagerFuture<Bundle> future)
        {
            try
            {
                Bundle bundle = future.getResult();
                if(bundle.containsKey(AccountManager.KEY_INTENT))
                {
                    // Allow app to connect to googleaccount
                    Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
                    intent.setFlags(intent.getFlags() & ~ Intent.FLAG_ACTIVITY_NEW_TASK);
                    activity.startActivityForResult(intent, 0);
                }
                else
                    if(bundle.containsKey(AccountManager.KEY_AUTHTOKEN))
                    {
                        this.authToken = authToken;
                        gotSmthFromCalendar();
                    }
            }
            catch(Exception e)
            {
            }
        }
    }, null);
}

3.在方法上使用您的日历:

     void gotSmthFromCalendar()
     {
         //Here u can do whatever u want.
     }

我认为在 gotSmthFromCalendar() 上,您应该使用 AsyncTask 来请求数据。例如你可以这样做:

   List<CalendarListEntry> calendarList = mycalendar.calendarList().list().execute().getItems();
   for(CalendarListEntry calendarEntry : calendarList)
   {
        String summary = calendarEntry.getSummary();
        String id = calendarEntry.getId();
        Log.v("Calendar","Found a calendar with summary : " + summary + " an id: " + id);
   }

希望这些基础知识可以帮助您使用 v3。如果你需要额外的帮助,每次都问我!!

小木

于 2012-06-13T11:00:47.543 回答