Mengoptimalkan Konten Kontekstual untuk Asisten

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

Pengguna dapat mengaktifkan asisten dengan menekan lama tombol Layar Utama atau dengan mengucapkan frasa kunci. Sebagai tanggapan, sistem membuka jendela tingkat teratas dan menampilkan tindakan yang relevan secara kontekstual.

Google App mengimplementasikan jendela overlay asisten melalui fitur yang disebut Now on Tap, yang berfungsi dengan fungsionalitas tingkat platform Android. Sistem ini memungkinkan pengguna memilih aplikasi bantuan yang akan memperoleh informasi kontekstual dari aplikasi Anda menggunakan Assist API Android.

Panduan ini menjelaskan cara aplikasi Android menggunakan Assist API Android untuk meningkatkan pengalaman pengguna asisten. Untuk mempelajari cara membuat aplikasi media sehingga Asisten dapat meluncurkan dan mengontrol, lihat Asisten Google dan Aplikasi Media.

Menggunakan Asisten

Gambar 1 menggambarkan interaksi pengguna yang khas dengan asisten. Saat pengguna menekan lama tombol Layar utama, callback Assist API dipanggil di aplikasi sumber (langkah 1). Asisten merender jendela overlay (langkah 2 dan 3), kemudian pengguna memilih tindakan untuk 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 di Google App

Pengguna dapat mengonfigurasi asisten dengan memilih Setelan > Aplikasi > Aplikasi Default > Bantuan & masukan suara. Pengguna dapat mengubah opsi sistem seperti mengakses konten layar sebagai teks dan mengakses screenshot, seperti yang ditunjukkan pada Gambar 2.

Gambar 2. Setelan bantuan & masukan suara

Aplikasi sumber

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

Membagikan informasi tambahan dengan asisten

Selain teks dan screenshot, aplikasi Anda dapat berbagi informasi lainnya dengan asisten. Misalnya, aplikasi musik Anda dapat memilih untuk meneruskan informasi album saat ini sehingga asisten dapat menyarankan tindakan yang 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 memberikan informasi khusus aktivitas dengan callback aktivitas seperti yang ditunjukkan pada Gambar 3:

Gambar 3. Diagram urutan siklus proses Assist API

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

Menyediakan konteks

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

Mendeskripsikan konten

Aplikasi Anda dapat mengimplementasikan onProvideAssistContent() untuk meningkatkan pengalaman pengguna asisten dengan memberikan referensi terkait konten yang berhubungan dengan aktivitas saat ini. Anda dapat menjelaskan konten aplikasi menggunakan kosakata umum yang ditentukan oleh Schema.org melalui objek JSON-LD. Pada contoh di bawah, aplikasi musik menyediakan data terstruktur untuk menggambarkan album musik yang sedang dilihat pengguna:

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 kustom onProvideAssistContent(), yang dapat memberikan manfaat berikut:

Catatan: Aplikasi yang menggunakan implementasi pemilihan teks khusus mungkin perlu mengimplementasikan onProvideAssistContent() dan memanggil setClipData().

Implementasi standar

Jika callback onProvideAssistData() maupun onProvideAssistContent() tidak diimplementasikan, sistem masih akan melanjutkan proses dan meneruskan informasi yang dikumpulkan secara otomatis pada asisten, kecuali jendela saat ini ditandai sebagai aman. Seperti yang ditunjukkan pada Gambar 3, sistem menggunakan implementasi default onProvideStructure() dan onProvideVirtualStructure() untuk mengumpulkan informasi hierarki tampilan dan teks. Jika tampilan Anda mengimplementasikan gambar teks kustom, ganti onProvideStructure() untuk memberi asisten teks yang ditampilkan kepada pengguna dengan memanggil setText(CharSequence).

Umumnya, menerapkan dukungan aksesibilitas memungkinkan asisten mendapatkan informasi yang dibutuhkannya. Untuk menerapkan dukungan aksesibilitas, perhatikan praktik terbaik yang dijelaskan dalam Menjadikan Aplikasi Mudah Diakses, termasuk:

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 mengecualikan permukaan dari asisten. Tidak ada mekanisme global (tingkat aplikasi) untuk mengecualikan semua tampilan dari asisten. Perlu diperhatikan bahwa FLAG_SECURE tidak menyebabkan callback Assist API berhenti diaktifkan. Aktivitas yang menggunakan FLAG_SECURE masih dapat memberikan informasi secara eksplisit pada asisten menggunakan callback yang dijelaskan sebelumnya dalam panduan ini.

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

Interaksi suara

Callback Assist API juga dipanggil pada pendeteksian frasa kunci. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Voice 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 jendela peringatan sistem permanen yang mengganggu jendela overlay, seperti yang ditunjukkan pada Gambar 4.

Gambar 4. Urutan Z lapisan bantuan

Jika aplikasi Anda menggunakan jendela peringatan sistem, segera hapus jendela karena akan mengganggu pengalaman pengguna jika dibiarkan ditampilkan di layar.

Aplikasi tujuan

Asisten biasanya memanfaatkan deep link untuk menemukan aplikasi tujuan. Agar aplikasi Anda menjadi aplikasi tujuan potensial, pertimbangkan untuk menambahkan dukungan deep link. 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) dikhususkan untuk implementasi asisten. Misalnya, Google App menggunakan deep link dan Firebase App Indexing untuk membawa 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 yang aktif. 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 tampilan dan teks yang direpresentasikan sebagai instance AssistStructure dalam onHandleAssist(). Asisten menerima screenshot melalui onHandleScreenshot().