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:
- Wybierz konto Google użytkownika
- Uzyskiwanie tokena dostępu OAuth 2.0 od AccountManager dla interfejsu Task API
- Zidentyfikowanie projektu i skonfigurowanie obiektu usługi Lista zadań
- 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](https://developers.google.cn/static/tasks/images/Accounts_On_Android.png?hl=pl)
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](https://developers.google.cn/static/tasks/images/Android_Choose_Account.png?hl=pl)
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](https://developers.google.cn/static/tasks/images/Android_Auth_Dialog.png?hl=pl)
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ć:
- Utwórz projekt lub użyj istniejącego
- Włącz w projekcie interfejs Tasks API, przełączając ten interfejs na WŁ.
- 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](https://developers.google.cn/static/tasks/images/APIs_Console_API_Key.png?hl=pl)
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 ListtaskLists = 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](https://developers.google.cn/static/tasks/images/Android_Sample_Display_Tasks.png?hl=pl)
Wykonaj te instrukcje, aby uruchomić przykład, i prześlij swoje opinie lub pytania na Forum Google Tasks API.