Membuat aplikasi yang berjalan di profil kerja

Apa itu profil kerja?

Profil kerja adalah profil sekunder yang dapat diaktifkan di perangkat pribadi pengguna saat perusahaan mengizinkan karyawannya menggunakan perangkat pribadi mereka untuk bekerja.

Profil kerja dapat dikontrol oleh admin IT dan fungsi yang tersedia untuk profil tersebut ditetapkan secara terpisah dari fungsi profil utama pengguna. Pendekatan ini memungkinkan organisasi mengontrol lingkungan tempat dijalankannya aplikasi dan data khusus perusahaan di perangkat pengguna, sekaligus tetap memungkinkan pengguna untuk menggunakan aplikasi dan profil pribadinya.

Bagaimana pengaruhnya terhadap aplikasi Anda? Setiap aplikasi dapat diinstal di profil kerja. Artinya, aplikasi tersebut dapat mengalami pembatasan runtime dan perubahan perilaku. Anda juga perlu memastikan bahwa aplikasi aman jika digunakan untuk tujuan kerja. Meskipun aplikasi Anda berjalan di profil pribadi, profil kerja mungkin masih memengaruhi perilakunya.

Prasyarat

Codelab ini dirancang untuk developer Android yang memiliki keterampilan dasar hingga menengah.

Anda diasumsikan telah membuat aplikasi sebelumnya dan menggunakan Android Studio, serta sudah menguji aplikasi di perangkat atau emulator.

Yang akan Anda lakukan

Dalam codelab ini, Anda akan memodifikasi aplikasi agar dapat memberikan pengalaman pengguna terbaik saat diinstal di perangkat dengan profil kerja. Anda akan mempelajari cara agar aplikasi dapat:

  • Memproses kontak pribadi & kontak bisnis secara bersamaan.
  • Beralih antara profil kerja dan profil pribadi dari dalam aplikasi itu sendiri.

e69c26cfc305d675.png

Yang Anda butuhkan

  • Perangkat Android yang tidak dikelola (bukan milik, atau tidak dikelola oleh, organisasi).

Menyiapkan perangkat pengujian

Sebaiknya gunakan perangkat fisik untuk codelab ini. Namun, Anda tetap dapat melakukan penyiapan yang sama di bawah ini pada emulator.

TestDPC

Aplikasi TestDPC dibuat oleh Google untuk membantu Anda menyimulasikan dan menguji lingkungan terkelola di perangkat Anda sendiri. Aplikasi ini akan menyiapkan profil kerja dan memberi Anda kontrol untuk mengaktifkan/menonaktifkan fitur tertentu di perangkat, seperti yang dapat dilakukan oleh admin IT.

Menginstal aplikasi TestDPC

Dari perangkat, buka Google Play Store dan download aplikasi TestDPC

Menyiapkan profil kerja

Setelah aplikasi TestDPC diinstal, Anda akan melihat 2 ikon muncul di perangkat, yakni ikon penyiapan dan ikon aplikasi TestDPC. Ketuk ikon penyiapan dan ikuti langkah-langkahnya.

Sekarang Anda memiliki dua profil terpisah, yakni satu untuk aplikasi pribadi dan satu untuk aplikasi kerja. Anda dapat beralih di antara keduanya melalui tab di bagian atas daftar aplikasi.

Perhatikan bahwa setiap profil memiliki aplikasi Play Store sendiri. Anda dapat mengidentifikasi aplikasi kerja dari gambar kopor kecil di atas ikon peluncur.

153e3b8dbfb4a86e.gif

Anda dapat menginstal aplikasi melalui Play Store seperti biasa, dan bergantung pada Play Store yang Anda luncurkan (pribadi vs. kerja), aplikasi hanya akan diinstal di profil tersebut. Aplikasi juga dapat berada di kedua profil bila diinstal dari kedua Play Store. Dalam hal ini, setiap versi aplikasi akan memiliki ruang penyimpanan dan konfigurasi yang benar-benar terpisah.

Saat menginstal aplikasi dengan menjalankannya dari Android Studio, aplikasi tersebut akan diinstal di kedua profil secara default.

Siapkan beberapa kontak pengujian untuk digunakan dalam aplikasi demo:

  1. Luncurkan Aplikasi kontak perangkat dari profil pribadi.
  2. Tambahkan beberapa kontak pengujian yang dapat diidentifikasi sebagai kontak pribadi.
  3. Luncurkan aplikasi Kontak dari profil kerja. (Anda tidak akan melihat satu pun kontak pribadi yang baru saja ditambahkan.)
  4. Tambahkan beberapa kontak pengujian yang dapat diidentifikasi sebagai kontak bisnis.

Setelah Anda puas dengan kontak yang disiapkan, coba kode awal aplikasi demo.

  1. Untuk mendapatkan aplikasi contoh, coba:
  • clone repositori dari GitHub,
