Korzystanie z interfejsu API Listy zadań na Androidzie

Ostrzeżenie: ten dokument został wycofany. Informacje o autoryzowaniu aplikacji na Androida za pomocą protokołu OAuth 2.0 znajdziesz w Dokumentacja autoryzacji usług Android Play.

Z tego dokumentu dowiesz się, jak korzystać z interfejsu Tasks API z protokołu OAuth 2.0 na Androidzie. Opisano w nim mechanizmy autoryzacji umożliwiające uzyskanie dostępu do Listy zadań Google użytkownika oraz instrukcje przygotowywania obiektu usługi do użycia interfejsu Tasks API w aplikacji na Androida.

Aby Twoja aplikacja na Androida korzystała z interfejsu Tasks API, musisz wykonać kilka czynności:

  1. Wybierz konto Google użytkownika
  2. Uzyskiwanie tokena dostępu OAuth 2.0 od AccountManager dla interfejsu Task API
  3. Zidentyfikowanie projektu i skonfigurowanie obiektu usługi Lista zadań
  4. Wykonywanie wywołań interfejsu Tasks API

Importowanie biblioteki klienta Google

Opisane tu przykłady korzystają z biblioteki klienta interfejsów API Google dla języka Java. Musisz dodać do swojej aplikacji na Androida wymienione poniżej pliki jar. Aby to zrobić, umieść wymienione poniżej pliki jar w folderze /assets w katalogu głównym aplikacji. Gdy dokument będzie starszy, sprawdź też dostępność nowych wersji.

Zaimportuj pliki jar biblioteki klienta interfejsów API Google i powiązane z nimi rozszerzenia na Androida (wszystkie części google-api-java-client-1.4.1-beta.zip):

  • google-api-client-1.4.1-beta.jar
  • google-api-client-extensions-android2-1.4.1-beta.jar
  • google-api-client-googleapis-1.4.1-beta.jar
  • google-api-client-googleapis-extensions-android2-1.4.1-beta.jar

Zaimportuj plik jar przeznaczony dla Listy zadań:

Zależności importu (cała część pliku google-api-java-client-1.4.1-beta.zip):

  • Commons-codec-1.3.jar
  • gson-1.6.jar
  • guava-r09.jar
  • httpclient-4.0.3.jar
  • httpcore-4.0.1.jar
  • jackson-core-asl-1.6.7.jar
  • jsr305-1.3.9.jar

Konta Google na Androidzie

Od Androida 2.0 AccountManager zarządza kontami zarejestrowanymi w Twoim środowisku, które są wymienione w sekcji Ustawienia > Konta i synchronizację. W szczególności obsługuje przepływ autoryzacji i może generować tokeny autoryzacji wymagane do uzyskiwania dostępu do danych za pomocą interfejsów API.

Konta zarejestrowane w Twoim środowisku Androida
Konta zarejestrowane w Twoim środowisku Androida

Aby móc używać usługi AccountManager do pobierania kont i żądania tokenów autoryzacji, musisz dodać te uprawnienia w pliku manifestu aplikacji na Androida:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

Aby uzyskać dostęp do Listy zadań, możesz użyć w usłudze AccountManager konta Google. AccountManager zarządza nie tylko kontami Google, ale też kontami innych dostawców. Aby uzyskać dostęp do kont Google, użyj poniższego kodu:

AccountManager accountManager = AccountManager.get(activity);
Account[] accounts = accountManager.getAccountsByType("com.google");

Z kolei biblioteka klienta interfejsów API Google dla języka Java zawiera interfejs GoogleAccountManager, który obsługuje tylko konta Google:

GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity);
Account[] accounts = googleAccountManager.getAccounts();

Jeśli na urządzeniu z Androidem dostępnych jest więcej niż jedno konto Google, poproś użytkownika o podanie konta, którego chce używać, w oknie, które może wyglądać tak:

Okno wyboru konta
Okno wyboru konta

Możesz utworzyć takie okno, korzystając z poniższego kodu Switch/case w metodzie onCreateDialog w Twojej aktywności:

