Görevler API'sini Android'de kullanma

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:

  1. Kullanıcının Google Hesabı'nı seçin
  2. Task API için AccountManager'dan OAuth 2.0 erişim jetonu alma
  3. Projenizi tanımlayın ve Görevler hizmet nesnesini oluşturun
  4. 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.

Android ortamınızda kayıtlı hesaplar
Android ortamınızda kayıtlı hesaplar

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:

Hesap seç iletişim kutusu
Hesap seç iletişim kutusu

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.

Yetkilendirme iletişim kutusu
Yetkilendirme iletişim kutusu

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:

  1. Proje oluşturun veya mevcut bir projeyi kullanın
  2. Tasks API anahtarını AÇIK konumuna getirerek projenizde Tasks API'yi etkinleştirin.
  3. API anahtarını API Erişimi > Basit API Erişimi > API Anahtarı bölümünde bulabilirsiniz.

API Konsolu&#39;ndan API anahtarı alma
API Konsolu'ndan API anahtarı alma

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
List taskLists = 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.

Varsayılan görev listesinde yer alan görevleri ListView&#39;da görüntüleme
Varsayılan görev listesinde yer alan görevleri ListView'da görüntüleme

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.