$  git clone https://github.com/a-samak/work-profile-codelab
  • atau download repositori sebagai file ZIP.

Download Zip

  1. Setelah didownload, buka folder project dan beralihlah ke cabang starter.
$  git checkout starter
  1. Buka dan jalankan aplikasi di Android Studio.

Seperti inilah tampilan aplikasi saat Anda pertama kali meluncurkannya:

f9779ab476511718.png

Coba

Saat Anda menjalankan aplikasi dari Android Studio di perangkat atau emulator, aplikasi tersebut akan diinstal di kedua profil. Jika mau, Anda dapat menghapus aplikasi dari satu profil dan membiarkannya terinstal di profil lainnya.

Coba jalankan aplikasi di profil pribadi. Anda akan melihat semua kontak pribadi yang tercantum, tetapi tidak satu pun kontak bisnis. Sekarang, coba jalankan aplikasi di profil kerja. Anda hanya akan melihat kontak bisnis dan tidak ada satu pun kontak pribadi.

Di akhir codelab ini, aplikasi Anda akan menampilkan kontak bisnis dan kontak pribadi secara bersamaan saat dijalankan di profil pribadi. Anda juga dapat beralih antar-profil dengan meluncurkan instance lain aplikasi di profil lain dari dalam aplikasi itu sendiri.

Saat memuat kontak menggunakan ContactsContract.Contacts.CONTENT_URI, aplikasi akan menentukan kontak yang akan ditampilkan, bergantung pada profil tempat aplikasi dijalankan. Namun, dalam banyak kasus, Anda mungkin ingin aplikasi memuat kedua daftar kontak secara bersamaan. Misalnya, pengguna mungkin ingin membagikan item pribadi (foto, dokumen) kepada rekan kerja. Untuk melakukannya, Anda harus mengambil kedua daftar kontak.

Buka MainActivity.kt

Metode onCreateLoader() bertanggung jawab untuk membuat loader cursor yang akan mengambil dan memuat kontak. Saat ini, metode ini hanya menampilkan CursorLoader menggunakan ContentURI default. Anda akan memanggil metode ini dua kali, yakni sekali untuk kontak pribadi dan sekali lagi untuk kontak bisnis. Untuk membedakan keduanya, kami akan meneruskan ID berbeda ke onCreateLoader() untuk setiap kasus. Anda harus memeriksa ID yang diteruskan ke metode tersebut untuk menentukan ContentURI yang akan digunakan.

Pertama-tama, ubah nilai variabel ContentURI, bergantung pada nilai ID yang diteruskan ke metode. Dalam kasus PERSONAL_CONTACTS_LOADER_ID, tetapkan ke ContactsContract.Contacts.CONTENT_URI default. Jika tidak, Anda akan membuat ENTERPRISE_CONTENT_FILTER_URI seperti yang dijelaskan di sini.

ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI
                    .buildUpon()
                    .appendPath(nameFilter)
                    .appendQueryParameter(
                        ContactsContract.DIRECTORY_PARAM_KEY,
                        ContactsContract.Directory.ENTERPRISE_DEFAULT.toString()
                    )
                    .build()

Anda akan melihat bahwa karena ini adalah Content Filter URI, builder memerlukan filter penelusuran (frasa penelusuran) untuk digunakan saat menelusuri/memuat kontak.

Untuk saat ini, hardcode frasa penelusuran adalah nama apa pun yang dimulai dengan huruf "a".

val nameFilter = Uri.encode("a") // names that start with a

Anda juga perlu menentukan direktori kontak yang akan ditelusuri. Anda akan menggunakan direktori ENTERPRISE_DEFAULT yang menelusuri kontak yang disimpan secara lokal di perangkat.

Tampilan metode onCreateLoader() akan terlihat seperti ini:

override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> {
        val nameFilter = Uri.encode("a") // names that start with W
        val contentURI = when (id) {
            PERSONAL_CONTACTS_LOADER_ID -> ContactsContract.Contacts.CONTENT_URI
            else -> {
                ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI
                    .buildUpon()
                    .appendPath(nameFilter)
                    .appendQueryParameter(
                        ContactsContract.DIRECTORY_PARAM_KEY,
                        ContactsContract.Directory.ENTERPRISE_DEFAULT.toString()
                    )
                    .build()
            }
        }
        return CursorLoader(
            this, contentURI, arrayOf(
                ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
            ), null, null, null
        )
    }

Sekarang Anda harus menginisialisasi Loader lain dengan nilai ID baru untuk memicu metode di atas.

Pertama, buat nilai ID konstanta baru untuk kontak bisnis di bagian atas MainActivity:

const val WORK_CONTACTS_LOADER_ID = 1

