Warnung: Dieses Dokument wurde eingestellt. Informationen zur Autorisierung von Android-Apps mit OAuth 2.0 finden Sie in der Dokumentation zur Autorisierung für Android Play-Dienste
In diesem Dokument wird erläutert, wie die Tasks API mit OAuth 2.0 unter Android verwendet wird. Darin werden die Autorisierungsmechanismen für den Zugriff auf die Google Tasks-Aufgaben eines Nutzers beschrieben und wie Sie in Ihrer Android-Anwendung ein einsatzbereites Tasks API-Dienstobjekt haben können.
Damit Ihre Android-Anwendung die Tasks API verwenden kann, sind mehrere Schritte erforderlich:
- Wählen Sie das Google-Konto des Nutzers aus.
- Rufen Sie von AccountManager ein OAuth 2.0-Zugriffstoken für die Task API ab.
- Projekt identifizieren und das Dienstobjekt „Tasks“ einrichten
- Tasks API aufrufen
Importieren der Clientbibliothek von Google
In den Beispielen in diesem Dokument wird die Google API-Clientbibliothek für Java verwendet. Sie müssen Ihrer Android-App die folgenden JAR-Dateien hinzufügen. Dazu legen Sie die unten aufgeführten JAR-Dateien im Ordner /assets im Stammverzeichnis Ihrer Android-App ab. Suchen Sie auch nach neuen Versionen, wenn dieses Dokument älter wird.
Importieren Sie die JAR-Dateien der Google API-Clientbibliothek und ihre 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 die Tasks-spezifische JAR-Datei:
Abhängigkeiten importieren (alle Bestandteile 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 und die unter Einstellungen > Konten und synchronisieren. Insbesondere steuert er den Autorisierungsablauf und kann Autorisierungstokens generieren, die für den Zugriff auf Daten über APIs erforderlich sind.
![Konten, die in Ihrer Android-Umgebung registriert sind](https://developers.google.cn/static/tasks/images/Accounts_On_Android.png?hl=de)
Um den AccountManager zum Abrufen von Konten und zum Anfordern von Autorisierungstokens verwenden zu können, müssen Sie die folgenden Berechtigungen zu Ihrem Android-Anwendungsmanifest hinzufügen:
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
Über den AccountManager können Sie das Google-Konto abrufen, für das Sie auf Tasks zugreifen möchten. Der AccountManager verwaltet nicht nur Google-Konten, sondern auch Konten anderer Anbieter. Daher müssen Sie mithilfe des folgenden Codes ausdrücklich nach Google-Konten fragen:
AccountManager accountManager = AccountManager.get(activity); Account[] accounts = accountManager.getAccountsByType("com.google");
Alternativ enthält die Google API-Clientbibliothek für Java einen GoogleAccountManager, der nur Google-Konten verarbeitet:
GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity); Account[] accounts = googleAccountManager.getAccounts();
Wenn auf dem Android-Gerät mehr als ein Google-Konto verfügbar ist, sollten Sie den Nutzer über ein Dialogfeld auffordern, das folgendermaßen aussehen könnte:
![Dialogfeld zum Auswählen des Kontos](https://developers.google.cn/static/tasks/images/Android_Choose_Account.png?hl=de)
Sie könnten ein solches Dialogfeld erstellen, indem Sie in der onCreateDialog-Methode Ihrer Aktivität den folgenden Code für die Groß-/Kleinschreibung verwenden:
@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; }
Durch Aufrufen von showDialog(DIALOG_ACCOUNTS) wird das Dialogfeld zur Kontoauswahl angezeigt.
Google APIs-Autorisierungsablauf unter Android
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. Dazu wird die Methode AccountManager.getAuthToken() aufgerufen. Während des Aufrufs AccountManager.getAuthToken() wird der AccountManager dafür zuständig sein, den Autorisierungsendpunkt der Google APIs zu kontaktieren. Wenn AccountManager das Autorisierungstoken abgerufen hat, führt er den AccountManagerCallback aus, 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 bereits wissen, bietet der Android-AccountManager experimentelle Unterstützung für OAuth 2.0. Sie müssen dem Bereich der API, auf die Sie zugreifen möchten, lediglich oauth2: voranstellen, wenn Sie AUTH_TOKEN_TYPE festlegen. Für die Tasks API können Sie also Folgendes verwenden:
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";
Wenn Sie den obigen Wert als AUTH_TOKEN_TYPE verwenden, besteht das Problem darin, dass der String oauth2:https://www.googleapis.com/auth/tasks im Autorisierungsdialog als Name des Google-Produkts angezeigt wird, auf das Sie zugreifen möchten. Um dieses Problem zu umgehen, gibt es spezielle, visuell lesbare AUTH_TOKEN_TYPE-Aliasse 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 verwenden. Aufgaben ansehen (äquivalent zur schreibgeschützten Tasks API) Bereich: oauth2:https://www.googleapis.com/auth/tasks.readonly.
Während der Ausführung von AccountManager.getAuthToken() überprüft der AccountManager, ob Ihre Anwendung für den Zugriff auf die Tasks API autorisiert ist. Wenn Ihre Anwendung noch nicht autorisiert wurde, wird vom AccountManager eine Activity (Aktivität) gestartet. Daraufhin wird dem Nutzer ein Autorisierungsdialogfeld angezeigt, über das der Nutzer Zulassen oder Ablehnen kann, dass Ihre Anwendung die Tasks API für sein Konto verwendet.
![Dialogfeld „Autorisierung“](https://developers.google.cn/static/tasks/images/Android_Auth_Dialog.png?hl=de)
Wenn der Nutzer Ihrer Anwendung den Zugriff auf die Tasks API verweigert, wird während des Aufrufs future.getResult() eine OperationCanceledException ausgelöst. Dies sollten Sie souverän handhaben, indem Sie beispielsweise zur erneuten Auswahl des Kontos auffordern oder eine Meldung mit einer Schaltfläche zum erneuten Autorisieren des Zugriffs anzeigen.
Anwendung identifizieren und das Tasks API-Dienstobjekt einrichten
Da Ihre Anwendung nun autorisiert ist, auf die Tasks API zuzugreifen, und dass ihr ein Zugriffstoken zugewiesen wurde, benötigen Sie auch einen API-Schlüssel, den Sie von einem Projekt in der Google APIs Console abrufen müssen, da er für Tasks API-Aufrufe obligatorisch ist. Gehen Sie dazu folgendermaßen vor:
- Projekt erstellen oder vorhandenes Projekt verwenden
- Aktivieren Sie die Tasks API für Ihr Projekt, indem Sie den Schalter für die Tasks API auf EIN setzen.
- Den API-Schlüssel findest du unter API Access > Einfacher API-Zugriff > API-Schlüssel
![API-Schlüssel aus der APIs-Konsole abrufen](https://developers.google.cn/static/tasks/images/APIs_Console_API_Key.png?hl=de)
Der API-Schlüssel ist obligatorisch, da er Ihre Anwendung identifiziert. Er ermöglicht der API, Kontingente 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 einen bestimmten Zeitraum gültig. Nach Ablauf der Frist müssen Sie ein neues anfordern. Dafür gibt es zwei Möglichkeiten:
- Fordern Sie jedes Mal ein accessToken an AccountManager an, wenn Sie eine Anfrage über die API stellen. Da der AccountManager das Token zwischenspeichert, ist diese Lösung akzeptabel.
- Verwenden Sie das accessToken so lange, bis Sie den Fehler 403 erhalten. Fordern Sie dann ein neues Token für den AccountManager an.
Aufgaben über die API bearbeiten
Jetzt sollten Sie über ein vollständig eingerichtetes Tasks API-Dienstobjekt verfügen, mit dem Sie die API gemäß dem Tasks API-Entwicklerhandbuch abfragen können. Beispiel:
// 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();
Vergessen Sie nicht, Ihrem Android-Anwendungsmanifest die Berechtigung für den Internetzugriff hinzuzufügen. Andernfalls schlagen die obigen Anfragen an die Tasks API-Endpunkte fehl:
<uses-permission android:name="android.permission.INTERNET" />
Beispielanwendung
Wir haben dem Beispiel-Repository für die Google APIs-Clientbibliothek vor Kurzem ein neues Beispiel hinzugefügt, um Ihnen den Einstieg in die Tasks API und OAuth 2.0 unter Android zu erleichtern. Bei dem Beispiel handelt es sich um eine einfache, aber voll funktionsfähige Android-Anwendung, die eine Autorisierung anfordert, um die Tasks API zu verwenden und die Aufgaben der Standardaufgabenliste in einer Listenansicht anzuzeigen.
![Aufgaben in der Standardaufgabenliste in einer Listenansicht anzeigen](https://developers.google.cn/static/tasks/images/Android_Sample_Display_Tasks.png?hl=de)
Folgen Sie dieser Anleitung, um das Beispiel zu starten. Zögern Sie nicht, Feedback oder Fragen im Google Tasks API-Forum zu posten.