Warnung: Dieses Dokument ist veraltet. Informationen zur Autorisierung von Android-Apps mit OAuth 2.0 finden Sie in der Autorisierungsdokumentation für Android-Play-Dienste.
In diesem Dokument wird beschrieben, wie Sie die Tasks API mit OAuth 2.0 auf Android-Geräten verwenden. Darin werden die Autorisierungsmechanismen zum Zugriff auf die Google Tasks eines Nutzers beschrieben und wie Sie ein sofort einsatzbereites Tasks API-Dienstobjekt in Ihrer Android-Anwendung verwenden können.
Damit Ihre Android-Anwendung die Tasks API verwenden kann, sind mehrere Schritte erforderlich:
- Wählen Sie das Google-Konto des Nutzers aus.
- OAuth 2.0-Zugriffstoken vom AccountManager für die Task API abrufen
- Projekt identifizieren und Tasks-Dienstobjekt einrichten
- Aufrufe an die Tasks API ausführen
Clientbibliothek von Google importieren
In den Beispielen in diesem Dokument wird die Google APIs-Clientbibliothek für Java verwendet. Sie müssen Ihrer Android-Anwendung die folgenden JAR-Dateien hinzufügen. Legen Sie dazu die unten aufgeführten JAR-Dateien im Stammverzeichnis Ihrer Android-Anwendung im Ordner /assets ab. Prüfen Sie auch nach neuen Versionen, da dieses Dokument mit der Zeit veraltet.
Importieren Sie die JAR-Dateien der Clientbibliothek für Google APIs und die zugehörigen Android-Erweiterungen (alle Teil von 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
Importieren Sie das Tasks-spezifische JAR-File:
Abhängigkeiten importieren (alle Teil von 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
Google-Konten unter Android
Seit Android 2.0 verwaltet der AccountManager die Konten, die Sie in Ihrer Umgebung registriert haben. Diese Konten sind unter Einstellungen > Konten und Synchronisierung aufgeführt. Insbesondere verarbeitet er den Autorisierungsablauf und kann Autorisierungstokens generieren, die für den Zugriff auf Daten über APIs erforderlich sind.

Damit Sie den AccountManager verwenden können, um Konten abzurufen und Autorisierungstokens anzufordern, müssen Sie Ihrem Android-Anwendungsmanifest die folgenden Berechtigungen hinzufügen:
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
Sie können den AccountManager verwenden, um das Google-Konto abzurufen, für das Sie auf Tasks zugreifen möchten. Der AccountManager verwaltet nicht nur Google-Konten, sondern auch Konten anderer Anbieter. Daher musst du Google-Konten mit dem folgenden Code anfordern:
AccountManager accountManager = AccountManager.get(activity); Account[] accounts = accountManager.getAccountsByType("com.google");
Alternativ ist in der Google APIs-Clientbibliothek für Java ein GoogleAccountManager enthalten, der nur Google-Konten verarbeitet:
GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity); Account[] accounts = googleAccountManager.getAccounts();
Wenn auf dem Android-Gerät mehrere Google-Konten verfügbar sind, sollten Sie den Nutzer in einem Dialogfeld auffordern, das Konto auszuwählen, das er verwenden möchte. Dieses Dialogfeld könnte so aussehen:

Sie können ein solches Dialogfeld mit dem folgenden Switch-/Case-Code in der Methode onCreateDialog Ihrer Aktivität erstellen:
@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; }
Wenn du showDialog(DIALOG_ACCOUNTS) aufrufst, wird das Kontoauswahldialogfeld angezeigt.
Autorisierungsablauf für Google APIs auf Android-Geräten
Nachdem der Nutzer ein Konto ausgewählt hat, können wir den AccountManager bitten, ein OAuth 2.0-Zugriffstoken für die Task API auszustellen. Rufen Sie dazu die Methode AccountManager.getAuthToken() auf. Während des Aufrufs von AccountManager.getAuthToken() kümmert sich der AccountManager um die Kontaktaufnahme mit dem Autorisierungsendpunkt der Google APIs. Nachdem der AccountManager das Autorisierungstoken abgerufen hat, wird der AccountManagerCallback ausgeführt, den Sie im Methodenaufruf definiert haben:
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);
Wie Sie vielleicht schon wissen, unterstützt der Android-AccountManager experimentell OAuth 2.0. Sie müssen beim Festlegen von AUTH_TOKEN_TYPE nur den Bereich der API, auf die Sie zugreifen möchten, mit oauth2: vorangestellt angeben. Für die Tasks API können Sie Folgendes verwenden:
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";
Wenn Sie den obigen Wert als AUTH_TOKEN_TYPE verwenden, wird im Autorisierungsdialogfeld der String oauth2:https://www.googleapis.com/auth/tasks als Name des Google-Produkts angezeigt, auf das Sie zugreifen möchten. Um dieses Problem zu umgehen, gibt es spezielle, visuell lesbare Aliasse für AUTH_TOKEN_TYPE für die Tasks API. Sie entsprechen der Verwendung des OAuth 2.0-Bereichs. Sie können beispielsweise Folgendes verwenden:
String AUTH_TOKEN_TYPE = "Manage your tasks";
Sie können auch den Alias AUTH_TOKEN_TYPE Aufgaben ansehen verwenden, der dem Lesezugriffsbereich der Tasks API entspricht: oauth2:https://www.googleapis.com/auth/tasks.readonly.
Beim Aufruf von AccountManager.getAuthToken() prüft der AccountManager, ob Ihre Anwendung für den Zugriff auf die Tasks API autorisiert wurde. Wenn Ihre Anwendung noch nicht autorisiert wurde, wird vom AccountManager eine Aktivität gestartet, über die dem Nutzer ein Autorisierungsdialogfeld angezeigt wird, in dem er Ihrer Anwendung die Zulassung oder Verweigerung der Verwendung der Tasks API in seinem Konto erteilen kann.