Lalu, dalam initLoaders(), gunakan LoaderManager untuk menginisialisasi Loader baru dengan ID baru yang dibuat di atas:

private fun initLoaders() {
        LoaderManager.getInstance(this).
            initLoader(PERSONAL_CONTACTS_LOADER_ID, null, this)
        LoaderManager.getInstance(this).
            initLoader(WORK_CONTACTS_LOADER_ID, null, this)
    }

Semua metode lainnya seharusnya berfungsi dengan cara yang sama karena Cursor data dari kedua Loader memiliki struktur yang sama.

Coba

Jalankan aplikasi di profil pribadi, dan kini Anda dapat melihat kontak bisnis dan kontak pribadi.

f9779ab476511718.png 7e4846e179664d66.png

Bagaimana dengan profil kerja?

Jika menjalankan aplikasi di profil kerja, Anda tetap hanya akan melihat kontak bisnis dan tak satu pun kontak pribadi. Hal itu karena salah satu sasaran utama profil kerja adalah untuk melindungi privasi pengguna, sehingga aplikasi kerja umumnya tidak dapat mengakses informasi pribadi apa pun dari profil pribadi.

9b7ddeec64957963.png

Android menyertakan API untuk meluncurkan instance lain aplikasi di profil yang berbeda, sehingga membantu pengguna beralih akun. Misalnya, aplikasi email dapat menyediakan UI yang memungkinkan pengguna beralih antara profil pribadi dan profil kerja untuk mengakses dua akun email.

Semua aplikasi dapat memanggil API ini untuk meluncurkan aktivitas utama aplikasi yang sama jika sudah diinstal di profil lain.

Untuk menambahkan peralihan akun antar-profil ke aplikasi Anda, pertama-tama kami perlu menambahkan tombol ke tata letak aktivitas utama kami, sehingga pengguna dapat beralih profil.

Buka activity_main.xml dan tambahkan widget tombol di bawah widget recycler-view:

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button"
        app:layout_constraintTop_toBottomOf="@+id/contacts_rv"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

Kembali dalam MainActivity.kt, setel peristiwa klik tombol untuk beralih profil.

Untuk melakukannya, dapatkan layanan sistem CrossProfileApps terlebih dahulu:

val crossProfileApps = getSystemService(CrossProfileApps::class.java)

Class ini menyediakan semua API yang Anda butuhkan untuk mengimplementasikan fitur peralihan profil. Anda dapat mengambil daftar profil pengguna dengan memanggil targetUserProfiles yang akan menampilkan semua profil lain tempat aplikasi ini diinstal.

val userHandles = crossProfileApps.targetUserProfiles

Anda sekarang dapat menggunakan item pertama userHandle yang ditampilkan dan meluncurkan aplikasi tersebut di profil lainnya.

crossProfileApps.startMainActivity(
                    componentName,
                    userHandles.first()
                )

Anda bahkan dapat memperoleh teks yang dilokalkan yang meminta pengguna untuk beralih profil dan menggunakannya untuk menyetel nilai teks tombol.

val label = crossProfileApps.getProfileSwitchingLabel(userHandles.first())

Sekarang, dengan menyusun semua bagian ini, inilah yang akan Anda tambahkan ke MainActivity.kt:

val crossProfileApps = getSystemService(CrossProfileApps::class.java)
        val userHandles = crossProfileApps.targetUserProfiles
        val label = crossProfileApps.getProfileSwitchingLabel(userHandles.first())
        button = findViewById<AppCompatButton>(R.id.button).apply {
            text = label
            setOnClickListener {
                crossProfileApps.startMainActivity(
                    componentName,
                    userHandles.first()
                )
            }
        }

Coba

Jika menjalankan aplikasi sekarang, Anda akan melihat tombol di bagian bawah yang menunjukkan bahwa aplikasi siap beralih antara Profil Kerja atau Profil Pribadi, bergantung pada tempat Anda meluncurkan aplikasi.

Mengklik tombol tersebut akan meluncurkan aplikasi di profil lainnya.

d904de4fdc0d091b.png 4835ce56fcf10ea1.png

Anda telah berhasil memodifikasi aplikasi yang berfungsi di profil pribadi dan profil kerja, yang mengetahui bahwa ada profil kerja yang diinstal, dan yang mengambil kontak bisnis bahkan saat dijalankan dalam mode pribadi.

Anda juga telah mengimplementasikan cara bagi pengguna untuk beralih antara profil kerja dan profil pribadi pada aplikasi yang sama saat menjalankan aplikasi tanpa harus menutup dan meluncurkannya kembali dari profil yang sesuai. Ini adalah praktik yang baik untuk membantu pengguna yang menggunakan aplikasi Anda secara berbeda di profil yang berbeda.

Pelajari lebih lanjut