Görevler API'sini Android'de kullanma

Uyarı: Bu doküman kullanımdan kaldırıldı. Android uygulamalarını OAuth 2.0 kullanarak yetkilendirme hakkında bilgi edinmek için lütfen Android Play Hizmetleri Yetkilendirme belgelerine göz atın.

Bu dokümanda, Görevler API'sinin Android'de OAuth 2.0 ile nasıl kullanılacağı açıklanmaktadır. Burada, bir kullanıcının Google Görevler’ine erişmek için gereken yetkilendirme mekanizmaları ve Android uygulamanızda Görevler API hizmeti Nesnesi’ni kullanmaya nasıl hazır olabileceğiniz açıklanmaktadır.

Android uygulamanızın Görevler API'sını kullanabilmesi için birkaç adım gereklidir:

  1. Kullanıcının Google Hesabını seçin
  2. AccountManager'dan Task API için OAuth 2.0 erişim jetonu alma
  3. Projenizi tanımlayın ve Görevler hizmet Nesnesi'ni ayarlayın
  4. Görevler API'sine çağrı yapma

Google'ın istemci kitaplığını içe aktarma

Bu dokümanda bulacağınız örneklerde Java için Google API'leri istemci kitaplığı kullanılmaktadır. Aşağıdaki jar'ları Android uygulamanıza eklemeniz gerekir. Bunun için aşağıda listelenen jar'ları Android uygulamanızın kök dizinindeki /assets klasörüne yerleştirin. Ayrıca, bu doküman eskidikçe yeni sürümleri de kontrol edin.

Google API'leri istemci kitaplığı jar dosyalarını ve Android uzantılarını (google-api-java-client-1.4.1-beta.zip dosyasının tamamı) 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 özgü jar dosyasını içe aktarın:

Bağımlılıkları içe aktarma (google-api-java-client-1.4.1-beta.zip klasörünün tamamı):

  • 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'deki Google Hesapları

Android 2.0 sürümünden itibaren AccountManager, ortamınıza kaydettiğiniz hesapları, Ayarlar > Hesaplar ve senkronizasyon bölümünde listelenen hesapları 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

Hesapları almak ve yetkilendirme jetonları istemek amacıyla AccountManager'ı kullanabilmek üzere Android uygulama manifestinize 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. Dolayısıyla, aşağıdaki kodu kullanarak özel olarak Google hesaplarını 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ı işleyen 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ı aşağıdaki gibi bir iletişim kutusuyla belirtmeniz gerekir:

Hesap seçin iletişim kutusu
Hesap seçin 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ılırsa hesap seçici iletişim kutusu görüntülenir.

Android'de Google API'leri yetkilendirme akışı

Kullanıcı bir hesap seçtiğine göre artık AccountManager'dan Görev API'sı için bir OAuth 2.0 erişim jetonu vermesini isteyebiliriz. Bu, 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şime geçme işlemini gerçekleştirir. AccountManager yetkilendirme jetonunu aldığında, yöntem çağrısında tanımladığınız AccountManagerCallback'i ç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);

Sizin de bildiğiniz gibi Android AccountManager, OAuth 2.0 için deneysel desteğe sahiptir. AUTH_TOKEN_TYPE değerini ayarlarken erişmek istediğiniz API'nin kapsamının önüne oauth2: eklemeniz yeterlidir. Görevler API'sı için şunları kullanabilirsiniz:

String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";

Yukarıdaki değer AUTH_TOKEN_TYPE olarak kullanılırken sorun, oauth2:https://www.googleapis.com/auth/tasks dizesinin, yetkilendirme iletişim kutusunda erişmek istediğiniz Google ürününün adı olarak görüntülenmesidir. Bu sorunu gidermek amacıyla, Tasks API için kullanıcılar tarafından okunabilen özel AUTH_TOKEN_TYPE takma adları mevcuttur. Bunlar, OAuth 2.0 kapsamını kullanmaya eşdeğerdir. Örneğin, şunları kullanabilirsiniz:

String AUTH_TOKEN_TYPE = "Manage your tasks";

