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.

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:

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.

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

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
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.

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