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 Play Android.

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

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

  1. Pilih Akun Google pengguna
  2. Mendapatkan 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 jar yang tercantum di bawah di folder /assets di root aplikasi Android Anda. Periksa juga versi baru seiring bertambahnya versi dokumen ini.

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

Sejak Android 2.0, AccountManager mengelola akun yang telah didaftarkan di lingkungan Anda, akun yang tercantum di Setelan > Akun & sinkronisasi. Secara khusus, instance ini 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 dalam manifes aplikasi Android Anda:

<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 gunakan untuk mengakses Tasks. AccountManager tidak hanya mengelola Akun Google, tetapi juga akun dari vendor lain. Oleh karena itu, Anda harus meminta akun Google secara khusus dengan menggunakan kode di bawah:

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 ada lebih dari satu akun Google yang tersedia di perangkat Android, Anda harus meminta pengguna memasukkan akun yang ingin dia gunakan, dengan dialog yang bisa terlihat seperti ini:

Dialog untuk memilih akun
Dialog untuk memilih akun

Anda dapat membuat dialog semacam itu dengan menggunakan kode switch/case 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, sekarang kita dapat meminta AccountManager untuk mengeluarkan token akses OAuth 2.0 untuk Task API. Hal ini dilakukan dengan memanggil metode AccountManager.getAuthToken(). Selama panggilan AccountManager.getAuthToken(), AccountManager akan menangani panggilan endpoint otorisasi Google API. Setelah mengambil token otorisasi, AccountManager akan menjalankan AccountManagerCallback yang telah Anda tentukan 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 sudah Anda ketahui, AccountManager Android memiliki dukungan eksperimental untuk OAuth 2.0. Anda hanya perlu menambahkan awalan ke cakupan API yang ingin Anda akses 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 saat menggunakan nilai di atas sebagai AUTH_TOKEN_TYPE adalah string oauth2:https://www.googleapis.com/auth/tasks akan ditampilkan dalam dialog otorisasi sebagai nama produk Google yang ingin Anda akses. Untuk mengatasi hal ini, alias AUTH_TOKEN_TYPE khusus — dapat dibaca manusia — tersedia untuk Tasks API. Mereka sama seperti menggunakan cakupan OAuth 2.0. Misalnya, Anda dapat menggunakan:

String AUTH_TOKEN_TYPE = "Manage your tasks";

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

Selama 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 akunnya.

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 wajib untuk melakukan panggilan Tasks API. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Buat project atau gunakan 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 dapat mengidentifikasi aplikasi Anda sehingga memungkinkan API mengurangi kuota dan menggunakan aturan kuota yang ditentukan untuk project Anda. Anda perlu 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 yang baru saat 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.
  • Terus gunakan accessToken sampai Anda mendapatkan error 403 saat Anda meminta token baru ke AccountManager.

Memanipulasi Tugas melalui API

Pada tahap ini, Anda akan memiliki Objek layanan 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 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 yang sederhana tetapi berfungsi sepenuhnya, yang meminta otorisasi untuk menggunakan Tasks API dan menampilkan tugas daftar tugas default di ListView.

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

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