Mengoptimalkan Konten Kontekstual untuk Asisten

Android 6.0 Marshmallow memperkenalkan cara baru bagi pengguna untuk berinteraksi dengan aplikasi melalui asisten aplikasi, seperti Google Asisten. Asisten adalah jendela tingkat teratas yang dapat dilihat pengguna untuk mendapatkan informasi tindakan yang relevan untuk aktivitas saat ini. Tindakan ini dapat mencakup deep link ke aplikasi lain di perangkat.

Pengguna mengaktifkan asisten dengan menekan lama tombol Layar utama atau dengan mengucapkan frasa utama. Sebagai respons, sistem membuka jendela tingkat teratas yang menampilkan secara kontekstual tindakan yang relevan.

Aplikasi asisten, seperti Asisten Google, menerapkan jendela overlay asisten melalui bernama Now on Tap, yang berfungsi dengan fungsi tingkat platform Android. Sistem memungkinkan pengguna memilih aplikasi asisten, yang memperoleh informasi kontekstual dari aplikasi Anda menggunakan Assist API Android.

Panduan ini menjelaskan cara aplikasi Android menggunakan Assist API Android untuk meningkatkan asisten {i>user experience<i}. Untuk mempelajari cara membuat aplikasi media agar Asisten dapat diluncurkan serta mengontrolnya, lihat Asisten Google dan aplikasi media.

Menggunakan Asisten

Gambar 1 menggambarkan interaksi pengguna yang khas dengan asisten. Ketika pengguna menekan lama tombol Beranda, callback Assist API dipanggil di aplikasi sumber (langkah 1). Asisten merender jendela overlay (langkah 2 dan 3), dan kemudian pengguna memilih tindakan yang akan dilakukan. Asisten menjalankan tindakan yang dipilih, seperti mengaktifkan intent dengan deep link ke aplikasi restoran (tujuan) (langkah 4).

Gambar 1. Contoh interaksi Asisten dengan fitur Now on Tap pada Aplikasi Google

Pengguna dapat mengonfigurasi asisten dengan memilih Setelan > Aplikasi > Aplikasi Default > Panduan & input suara. Pengguna dapat mengubah opsi sistem seperti mengakses konten layar sebagai teks dan mengakses {i>screenshot<i}, seperti yang ditunjukkan pada Gambar 2.

Gambar 2. Setelan bantuan & input suara

Aplikasi sumber

Untuk memastikan bahwa aplikasi Anda berfungsi dengan asisten sebagai sumber informasi bagi pengguna, Anda hanya perlu mengikuti aksesibilitas terbaik praktik terbaik. Bagian ini menjelaskan cara memberikan informasi tambahan untuk membantu meningkatkan pengalaman pengguna asisten serta berbagai skenario yang memerlukan penanganan khusus, seperti View kustom.

Membagikan informasi tambahan bersama asisten

Selain teks dan screenshot, aplikasi Anda dapat membagikan informasi lain dengan asisten. Misalnya, musik Anda dapat memilih untuk meneruskan informasi album saat ini sehingga asisten dapat menyarankan tindakan lebih cerdas yang disesuaikan dengan aktivitas saat ini. Perhatikan bahwa Assist API tidak menyediakan kontrol media. Untuk menambahkan kontrol media, lihat Asisten Google dan aplikasi media.

Untuk memberikan informasi tambahan kepada asisten, aplikasi Anda menyediakan konteks aplikasi global dengan mendaftarkan pemroses aplikasi dan menyediakan informasi khusus aktivitas dengan callback aktivitas seperti yang ditunjukkan dalam Gambar 3:

Gambar 3. Diagram urutan siklus proses Assist API

Untuk menyediakan konteks aplikasi global, aplikasi akan membuat sebuah implementasi Application.OnProvideAssistDataListener dan mendaftarkannya menggunakan registerOnProvideAssistDataListener(). Untuk menyediakan informasi kontekstual khusus aktivitas, aktivitas menggantikan onProvideAssistData() dan onProvideAssistContent(). Dua metode aktivitas dipanggil setelah global opsional akan dipanggil. Karena callback dieksekusi pada thread utama, callback harus selesaikan segera. Callback dipanggil hanya saat aktivitas berjalan.

Menyediakan konteks

Saat pengguna mengaktifkan asisten itu, onProvideAssistData() dipanggil untuk membuat Intent ACTION_ASSIST dengan semua konteks aplikasi saat ini yang direpresentasikan sebagai instance AssistStructure. Anda dapat mengganti metode ini untuk apa pun yang Anda suka ke dalam paket agar muncul dalam EXTRA_ASSIST_CONTEXT dari intent bantuan.

Mendeskripsikan konten

