Menggunakan Tasks API di Android

Peringatan: Dokumen ini tidak digunakan lagi. Untuk informasi tentang cara memberi otorisasi aplikasi Android menggunakan OAuth 2.0, lihat Dokumentasi Otorisasi Layanan Android Play.

Dokumen ini menjelaskan cara menggunakan Tasks API dengan OAuth 2.0 di Android. Panduan ini menjelaskan mekanisme otorisasi untuk mendapatkan akses ke Google Tasks milik pengguna dan cara mempersiapkan Objek layanan Tasks API di aplikasi Android Anda.

Agar aplikasi Android Anda dapat menggunakan Tasks API, diperlukan beberapa langkah, Anda harus:

  1. Pilih Akun Google pengguna
  2. Dapatkan token akses OAuth 2.0 dari AccountManager untuk Task API
  3. Mengidentifikasi project Anda dan menyiapkan Objek layanan Tasks
  4. Melakukan panggilan ke Tasks API

Mengimpor library klien Google

Contoh yang akan Anda temukan dalam dokumen ini menggunakan library klien Google API untuk Java. Anda perlu menambahkan jar berikut ke aplikasi Android. Untuk melakukannya, letakkan stoples yang tercantum di bawah di folder /assets di root aplikasi Android Anda. Periksa juga versi baru karena dokumen ini semakin usang.

Impor jar library klien Google API dan ekstensi Android-nya (semua bagian dari 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

Impor jar khusus Tasks:

Impor dependensi (semua bagian dari 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

Akun Google di Android

Mulai Android 2.0, AccountManager mengelola akun yang telah Anda daftarkan di lingkungan Anda, akun yang tercantum pada Settings > Akun & sinkronisasi. Secara khusus, ia menangani alur otorisasi dan dapat menghasilkan token otorisasi yang diperlukan untuk mengakses data menggunakan API.

Akun yang terdaftar di lingkungan Android Anda
Akun yang terdaftar di lingkungan Android Anda

Agar dapat menggunakan AccountManager untuk mendapatkan akun dan meminta token otorisasi, Anda perlu menambahkan izin berikut di manifes aplikasi Android:

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

Anda dapat menggunakan AccountManager untuk mendapatkan Akun Google yang ingin Anda akses ke Tasks. AccountManager tidak hanya mengelola Akun Google, tetapi juga akun dari vendor lain. Oleh karena itu, Anda perlu meminta Akun Google secara khusus dengan menggunakan kode di bawah ini:

AccountManager accountManager = AccountManager.get(activity);
Account[] accounts = accountManager.getAccountsByType("com.google");

Atau, library klien Google API untuk Java dilengkapi dengan GoogleAccountManager yang hanya menangani Akun Google:

GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity);
Account[] accounts = googleAccountManager.getAccounts();

Jika lebih dari satu akun Google tersedia di perangkat Android, Anda harus meminta akun yang ingin digunakan pengguna tersebut, dengan dialog yang bisa terlihat seperti ini:

Dialog untuk memilih akun
Dialog untuk memilih akun

Anda dapat membangun dialog seperti itu dengan menggunakan kode switch/kasus berikut dalam metode onCreateDialog aktivitas Anda:

@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;
}

Memanggil showDialog(DIALOG_ACCOUNTS) akan menampilkan dialog pemilih akun.

Alur otorisasi Google API di Android

Setelah pengguna memilih akun, kita dapat meminta AccountManager untuk menerbitkan token akses OAuth 2.0 untuk Task API. Hal ini dilakukan dengan memanggil metode AccountManager.getAuthToken(). Selama AccountManager.getAuthToken(), panggilan AccountManager akan menghubungi endpoint otorisasi Google API. Setelah mengambil token otorisasi, AccountManager akan menjalankan AccountManagerCallback yang telah Anda tetapkan dalam panggilan metode:

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);

Seperti yang mungkin Anda ketahui, AccountManager Android memiliki dukungan eksperimental untuk OAuth 2.0. Anda hanya perlu memberi awalan pada cakupan API yang ingin diakses dengan oauth2: saat menetapkan AUTH_TOKEN_TYPE. Jadi untuk Tasks API, Anda dapat menggunakan:

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

