Uyarı: Bu dokümanın desteği sonlandırılmıştır. Android uygulamalarını OAuth 2.0 kullanarak yetkilendirme hakkında bilgi edinmek için lütfen Android Play Hizmetleri Yetkilendirme dokümanlarına göz atın.
Bu belgede, Android'de Tasks API'nin OAuth 2.0 ile nasıl kullanılacağı açıklanmaktadır. Bu makalede, kullanıcının Google Görevler'ine erişim elde etmek için kullanılacak yetkilendirme mekanizmaları ve Android uygulamanızda hazır bir Tasks API hizmet nesnesine nasıl sahip olabileceğiniz açıklanmaktadır.
Android uygulamanızın Tasks API'yi kullanabilmesi için birkaç adım gereklidir. Aşağıdakileri yapmanız gerekir:
- Kullanıcının Google Hesabı'nı seçin
- Task API için AccountManager'dan OAuth 2.0 erişim jetonu alma
- Projenizi tanımlayın ve Görevler hizmet nesnesini oluşturun
- Tasks API'ye çağrı yapma
Google'ın istemci kitaplığını içe aktarma
Bu belgede bulacağınız örneklerde Java için Google API'leri istemci kitaplığı kullanılmaktadır. Android uygulamanıza aşağıdaki jar dosyalarını eklemeniz gerekir. Bunun için aşağıda listelenen jar dosyalarını Android uygulamanızın kökündeki /assets klasörüne yerleştirin. Ayrıca, bu doküman eskidikçe yeni sürümleri kontrol edin.
Google API'leri istemci kitaplığı jar dosyalarını ve Android uzantılarını (tümü google-api-java-client-1.4.1-beta.zip dosyasının parçasıdır) içe aktarın:
- 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
Görevler'e özel jar dosyasını içe aktarın:
Bağımlılıkları içe aktarın (google-api-java-client-1.4.1-beta.zip'in tümünü):
- 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
Android'de Google Hesapları
Android 2.0'dan beri AccountManager, ortamınıza kaydettiğiniz hesapları (Ayarlar > Hesaplar ve senkronizasyon bölümünde listelenenler) yönetir. Özellikle, yetkilendirme akışını yönetir ve API'leri kullanarak verilere erişmek için gereken yetkilendirme jetonlarını oluşturabilir.

Hesap almak ve yetkilendirme jetonları istemek için AccountManager'ı kullanabilmek üzere Android uygulama manifest dosyanıza aşağıdaki izinleri eklemeniz gerekir:
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
Görevler'e erişmek istediğiniz Google Hesabı'nı almak için AccountManager'ı kullanabilirsiniz. AccountManager yalnızca Google hesaplarını değil, diğer tedarikçi firmaların hesaplarını da yönetir. Bu nedenle, aşağıdaki kodu kullanarak Google Hesapları'nı özellikle istemeniz gerekir:
AccountManager accountManager = AccountManager.get(activity); Account[] accounts = accountManager.getAccountsByType("com.google");
Alternatif olarak, Java için Google API'leri istemci kitaplığı yalnızca Google Hesaplarını yöneten bir GoogleAccountManager ile birlikte gelir:
GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity); Account[] accounts = googleAccountManager.getAccounts();
Android cihazda birden fazla Google Hesabı varsa kullanıcıdan kullanmak istediği hesabı şuna benzer bir iletişim kutusuyla istemeniz gerekir:

