Korzystanie z interfejsu API Listy zadań na Androidzie

Ostrzeżenie: ten dokument został wycofany. Informacje o autoryzowaniu aplikacji na Androida przy użyciu protokołu OAuth 2.0 znajdziesz w dokumentacji autoryzacji Usług Google Play.

Ten dokument wyjaśnia, jak używać interfejsu Tasks API z protokołem OAuth 2.0 na Androidzie. Opisano w nich mechanizmy autoryzacji, które umożliwiają dostęp do Listy zadań Google użytkownika, oraz sposoby przygotowania do użycia obiektu usługi interfejsu Tasks API w aplikacji na Androida.

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

  1. Wybierz konto Google użytkownika
  2. Uzyskaj token dostępu OAuth 2.0 z AccountManager dla interfejsu Task API
  3. Zidentyfikuj projekt i skonfiguruj obiekt usługi Lista zadań.
  4. Wykonywanie wywołań interfejsu Tasks API

Importowanie biblioteki klienta Google

Przykładowe opisy w tym dokumencie korzystają z biblioteki klienta interfejsów API Google dla języka Java. Musisz dodać następujące pliki JAR do aplikacji na Androida. W tym celu umieść wymienione poniżej pliki jar i umieść je w folderze /assets w katalogu głównym aplikacji na Androida. W miarę starzenia się dokumentu sprawdź dostępność nowych wersji.

Zaimportuj pliki jar biblioteki klienta interfejsów API Google i jej rozszerzenia na Androida (wszystkie części pliku 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 specyficzny dla Listy zadań:

Importowanie zależności (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 to AccountManager zarządza kontami zarejestrowanymi w Twoim środowisku, które znajdują się w sekcji Ustawienia > Konta i synchronizacja. W szczególności obsługuje ona proces autoryzacji i może generować tokeny autoryzacji wymagane do uzyskania dostępu do danych za pomocą interfejsów API.

kont zarejestrowanych w Twoim środowisku Androida,
kont zarejestrowanych w Twoim środowisku Androida,

Aby móc używać narzędzia AccountManager do pobierania kont i żądania tokenów autoryzacyjnych, musisz dodać te uprawnienia do pliku manifestu aplikacji na Androida:

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

Możesz skorzystać z AccountManager, aby znaleźć konto Google, na którym chcesz mieć dostęp do Listy zadań. AccountManager zarządza nie tylko kontami Google, ale też kontami innych dostawców. Dlatego musisz poprosić o dostęp do kont Google. Aby to zrobić, użyj tego kodu:

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

Do biblioteki klienta interfejsów API Google dla języka Java dostępna jest też funkcja GoogleAccountManager, która obsługuje tylko konta Google:

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

Jeśli na urządzeniu z Androidem jest dostępnych więcej kont Google, poproś użytkownika o wybranie konta, którego chce użyć, 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 przełącznika/case w metodzie onCreateDialog 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 metody showDialog(DIALOG_ACCOUNTS) spowoduje wyświetlenie okna wyboru konta.

Proces autoryzacji interfejsów API Google na Androidzie

Gdy użytkownik wybrał konto, możemy poprosić menedżera AccountManager o wygenerowanie tokena dostępu OAuth 2.0 dla interfejsu Task API. W tym celu należy wywołać metodę AccountManager.getAuthToken(). Podczas wywołania AccountManager.getAuthToken() AccountManager skontaktuje się z punktem końcowym autoryzacji interfejsów API Google. Gdy AccountManager pobierze token autoryzacji, uruchomi funkcję AccountManagerCallback zdefiniowany przez Ciebie 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 być może wiesz, Android AccountManager ma eksperymentalną obsługę protokołu OAuth 2.0. Wystarczy, że podczas ustawiania AUTH_TOKEN_TYPE umieść przed zakresem interfejsu API, do którego chcesz uzyskać dostęp, ciągiem oauth2:. W przypadku interfejsu Tasks API możesz użyć:

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

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

String AUTH_TOKEN_TYPE = "Manage your tasks";

Możesz też użyć aliasu AUTH_TOKEN_TYPE Wyświetl zadania, który odpowiada zakresowi tylko do odczytu interfejsu Tasks API: oauth2:https://www.googleapis.com/auth/tasks.readonly.

Podczas wywołania AccountManager.getAuthToken() AccountManager sprawdzi, czy aplikacja została autoryzowana do uzyskiwania dostępu do interfejsu Tasks API. Jeśli aplikacja nie została jeszcze autoryzowana, za pomocą AccountManager można uruchomić działanie, które wyświetli użytkownikowi okno autoryzacji. Dzięki temu użytkownik będzie mógł Zezwolić lub Odmówić dostępu przez aplikację do 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 funkcji OperationCanceledException zostanie zgłoszony OperationCanceledException. Należy zareagować w sposób płynny, na przykład prosząc o ponowne wybranie konta lub wyświetlając komunikat z przyciskiem ponownego autoryzowania dostępu.

Identyfikowanie aplikacji i konfigurowanie obiektu usługi Tasks API

Gdy Twoja aplikacja ma autoryzację dostępu do interfejsu Tasks API i otrzymał token dostępu, potrzebujesz też klucza API, który musisz uzyskać z projektu w Konsoli interfejsów API Google, ponieważ jest on wymagany do wykonywania wywołań tego interfejsu. Aby to zrobić:

  1. Utwórz projekt lub użyj istniejącego
  2. Włącz interfejs Tasks API w projekcie, ustawiając przełącznik interfejsu Tasks API w pozycji WŁ.
  3. Klucz interfejsu API można znaleźć w sekcji API Access > Simple API Access > API Key (Dostęp API > Prosty dostęp do 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ę, dzięki czemu interfejs API może odliczać limit i korzystać z reguł limitu zdefiniowanych dla projektu. Musisz podać klucz interfejsu API w obiekcie usługi Listy 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
}

Parametr accessToken jest ważny tylko przez określony czas, więc gdy utraci ważność, musisz uzyskać nowy. Można sobie z tym radzić na 2 sposoby:

  • Żądaj accessToken do obiektu AccountManager za każdym razem, gdy przesyłasz żądanie za pomocą interfejsu API. Ponieważ AccountManager zapisuje token w pamięci podręcznej, to rozwiązanie jest dopuszczalne.
  • Nie przestawaj używać accessToken do momentu wystąpienia błędu 403, kiedy to zechcesz podać nowy token w usłudze AccountManager.

Manipulowanie Listami zadań przy użyciu interfejsu API

W tym miejscu powinien być już w pełni skonfigurowany obiekt usługi interfejsu Tasks API, którego możesz używać 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ć do pliku manifestu aplikacji na Androida uprawnienia dostępu do internetu. 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

Do biblioteki klienta interfejsów API Google dla Javy dodaliśmy ostatnio nowy przykład, który ma pomóc Ci rozpocząć pracę z interfejsami Tasks API i protokołem OAuth 2.0 na Androidzie. Przykład to prosta, ale w pełni działająca aplikacja na Androida, która żąda autoryzacji do korzystania z 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 ListView
Wyświetlanie zadań na domyślnej liście zadań w widoku ListView

Wykonaj te instructions, aby uruchomić przykład, a następnie opublikuj swoją opinię lub pytania na forum interfejsu Google Tasks API.