Ayrıca AUTH_TOKEN_TYPE takma adını da kullanabilirsiniz: Görevlerinizi görüntüleyin. Bu, Görevler API'si salt okunur kapsama eşdeğerdir: oauth2:https://www.googleapis.com/auth/tasks.readonly.

AccountManager.getAuthToken() çağrısı sırasında AccountManager, uygulamanızın Görevler API'sine erişim yetkisi olup olmadığını kontrol eder. Uygulamanız henüz yetkilendirilmediyse AccountManager tarafından bir Etkinlik başlatılır. Hesap Yöneticisi, uygulamanızın kendi hesabında Görevler API'sini kullanmasına İzin Verme veya Reddetme için kullanıcıya bir yetkilendirme iletişim kutusu görüntüler.

Yetkilendirme iletişim kutusu
Yetkilendirme iletişim kutusu

Kullanıcı, uygulamanızın Tasks API'ye erişimini reddederse OperationCanceledException çağrısı sırasında bir OperationCanceledException verilir. Örneğin, hesabı yeniden seçmenizi isteyebilir veya erişimi yeniden yetkilendirmek için düğme içeren bir mesaj görüntüleyebilirsiniz.

Uygulamanızı tanımlama ve Tasks API hizmeti Nesnesini ayarlama

Uygulamanız Görevler API'sine erişme yetkisine sahip olduğu ve kendisine bir erişim jetonu verildiğine göre, Tasks API çağrıları yapmak için zorunlu olduğundan, Google API Konsolu'nda bir projeden almanız gereken bir API Anahtarı da almanız gerekir. Bunun için aşağıdaki adımları uygulayın:

  1. Yeni bir proje oluşturun veya mevcut bir projeyi kullanın
  2. Tasks API anahtarını AÇIK konuma getirerek projenizde Tasks API'yi etkinleştirin.
  3. API Anahtarı, API Erişimi > Basit API Erişimi > API Anahtarı konumunda bulunabilir.

API Konsolu&#39;ndan API Anahtarını Alma
API Konsolu'ndan API Anahtarını Alma

API Anahtarı, uygulamanızı tanımladığından zorunludur ve API'nin kotayı düşmesine ve projeniz için tanımlanan kota kurallarını kullanmasına olanak tanır. Görevler 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, geçerlilik süresi sona erdiğinde yeni bir erişim kodu almanız gerekir. Bunu başarmanın 2 yolu vardır:

  • API üzerinden her istek gönderdiğinizde AccountManager'dan bir accessToken isteyin. AccountManager jetonu önbelleğe aldığından bu çözüm kabul edilebilir.
  • 403 hatası alana kadar accessToken bilginizi kullanmaya devam edin. Bu noktada AccountManager'dan yeni bir jeton isteyin.

API aracılığıyla Görevleri Manipüle Etme

Bu noktada, API'yi sorgulamak için Görevler API'si Geliştirici Kılavuzu'na uygun şekilde kullanabileceğiniz, tam olarak ayarlanmış bir Tasks API hizmeti Nesneniz olmalıdır. Ö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 manifestinize internete erişim iznini eklemeyi unutmayın. Aksi takdirde, Görevler API'si uç noktalarına yapılan yukarıdaki istekler başarısız olur:

<uses-permission android:name="android.permission.INTERNET" />

Örnek uygulama

Kısa süre önce, Android'de Tasks API'yi ve OAuth 2.0'ı kullanmaya başlamanıza yardımcı olmak amacıyla, Java için Google API'leri İstemci Kitaplığı'na yeni bir örnek ekledik. Örnek, Görevler API'sini kullanmak ve varsayılan görev listesinin görevlerini ListView'da görüntülemek için yetkilendirme isteyen basit ancak tam olarak çalışan bir Android uygulamasıdır.

Liste Görünümünde varsayılan görevler listesindeki görevleri görüntüleme
Liste Görünümünde varsayılan görevler listesindeki görevleri görüntüleme

Örneği çalıştırmak için bu instructions uygulayın ve geri bildirimlerinizi veya sorularınızı Google Tasks API Forumu'nda yayınlamaktan çekinmeyin.