@Override
protected Dialog onCreateDialog(int id) {
  switch (id) {
    case DIALOG_ACCOUNTS:
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setTitle("Select a Google account");
      final Account[] accounts = accountManager.getAccountsByType("com.google");
      final int size = accounts.length;
      String[] names = new String[[]size];
      for (int i = 0; i < size; i++) {
        names[[]i] = accounts[[]i].name;
      }
      builder.setItems(names, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
          // Stuff to do when the account is selected by the user
          gotAccount(accounts[[]which]);
        }
      });
      return builder.create();
  }
  return null;
}

Wywołanie showDialog(DIALOG_ACCOUNTS) spowoduje wyświetlenie okna wyboru konta.

Proces autoryzacji interfejsów API Google w Androidzie

Gdy użytkownik wybierze konto, możemy poprosić menedżera AccountManager o wydanie tokena dostępu OAuth 2.0 dla interfejsu Task API. W tym celu należy wywołać metodę AccountManager.getAuthToken(). Podczas wywoływania AccountManager.getAuthToken() funkcji AccountManager kontaktuje się z punktem końcowym autoryzacji interfejsów API Google. Gdy AccountManager pobierze token autoryzacji, uruchomi metodę AccountManagerCallback zdefiniowanej w wywołaniu metody:

manager.getAuthToken(account, AUTH_TOKEN_TYPE, null, activity, new AccountManagerCallback<Bundle>() {
    public void run(AccountManagerFuture<Bundle> future) {
      try {
        // If the user has authorized your application to use the tasks API
        // a token is available.
        String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
        // Now you can use the Tasks API...
        useTasksAPI(token);
      } catch (OperationCanceledException e) {
        // TODO: The user has denied you access to the API, you should handle that
      } catch (Exception e) {
        handleException(e);
      }
    }
  }, null);

Jak może już wiesz, AccountManager na Androidzie oferuje eksperymentalną obsługę protokołu OAuth 2.0. Musisz tylko poprzedzić zakres interfejsu API, do którego chcesz uzyskać dostęp, za pomocą oauth2: podczas konfigurowania ustawienia AUTH_TOKEN_TYPE. W przypadku interfejsu Tasks API możesz więc użyć:

String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";

Problem w przypadku użycia powyższej wartości jako AUTH_TOKEN_TYPE polega na tym, że ciąg oauth2:https://www.googleapis.com/auth/tasks będzie wyświetlany w oknie autoryzacji jako nazwa usługi Google, do której chcesz uzyskać dostęp. Aby obejść ten problem, w interfejsie Tasks API istnieją specjalne aliasy AUTH_TOKEN_TYPE, które są zrozumiałe dla człowieka. Są one równoważne z użyciem zakresu OAuth 2.0. Na przykład możesz użyć:

String AUTH_TOKEN_TYPE = "Manage your tasks";

Możesz też użyć aliasu AUTH_TOKEN_TYPE Wyświetlanie zadań, które są odpowiednikiem interfejsu Tasks API w trybie tylko do odczytu. zakres: oauth2:https://www.googleapis.com/auth/tasks.readonly.

Podczas wywoływania AccountManager.getAuthToken() funkcji AccountManager sprawdzi, czy aplikacja ma uprawnienia dostępu do interfejsu Tasks API. Jeśli Twoja aplikacja nie została jeszcze autoryzowana, Activity uruchamia AccountManager, co wyświetla użytkownikowi okno autoryzacji, w którym użytkownik może zezwolić lub odmówić korzystania z interfejsu Tasks API na swoim koncie.

Okno autoryzacji
Okno autoryzacji

Jeśli użytkownik odmówi aplikacji dostępu do interfejsu Tasks API, podczas wywołania future.getResult() zostanie zgłoszony wyjątek OperationCanceledException. Musisz to zrobić z głową, na przykład prosząc o ponowne wybranie konta lub wyświetlając komunikat z przyciskiem umożliwiającym ponowną autoryzację dostępu.