Wenn der Nutzer Ihrer Anwendung den Zugriff auf die Tasks API verweigert, wird beim Aufruf von future.getResult() eine OperationCanceledException geworfen. Sie sollten dies möglichst reibungslos handhaben, indem Sie beispielsweise den Nutzer bitten, das Konto noch einmal auszuwählen, oder eine Nachricht mit einer Schaltfläche anzeigen, über die der Zugriff noch einmal autorisiert werden kann.
Anwendung identifizieren und Tasks API-Dienstobjekt einrichten
Ihre Anwendung ist jetzt für den Zugriff auf die Tasks API autorisiert und hat ein Zugriffstoken erhalten. Sie benötigen jedoch auch einen API-Schlüssel, den Sie in der Google API Console für ein Projekt abrufen müssen. Er ist für Tasks API-Aufrufe erforderlich. Gehen Sie dazu so vor:
- Projekt erstellen oder vorhandenes verwenden
- Aktivieren Sie die Tasks API für Ihr Projekt, indem Sie den Schalter für die Tasks API auf AN stellen.
- Den API-Schlüssel finden Sie unter API-Zugriff > Einfacher API-Zugriff > API-Schlüssel.

Der API-Schlüssel ist obligatorisch, da er Ihre Anwendung identifiziert und es der API somit ermöglicht, das Kontingent abzuziehen und die für Ihr Projekt definierten Kontingentregeln zu verwenden. Sie müssen den API-Schlüssel im Dienstobjekt für Tasks angeben:
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 }
Das accessToken ist nur für eine bestimmte Zeit gültig. Wenn es abläuft, musst du ein neues abrufen. Es gibt zwei Möglichkeiten, das zu tun:
- Fordere jedes Mal, wenn du Anfragen über die API sendest, einen accessToken vom AccountManager an. Da das Token vom AccountManager im Cache gespeichert wird, ist diese Lösung akzeptabel.
- Verwende deinen accessToken, bis du den Fehler 403 erhältst. Dann musst du den AccountManager um ein neues Token bitten.
Aufgaben über die API bearbeiten
Sie sollten jetzt ein vollständig eingerichtetes Tasks API-Dienstobjekt haben, mit dem Sie die API gemäß dem Entwicklerleitfaden für die Tasks API abfragen können, z. B.:
// 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();
Denken Sie daran, Ihrem Android-Anwendungsmanifest die Berechtigung zum Zugriff auf das Internet hinzuzufügen. Andernfalls schlagen die oben genannten Anfragen an die Tasks API-Endpunkte fehl:
<uses-permission android:name="android.permission.INTERNET" />
Beispielanwendung
Wir haben dem Beispiel-Repository der Google APIs-Clientbibliothek für Java vor Kurzem ein neues Beispiel hinzugefügt, das Ihnen den Einstieg in die Tasks API und OAuth 2.0 auf Android erleichtert. Das Beispiel ist eine einfache, aber voll funktionsfähige Android-Anwendung, die die Autorisierung zur Verwendung der Tasks API anfordert und die Aufgaben der Standardaufgabenliste in einer ListView anzeigt.

Folgen Sie dieser Anleitung, um das Beispiel auszuführen. Sie können uns auch gerne Feedback oder Fragen im Google Tasks API-Forum senden.