全部产品
Search
文档中心

Mobile Platform as a Service:Menggunakan pop-up izin privasi (Portal&Bundle)

更新时间:Jun 24, 2025

Otoritas pengaturan mengharuskan aplikasi untuk tidak memanggil API sensitif sebelum pengguna menyetujui kebijakan privasi dengan mengklik tombol Agree di kotak dialog perjanjian privasi. Untuk memenuhi persyaratan ini, baseline mPaaS Android versi 10.1.32.17 atau lebih baru dan versi 10.1.60.5 atau lebih baru didukung. Lihat topik ini untuk menyesuaikan proyek sesuai kebutuhan Anda.

Prosedur

null

Activity yang menampilkan kotak dialog privasi tidak boleh mewarisi BaseActivity dari mPaaS, karena BaseActivity akan mengumpulkan data tertanam, yang dapat menyebabkan aplikasi mengumpulkan data pribadi sebelum pengguna menyetujui kebijakan privasi.

  1. Buat kelas callback baru untuk dialog izin privasi. Implementasikan operasi API PrivacyListener. Berikut adalah contoh implementasi:

    public class MyPrivacyListener implements PrivacyListener {
     // Buat kotak dialog izin privasi dalam metode ini
     @Override
     public void showPrivacy(final Activity activity, final PrivacyResultCallback privacyResultCallback) {
         if(null==privacyResultCallback){
             return;
         }
         if(null!=activity){
             new AlertDialog.Builder(activity)
                     .setTitle("Kotak dialog izin privasi")
                     .setMessage("Isi utama")
                     .setPositiveButton("Setuju untuk melanjutkan penggunaan", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialogInterface, int i) {
                             // Setelah Anda mengklik OK, tutup kotak dialog
                             dialogInterface.cancel();
                             // Tetapkan hasil kotak dialog menjadi true
                             privacyResultCallback.onResult(true);
                         }
                     })
                     .setNegativeButton("Tidak setuju dan keluar", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialogInterface, int i) {
                             // Setelah Anda mengklik Tidak Setuju, tutup kotak dialog
                             dialogInterface.cancel();
                             // Tetapkan hasil kotak dialog menjadi false
                             privacyResultCallback.onResult(false);
                             // Akhiri aktivitas saat ini, kerangka kerja akan membunuh proses
                             if(null!=activity){
                                 activity.finish();
                             }
                         }
                     })
                     .setCancelable(false)
                     .create()
                     .show();
         }else{
             // Jika aktivitas kosong, hasil callback ditetapkan menjadi false
             privacyResultCallback.onResult(false);
         }
     }
    }

    Jika menggunakan baseline 10.1.68.42 atau lebih baru dan perlu menghapus status privasi, implementasikan antarmuka PrivacyListener2 dan fungsi shouldClear.

    Berikut adalah deskripsi fungsi shouldClear:

    @Override
    public boolean shouldClear(Context context) {
      //Ketika pengguna tidak menyetujui perjanjian privasi, secara default SharedPreferences digunakan untuk menyimpan false dan disetel untuk mengembalikan false. Jika Anda perlu menampilkan jendela lagi, Anda perlu mengatur nilai true yang tersimpan di SP untuk mengembalikan true;
      return false;//Nilai pengembalian adalah nilai boolean yang tersimpan di SP.
    }

    Selama callback, kotak dialog harus memicu windowFocusChange. Kerangka kerja akan menjalankan operasi selanjutnya setelah pemantik dipicu. Karena kelas callback diinisialisasi secara reflektif oleh sistem dan dijadwalkan sangat awal, jangan tambahkan konstruktor dengan nama metode. Selain itu, hindari menambahkan logika spesifik ke konstruktor. Jika perlu menggunakan sumber daya di kotak dialog, gunakan metode berbeda berdasarkan baseline yang digunakan.

    • Untuk baseline di bawah 32, gunakan metode berikut:

      Resources resource = QuinoxAgent.getInstance().getResourcesByBundle("bundlename dari Bundle tempat sumber daya berada");
      null

      Nama bundlename dapat diperiksa di /build/intermediates/bundle/META-INF/BUNDLE.MF di modul utama proyek Bundle.

      bundlename

    • Untuk baseline di bawah 60, buat file res_slinks di modul utama proyek Portal, dan tulis group dan artifact dari Bundle tempat sumber daya berada di file res_slinks sesuai aturan. Aturannya adalah group-artifact.split("-")[0]. Pastikan konten benar jika menambahkan baris baru. Contohnya:

      group = com.mpaas.demo.materialdesign`
      `artifact = materialdesign-build`

      Konfigurasi akhir yang ditulis ke dalam file res_slinks adalah com.mpaas.demo.materialdesign-materialdesign. 1

      Setelah menyelesaikan langkah-langkah di atas, Anda dapat langsung menggunakan LayoutInflator.inflate(R.layout.xxx) untuk memanggil sumber daya.

  2. Daftarkan kelas callback di AndroidManifest. Daftarkan kelas callback kotak dialog izin privasi di AndroidManifest dari portal, dengan value sebagai jalur lengkap kelas callback yang telah diimplementasikan. Contoh kode:

     <!--callback kotak dialog izin privasi-->
     <meta-data
         android:name="privacy.listener"
         android:value="com.mpaas.demo.launcher.MyPrivacyListener" />
  3. Mulai intersepsi kotak dialog pop-up. Di preInit dari MockLauncherApplicationAgent, tambahkan intersepsi kotak dialog. Contoh kode:

     //Periksa apakah Anda ingin menampilkan kotak dialog izin privasi kepada pengguna
     if(! PrivacyUtil.isUserAgreed(getApplicationContext())){
         PermissionGate.getInstance().waitForUserConform(mContext, getMicroApplicationContext());
     }
  4. Mulai Aktivitas pertama. Di postInit dari MockLauncherActivityAgent, lakukan lompatan ke Activity pertama. Contoh kode:

     // Tentukan apakah izin privasi pengguna telah diperoleh
     if(PrivacyUtil.isUserAgreed(activity)){
         new Handler().postDelayed(new Runnable() {
             public void run() {
                 Intent intent = new Intent(activity, MainActivity.class);
                 activity.startActivity(intent);
                 activity.finish();
             }
         }, 200);
     }