Masalah jika menggunakan nilai di atas sebagai AUTH_TOKEN_TYPE adalah string oauth2:https://www.googleapis.com/auth/tasks akan ditampilkan pada dialog otorisasi sebagai nama produk Google yang ingin Anda akses. Untuk mengatasi hal ini, alias AUTH_TOKEN_TYPE khusus yang dapat dibaca manusia tersedia untuk Tasks API. Keduanya setara dengan penggunaan cakupan OAuth 2.0. Misalnya, Anda dapat menggunakan:

String AUTH_TOKEN_TYPE = "Manage your tasks";

Anda juga dapat menggunakan alias AUTH_TOKEN_TYPE Melihat tugas yang setara dengan Tasks API hanya baca cakupan: oauth2:https://www.googleapis.com/auth/tasks.readonly.

Selama panggilan AccountManager.getAuthToken(), panggilan AccountManager akan memeriksa apakah aplikasi Anda telah diberi otorisasi untuk mengakses Tasks API. Jika aplikasi Anda belum diberi otorisasi, Activity akan dimulai oleh AccountManager yang menampilkan dialog otorisasi kepada pengguna sehingga mereka dapat Mengizinkan atau Menolak aplikasi Anda untuk menggunakan Tasks API di akun mereka.

Dialog otorisasi
Dialog otorisasi

Jika pengguna menolak akses aplikasi Anda ke Tasks API, OperationCanceledException akan ditampilkan selama panggilan OperationCanceledException. Anda harus menanganinya dengan baik, misalnya dengan meminta untuk memilih akun lagi atau menampilkan pesan dengan tombol untuk mengizinkan akses lagi.

Mengidentifikasi aplikasi Anda dan menyiapkan Objek layanan Tasks API

Setelah aplikasi Anda memiliki otorisasi untuk mengakses Tasks API dan telah diberi token akses, Anda juga memerlukan Kunci API yang harus didapatkan dari project di Konsol API Google karena bersifat wajib untuk melakukan panggilan Tasks API. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Membuat project atau menggunakan yang sudah ada
  2. Aktifkan Tasks API di project Anda dengan mengalihkan tombol Tasks API ke AKTIF
  3. Kunci API dapat ditemukan di Akses API > Akses API Sederhana > Kunci API

Mendapatkan Kunci API dari Konsol API
Mendapatkan Kunci API dari Konsol API

Kunci API bersifat wajib karena mengidentifikasi aplikasi Anda sehingga mengizinkan API mengurangi kuota dan menggunakan aturan kuota yang ditentukan untuk project Anda. Anda harus menentukan Kunci API pada Objek service Tasks:

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 hanya valid untuk jangka waktu tertentu, jadi Anda harus mendapatkan token baru jika masa berlakunya habis. Ada 2 cara untuk menangani hal ini:

  • Minta accessToken ke AccountManager setiap kali Anda membuat permintaan melalui API. Karena AccountManager menyimpan token dalam cache, solusi ini dapat diterima.
  • Tetap gunakan accessToken hingga Anda mendapatkan error 403. Saat itu, Anda meminta token baru ke AccountManager.

Memanipulasi Tasks melalui API

Pada tahap ini, Anda seharusnya sudah memiliki objek service Tasks API yang sudah disiapkan sepenuhnya yang dapat digunakan untuk membuat kueri API sesuai dengan Panduan developer Tasks API, misalnya:

// 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();

Jangan lupa untuk menambahkan izin untuk mengakses Internet ke manifes aplikasi Android Anda. Jika tidak, permintaan di atas ke endpoint Tasks API akan gagal:

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

Contoh aplikasi

Baru-baru ini kami menambahkan contoh baru ke Library Klien Google API untuk repositori contoh Java guna membantu Anda memulai Tasks API dan OAuth 2.0 di Android. Contoh ini adalah aplikasi Android sederhana tetapi berfungsi sepenuhnya yang meminta otorisasi untuk menggunakan Tasks API dan menampilkan tugas daftar tugas default dalam ListView.

Menampilkan tugas dalam daftar tugas default di ListView
Menampilkan tugas dalam daftar tugas default di ListView

Ikuti petunjuk ini untuk menjalankan contoh, dan jangan ragu untuk memposting masukan atau pertanyaan ke Forum Google Tasks API.