Contoh dasar

Bagian ini menunjukkan cara membuat panggilan hello world antar-profil dalam aplikasi Anda. Dengan ini, Anda akan terbiasa dengan SDK dan implementasi yang tepat untuk dijalankan bersama. Anda disarankan untuk secara aktif mengikuti dengan mengembangkannya di aplikasi Anda.

Menyiapkan perangkat pengujian dengan profil kerja

Google membuat aplikasi Test DPC untuk membantu Anda menyimulasikan dan menguji model di perangkat Anda sendiri. Tindakan ini akan menyiapkan profil kerja dan memberi Anda dengan kontrol untuk mengaktifkan atau menonaktifkan fitur tertentu pada perangkat.

  • Menginstal aplikasi Test DPC

    Buka Google Play Store dan download aplikasi Test DPC.

  • Menyiapkan profil kerja

    Setelah aplikasi diinstal, Anda akan melihat dua ikon muncul di perangkat, sebuah ikon penyiapan dan ikon aplikasi Test DPC. Ketuk ikon penyiapan dan ikuti langkah.

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.

pribadi/pekerjaan
profil Linkedin Anda

Saat menginstal aplikasi Anda, biasanya aplikasi akan diinstal secara otomatis di untuk profil. Jika Anda perlu menginstalnya secara eksplisit ke dalam profil kerja, Anda dapat menggunakan argumen --user dengan penginstalan adb.

$ adb install --user [id number of profile] [path of apk file]

Untuk mengetahui detail selengkapnya tentang cara menyiapkan perangkat pengujian, buka link ini.

Memastikan aplikasi Anda dikonfigurasi dengan benar

Mengaktifkan java 8 tim dukungan dan memastikan minSdk Anda minimal 19.

Menambahkan dependensi gradle

dependencies {
  annotationProcessor
'com.google.android.enterprise.connectedapps:connectedapps-processor:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps-annotations:1.1.2'
}

Kami menggunakan Guava dalam contoh ini. Ini bukan persyaratan untuk menggunakan SDK, namun mengikuti halo dunia, Anda juga harus menambahkan api("com.google.guava:guava:29.0-android").

Membuat class baru yang akan berisi panggilan antar-profil pengujian

Agar lebih bermanfaat nanti, Anda harus memasukkannya ke dalam paket yang sama dengan ingin panggilan antar-profil Anda yang sebenarnya dapat diterima.

public class HelloWorld {

  @CrossProfile
  public ListenableFuture<String> helloWorld() {
    return Futures.immediateFuture("Hello world");
  }
}

Jika Anda tidak dapat bergantung pada dukungan Guava for Futures, ikuti saja saat ini dan melihat langkah terakhir yang memberitahu Anda perubahan apa yang harus dilakukan.

Melakukan panggilan antar-profil

Anda dapat melakukannya di kelas yang perlu melakukan panggilan antar-profil sungguhan nanti.

// TODO: inject/pass these into the class later instead.
CrossProfileConnector crossProfileConnector =
  CrossProfileConnector.builder(this).build();
ProfileHelloWorld profileHelloWorld =
  ProfileHelloWorld.create(crossProfileConnector);

ListenableFuture<Map<Profile, String>> resultsFuture =
  profileHelloWorld.both().helloWorld();

FluentFuture.from(resultsFuture)
  .addCallback(new FutureCallback<Map<Profile, String>>() {
    @Override
    public void onSuccess(Map<Profile, String> results) {
      for (Profile profile : results.keySet()) {
        Log.w("tag", "CROSS_PROFILE profile: " + profile.asInt()
          +   "; result: " + results.get(profile));
      }
    }
    @Override
    public void onFailure(Throwable t) {
      Log.e(TAG, "Failed to say hello world on both profiles", t);
    }
  }, directExecutor());

Memberikan instance ke SDK

Tentu saja, panggilan metode helloWorld yang disebutkan sebelumnya berasal dari dan bukan yang asli. Sering kali, class asli Anda berupa singleton atau class kompleks yang bergantung pada framework injeksi dependensi seperti Dagger. Kepada memungkinkan logika dipanggil pada class asli di profil lain, setiap kustom Class @CrossProfile harus memiliki metode penyedia yang sesuai di Class @CrossProfileProvider. Buat kelas ini.

public class HelloWorldProvider {

  @CrossProfileProvider
  public HelloWorld getHelloWorld() {
    return new HelloWorld();
  }
}

Pengkabelan tambahan

Pembuatan kode yang diperlukan untuk mendukung class dan metode kustom memerlukan sedikit kabel tambahan. Hal ini dilakukan untuk menangani kompleksitas yang memiliki banyak target build dan persyaratan visibilitas dalam skala besar.

Pertama, anotasikan kelas tingkat tinggi yang ada atau yang baru dengan @CrossProfileConfiguration, yang mengarah ke class penyedia Anda.

@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}

Kedua, tambahkan layanan yang dihasilkan secara otomatis ke manifes Anda, di dalam <application> tag. Masalah ini mungkin tidak akan teratasi hingga Anda membuat project.

<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>

Terakhir, untuk tujuan pengembangan, beri diri Anda INTERACT_ACROSS_USERS izin akses. Jika belum memilikinya, Anda tidak akan dapat menyimpannya produksi, tetapi ini adalah cara termudah untuk memulai. Pertama, tambahkan ke manifes sebagai berikut:

<uses-permission
      android:name="android.permission.INTERACT_ACROSS_USERS"
      tools:ignore="ProtectedPermissions"/>

Kemudian, Anda bisa mendapatkan izin dari baris perintah dengan adb sebagai berikut ini (jika aplikasi Anda belum memilikinya):

adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS

Jika tidak dapat mengandalkan Guava for Futures, Anda harus menyiapkan perubahan. Pertama, tampilkan "Hello World" (Halo Dunia) {i>string<i} secara langsung dan mencetak hasilnya informasi antar-profil. Kedua, karena panggilan ini sekarang sinkron, Anda harus melakukan panggilan antar-profil dan mencetak hasil di dalam pemroses koneksi Anda.

Saat Anda menjalankan kode yang tercantum di bagian ''buat kal antar-profil'' Anda akan melihat dua log untuk ''Hello World'', satu dari setiap profil. Jika Anda hanya mendapatkan satu log, pastikan Anda telah menginstal aplikasi Anda di kedua profil dan telah memberikan izin izin akses.