У меня есть приложение с клиентской стороной, работающей на Android, и сервером, развернутым в Google App Engine.Приложение будет использовать пользовательские данные Календаря Google и нуждается в аутентификации в службе Календаря для доступа к каналам.Я могу обрабатывать получение токенов OAuth и секретов токенов от каждого пользователя на клиенте и сохранять их в базе данных на сервере для использования при доступе к каналам.Когда я пытаюсь использовать их для аутентификации в службе календаря, у меня возникают проблемы.
Сначала я использовал библиотеки gdata для этого , следуя этому примеру :
import com.google.gdata.client.calendar.*;
import com.google.gdata.client.authn.oauth.*;
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setOAuthToken(ACCESS_TOKEN);
oauthParameters.setOAuthTokenSecret(TOKEN_SECRET);
CalendarService client = new CalendarService("yourCompany-YourAppName-v1");
client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
URL feedUrl = new URL("https://www.google.com/calendar/feeds/default/freebusy/busy-times"+username);
CalendarEventFeed resultFeed = service.getFeed(eventFeedUrl,CalendarEventFeed.class);
System.out.println("All events on your calendar:");
System.out.println();
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
CalendarEventEntry entry = resultFeed.getEntries().get(i);
System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();
Однако это вызвало исключения:
java.lang.NoClassDefFoundError: com/google/gdata/client/authn/oauth/OAuthParameters
, хотя библиотеки были правильно связаны.Я провел несколько онлайн-исследований и обнаружил сообщение, в котором говорится, что движку приложений больше не нравятся библиотеки gdata, и я предпочитаю новый google-api-java-client от Google, Клиентская библиотека API Google для Java
Поэтому я переписал код для использования этой библиотеки, надеясь, что это решит мою проблему.Используя их пример кода и заменив их соответствующими учетными данными:
import com.google.api.client.auth.oauth.*;
import com.google.api.client.googleapis.*;
import com.google.api.client.googleapis.json.*;
import com.google.api.client.http.*;
import com.google.api.client.util.*;
import java.io.*;
// authorize using OAuth
HttpTransport transport = GoogleTransport.create();
transport.addParser(new JsonCParser());
OAuthParameters parameters = new OAuthParameters();
parameters.consumerKey = "anonymous";
parameters.token = "...";
OAuthHmacSigner signer = new OAuthHmacSigner();
signer.clientSharedSecret = "anonymous";
signer.tokenSharedSecret = "...";
parameters.signer = signer;
parameters.signRequestsUsingAuthorizationHeader(transport);
Однако теперь я получаю сообщение об ошибке при вызове GoogleTransport.create ().Я заглянул в API для GoogleTransport и прочитал: Предупреждение: в версии 1.1 больше не планируется расширять HttpTransport, поэтому, похоже, это источник моей ошибки.
Итак, я перехожу кВы все за помощь в решении этой проблемы.Исходя из того, что я обсуждал выше, и как я могу использовать токены доступа и секреты токенов, которые есть у каждого пользователя для аутентификации в Google и доступа к его фидам Календаря?