Etkinliğinizin onCreateDialog yönteminde aşağıdaki switch/case kodunu kullanarak böyle bir iletişim kutusu oluşturabilirsiniz:
@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; }
showDialog(DIALOG_ACCOUNTS) çağrısı yapıldığında hesap seçici iletişim kutusu gösterilir.
Android'de Google API'leri yetkilendirme akışı
Kullanıcı bir hesap seçtiğine göre AccountManager'dan Task API için OAuth 2.0 erişim jetonu vermesini isteyebiliriz. Bu işlem, AccountManager.getAuthToken() yöntemi çağrılarak yapılır. AccountManager.getAuthToken() çağrısı sırasında AccountManager, Google API'leri yetkilendirme uç noktasıyla iletişim kurar. AccountManager, yetkilendirme jetonunu aldığında yöntem çağrısında tanımladığınız AccountManagerCallback işlevini çalıştırır:
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);
Bildiğiniz gibi Android AccountManager, OAuth 2.0 için deneysel destek sunar. AUTH_TOKEN_TYPE ayarını yaparken erişmek istediğiniz API'nin kapsamına oauth2: ön ekini eklemeniz yeterlidir. Tasks API için şunları kullanabilirsiniz:
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";
Yukarıdaki değerin AUTH_TOKEN_TYPE olarak kullanılmasıyla ilgili sorun, oauth2:https://www.googleapis.com/auth/tasks dizesinin, erişim istediğiniz Google ürününün adı olarak yetkilendirme iletişim kutusunda gösterilmesidir. Bu sorunun üstesinden gelmek için Tasks API'de özel (kullanıcı tarafından okunabilir) AUTH_TOKEN_TYPE takma adları vardır. Bunlar, OAuth 2.0 kapsamını kullanmaya eşdeğerdir. Örneğin, şunları kullanabilirsiniz:
String AUTH_TOKEN_TYPE = "Manage your tasks";
AUTH_TOKEN_TYPE takma adını da kullanabilirsiniz. Bu takma ad, Görevlerinizi görüntüleyin olarak adlandırılır ve Tasks API'nin salt okunur kapsamına (oauth2:https://www.googleapis.com/auth/tasks.readonly) eşdeğerdir.
AccountManager.getAuthToken() çağrısı sırasında AccountManager, uygulamanızın Tasks API'ye erişme yetkisinin olup olmadığını kontrol eder. Uygulamanız henüz yetkilendirilmediyse AccountManager tarafından bir Activity başlatılır. Bu Activity, kullanıcıya uygulamanızın hesaplarında Tasks API'yi kullanmasına İzin veya İzin verme seçeneğini sunan bir yetkilendirme iletişim kutusu gösterir.

Kullanıcı, uygulamanızın Tasks API'ye erişimini reddederse future.getResult() çağrısı sırasında bir OperationCanceledException atılır. Bu durumu, örneğin hesabı tekrar seçmeyi isteyerek veya erişimi tekrar yetkilendirme düğmesi içeren bir mesaj görüntüleyerek nazikçe ele almalısınız.
Uygulamanızı tanımlama ve Tasks API hizmet nesnesini ayarlama
Uygulamanız Tasks API'ye erişim yetkisine sahip olduğu ve bir erişim jetonu verildiği için Tasks API çağrıları yapmak için zorunlu olan API anahtarına da ihtiyacınız vardır. Bu anahtarı Google API Konsolu'ndaki bir projeden almanız gerekir. Bunun için aşağıdaki adımları uygulayın:
- Proje oluşturun veya mevcut bir projeyi kullanın
- Tasks API anahtarını AÇIK konumuna getirerek projenizde Tasks API'yi etkinleştirin.
- API anahtarını API Erişimi > Basit API Erişimi > API Anahtarı bölümünde bulabilirsiniz.

API anahtarı, uygulamanızı tanımladığı ve bu nedenle API'nin kotayı düşmesine ve projeniz için tanımlanan kota kurallarını kullanmasına izin verdiği için zorunludur. Tasks hizmeti nesnenizde API anahtarını belirtmeniz gerekir:
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 }
accessToken yalnızca belirli bir süre için geçerlidir. Bu nedenle, süresi dolduğunda yeni bir erişim anahtarı almanız gerekir. Bu sorunu çözmenin iki yolu vardır:
- API üzerinden her istek gönderdiğinizde AccountManager'dan accessToken isteyin. AccountManager jetonu önbelleğe aldığından bu çözüm kabul edilebilir.
- 403 hatası alana kadar accessToken değerinizi kullanmaya devam edin. Bu noktada AccountManager'dan yeni bir jeton isteyin.
API aracılığıyla görevlerde değişiklik yapma
Bu noktada, Tasks API geliştirici kılavuzuna göre API'yi sorgulamak için kullanabileceğiniz, tamamen ayarlanmış bir Tasks API hizmet nesnenize sahip olmanız gerekir. Örneğin:
// 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();
Android uygulama manifest dosyanıza internete erişim iznini eklemeyi unutmayın. Aksi takdirde, Tasks API uç noktalarına yapılan yukarıdaki istekler başarısız olur:
<uses-permission android:name="android.permission.INTERNET" />
Örnek uygulama
Android'de Tasks API ve OAuth 2.0'ı kullanmaya başlamanıza yardımcı olmak için Java için Google API'leri istemci kitaplığı örnek deposuna kısa süre önce yeni bir örnek ekledik. Örnek, Tasks API'yi kullanmak ve varsayılan görev listesinin görevlerini bir ListView'de görüntülemek için yetki isteyen basit ancak tamamen çalışan bir Android uygulamasıdır.

Sana Özel'i çalıştırmak için bu talimatları uygulayın ve geri bildirimlerinizi veya sorularınızı Google Tasks API Forumu'nda paylaşmaktan çekinmeyin.