2013-08-25 4 views
3

Я получил OAuth токенов для каждого календаря, который используется в моем андроиде приложении с помощью этого кодаКак создать экземпляр объекта com.google.api.services.calendar.Calendar с использованием токена oAuth?

private HashMap<String, String> getAuthrizedCalendarsOnPhone() { 
    HashMap<String, String> authorized_calendars = new HashMap<String, String>(); 

    AccountManager acctmgr = AccountManager.get(app_context); 
    Account[] accounts = acctmgr.getAccountsByType("com.google"); 

    for (Account account : accounts) { 
     String auth_token_type = "oauth2:https://www.googleapis.com/auth/calendar"; 
     AccountManagerFuture<Bundle> amf = acctmgr.getAuthToken(account, auth_token_type, null, this, null, null); 

     String authToken; 
     try { 
      Bundle authTokenBundle = amf.getResult(); 
      authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); 
     } catch(Exception e) { 
      authToken = ""; 
     } 
     authorized_calendars.put(account.name, authToken); 
    } 

    return authorized_calendars; 
} 

Теперь, как я экземпляр com.google.api.services.calendar.Calendar объекта, используя который OAuth маркер, так что я могу получить доступ к API Календаря от имени этот пользователь?

т.е. так что я могу сделать что-то вроде этого

private HashMap<String, HCEvent> getCalendarEvents(String calendar_name) { 
    HashMap<String, HCEvent> return_map = new HashMap<String, HCEvent>(); 
    com.google.api.services.calendar.Calendar service = null; //create a Calendar object using the oauth token for associated with calendar_name 
    com.google.api.services.calendar.model.Events events = service.events().list(calendar_name).setPageToken(pageToken).execute(); 

    /* 
    * do something with the events 
    */ 

    return return_map; 
} 

ответ

3

После просмотра некоторых из календаря API Google, и примеры это выглядит как самый лучший способ, чтобы назначить маркер в Календаре при его инициализации. Это требует некоторой настройки, посмотрите на эту ссылку:

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

Мои извинения, если вы уже прошли через это, но похоже, что вы можете быть в состоянии сделать несколько поправок к этому примеру.

Прямо перед Календарь инициализирован, это пропущено кода выполняется:

GoogleAccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(
    response.accessToken, httpTransport, jsonFactory, clientId, clientSecret, 
    response.refreshToken); 

, который в свою очередь используется как часть инициализации календарей.

Посмотрев на документацию для GoogleAccessProtectedResource, похоже, что существует конструктор, который просто принимает токен доступа.

http://javadoc.google-api-java-client.googlecode.com/hg/1.4.1-beta/com/google/api/client/googleapis/auth/oauth2/draft10/GoogleAccessProtectedResource.html#GoogleAccessProtectedResource(java.lang.String)

Вы можете использовать маркеры, которые вы уже запрошенные в методе раньше, то с парой других объектов, описанных в Google календарь Instantiate ссылку выше, вы должны быть в состоянии правильно создать экземпляр календаря с доступный токен доступа.

Надеется, что это помогает,

EDIT

Похоже GoogleAccessProtectedResource на самом деле будет устаревшим, или уже есть.

В Javadoc состояния:

"Устаревшие (планируется снять в 1.8) Использование GoogleCredential"

http://javadoc.google-api-java-client.googlecode.com/hg/1.7.0-beta/com/google/api/client/googleapis/auth/oauth2/draft10/GoogleAccessProtectedResource.html

Так это выглядит как то, что вам нужно, это GoogleCredential заменить GoogleAccessProtectedResource. Я обнаружил, что вы можете настроить учетные данные с маркером доступа, как так:

GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); 

Затем вы можете создать новый календарь, делая это:

Calendar service = new Calendar.Builder(httpTransport, jsonFactory, 
      credential).build(); 

Где HttpTransport и jsonFactory будет похоже на то, что другой пример.

Удачи!

+0

Это похоже на то, что мне нужно, но где я могу загрузить банку с 'GoogleAccessProtectedResource'? Он, похоже, не включен в java-клиент Google Calendar API. – azrosen92

+0

Также кажется, что этот метод устарел, вы уверены, что это нормально использовать? – azrosen92

+0

Отредактируйте мое редактирование – DejanRistic