Identyfikowanie aplikacji i konfigurowanie obiektu usługi Tasks API

Teraz gdy Twoja aplikacja ma autoryzację dostępu do interfejsu Tasks API i otrzymała token dostępu, potrzebujesz także klucza interfejsu API, który musisz uzyskać z projektu w konsoli interfejsów API Google, ponieważ jest to niezbędne do wykonywania wywołań interfejsu Tasks API. Aby to zrobić:

  1. Utwórz projekt lub użyj istniejącego
  2. Włącz w projekcie interfejs Tasks API, przełączając ten interfejs na .
  3. Klucz interfejsu API można znaleźć w sekcji Dostęp do interfejsu API > Prosty dostęp API > Klucz interfejsu API

Uzyskiwanie klucza interfejsu API z konsoli interfejsów API
Uzyskiwanie klucza interfejsu API z konsoli interfejsów API

Klucz interfejsu API jest wymagany, ponieważ identyfikuje aplikację, a tym samym umożliwia interfejsowi API odejmowanie limitu i korzystanie z reguł limitów zdefiniowanych dla Twojego projektu. Musisz podać klucz interfejsu API w obiekcie usługi Lista zadań:

useTasksAPI(String accessToken) {
  // Setting up the Tasks API Service
  HttpTransport transport = AndroidHttp.newCompatibleTransport();
  AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(accessToken);
  Tasks service = new Tasks(transport, accessProtectedResource, new JacksonFactory());
  service.accessKey = INSERT_YOUR_API_KEY;
  service.setApplicationName("Google-TasksSample/1.0");

  // TODO: now use the service to query the Tasks API
}

Token accessToken jest ważny tylko przez określony czas, więc po jego wygaśnięciu musisz uzyskać nowy. Możesz to zrobić na 2 sposoby:

  • Wyślij żądanie accessToken do AccountManagera za każdym razem, gdy wysyłasz żądania do interfejsu API. To rozwiązanie jest dopuszczalne, ponieważ AccountManager przechowuje token w pamięci podręcznej.
  • Używaj obiektu accessToken, aż pojawi się błąd 403. Wtedy poprosimy Cię o podanie nowego tokena dla AccountManagera.

Manipulowanie zadaniami przy użyciu interfejsu API

W tym momencie powinien być już w pełni skonfigurowany obiekt usługi interfejsu Tasks API, którego można użyć do wysyłania zapytań do interfejsu API zgodnie z przewodnikiem dla programistów interfejsu Tasks API, na przykład:

// Getting all the Task lists
List taskLists = service.tasklists.list().execute().items;

// Getting the list of tasks in the default task list
List tasks = service.tasks.list("@default").execute().items;

// Add a task to the default task list
Task task = new Task();
task.title = "New Task";
task.notes = "Please complete me";
task.due = "2010-10-15T12:00:00.000Z";
Task result = service.tasks.insert("@default", task).execute();

Nie zapomnij dodać uprawnień dostępu do internetu do pliku manifestu aplikacji na Androida. W przeciwnym razie powyższe żądania do punktów końcowych interfejsu Tasks API zakończą się niepowodzeniem:

<uses-permission android:name="android.permission.INTERNET" />

Przykładowa aplikacja

Niedawno dodaliśmy nowy przykład do biblioteki klienta interfejsów API Google dla przykładowego repozytorium w języku Java, aby ułatwić rozpoczęcie korzystania z interfejsu Tasks API i protokołu OAuth 2.0 na urządzeniach z Androidem. Przykładem jest prosta, ale w pełni działająca aplikacja na Androida, która żąda autoryzacji przy użyciu interfejsu Tasks API i wyświetla zadania z domyślnej listy zadań w widoku ListView.

Wyświetlanie zadań na domyślnej liście zadań w widoku listy
Wyświetlanie zadań na domyślnej liście zadań w widoku listy

Wykonaj te instrukcje, aby uruchomić przykład, i prześlij swoje opinie lub pytania na Forum Google Tasks API.