Aplikasi Anda dapat menerapkan onProvideAssistContent() untuk meningkatkan pengalaman pengguna asisten dengan memberikan referensi terkait konten yang berkaitan dengan aktivitas saat ini. Anda dapat mendeskripsikan konten aplikasi menggunakan kosakata umum yang didefinisikan oleh Schema.org melalui objek JSON-LD. Dalam contoh di bawah ini, sebuah aplikasi musik menyediakan data terstruktur untuk menggambarkan album musik yang saat ini sedang melihat:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

Anda juga dapat meningkatkan pengalaman pengguna dengan implementasi khusus onProvideAssistContent(), yang dapat memberikan manfaat berikut:

Catatan: Aplikasi yang menggunakan penerapan pemilihan teks kustom mungkin memerlukan untuk menerapkan onProvideAssistContent() dan panggil setClipData().

Implementasi standar

Jika onProvideAssistData() atau onProvideAssistContent() tidak diimplementasikan, sistem akan tetap melanjutkan dan meneruskan informasi yang dikumpulkan secara otomatis ke asisten, kecuali jendela ditandai sebagai aman. Seperti yang ditunjukkan pada Gambar 3, sistem menggunakan implementasi default onProvideStructure() dan onProvideVirtualStructure() untuk mengumpulkan teks dan melihat informasi hierarki. Jika tampilan Anda mengimplementasikan fungsi gambar teks, ganti onProvideStructure() untuk memberikan asisten dengan teks yang ditampilkan kepada pengguna dengan memanggil setText(CharSequence).

Pada umumnya, menerapkan dukungan aksesibilitas memungkinkan asisten untuk mendapatkan informasi yang dibutuhkan. Untuk menerapkan dukungan aksesibilitas, amati praktik terbaik yang dijelaskan dalam Membuat Aplikasi Dapat diakses, termasuk yang berikut:

Mengecualikan tampilan dari asisten

Untuk menangani informasi sensitif, aplikasi Anda dapat mengecualikan tampilan saat ini dari asisten dengan menetapkan parameter tata letak FLAG_SECURE dari WindowManager. Anda harus menetapkan FLAG_SECURE secara eksplisit untuk setiap jendela yang dibuat oleh aktivitas, termasuk dialog. Aplikasi Anda juga dapat menggunakan setSecure() untuk dikecualikan dari asisten. Tidak ada mekanisme global (tingkat aplikasi) untuk mengecualikan semua tampilan dari asisten. Catatan bahwa FLAG_SECURE tidak menyebabkan callback Assist API berhenti yang dihasilkan. Aktivitas yang menggunakan FLAG_SECURE masih dapat secara eksplisit memberikan informasi ke aplikasi asisten menggunakan callback yang dijelaskan sebelumnya panduan ini.

Catatan: Untuk akun perusahaan (Android for Work), administrator dapat menonaktifkan pengumpulan data asisten untuk profil kerja dengan menggunakan metode setScreenCaptureDisabled() dari DevicePolicyManager API.

Interaksi suara

Callback Assist API juga dipanggil pada frasa kunci deteksi. Untuk informasi selengkapnya, lihat Suara Dokumentasi Actions.

Pertimbangan urutan Z

Asisten menggunakan jendela overlay ringan yang ditampilkan di atas aktivitas saat ini. Karena pengguna dapat mengaktifkan asisten kapan saja, jangan buat permanen jendela pemberitahuan sistem yang mengganggu jendela overlay, seperti ditunjukkan di Gambar 4.

Gambar 4. Urutan Z lapisan bantuan

Jika aplikasi Anda menggunakan peringatan sistem, hapus segera karena membiarkannya berada di mengurangi pengalaman pengguna.

Aplikasi tujuan

Aplikasi Asisten biasanya memanfaatkan deep linking untuk menemukan aplikasi tujuan. Untuk menjadikan aplikasi tujuan potensial, pertimbangkan untuk menambahkan dukungan deep linking. Pencocokan antara konteks pengguna saat ini dan deep link atau tindakan potensial lainnya yang ditampilkan di jendela overlay (ditunjukkan pada langkah 3 pada Gambar 1) khusus untuk implementasi Asisten Google. Sebagai misalnya, Aplikasi Asisten Google menggunakan deep linking dan Link Aplikasi untuk mengarahkan traffic ke aplikasi tujuan.

Mengimplementasikan Asisten Anda Sendiri

Anda mungkin ingin mengimplementasikan asisten Anda sendiri. Seperti yang ditunjukkan pada Gambar 2, pengguna dapat memilih aplikasi asisten aktif. Tujuan aplikasi asisten harus menyediakan implementasi VoiceInteractionSessionService dan VoiceInteractionSession seperti yang ditunjukkan dalam contoh VoiceInteraction ini. Asisten juga memerlukan izin BIND_VOICE_INTERACTION. Asisten kemudian dapat menerima hierarki teks dan tampilan yang direpresentasikan sebagai instance AssistStructure di onHandleAssist(). Asisten menerima screenshot melalui onHandleScreenshot().