Ikon bilah pemberitahuan berubah putih di Android 5 Lollipop


207

Saya memiliki aplikasi yang menampilkan pemberitahuan khusus. Masalahnya adalah bahwa ketika berjalan di Android 5 ikon kecil di bilah Pemberitahuan ditampilkan dalam warna putih. Bagaimana saya bisa memperbaikinya?


Rahul Sharma dan basiam memiliki jawaban yang lebih baik di sini - stackoverflow.com/questions/30795431/…
Rivu Chakraborty

Itu terjadi pada saya ketika menjalankan di Android 6, bukan 5.
Jaime Montoya

Tentu, itu terjadi dengan Android 5+, tentu saja juga di Android 6 dan 7. Pada saat pertanyaan, Android 5 adalah versi terbaru dan fitur yang menyebabkan masalah ini diperkenalkan di Android 5.
Alejandro Casanova

Saya pikir lebih akurat untuk mengatakan API Level 21 (Android 5.0), API Level 22 (Android 5.1), API Level 23 (Android 6.0), dll. Istilah "Android 5" tidak jelas karena Anda dapat berbicara tentang Android 5.0 atau Android 5.1, dan ketika saya menguji pemberitahuan dan cara ikon muncul di API Level 22 Vs. API Level 23, saya menyadari bahwa mereka berperilaku berbeda.
Jaime Montoya

Jawaban:


269

Jawaban yang diterima tidak (sepenuhnya) benar. Tentu, itu membuat ikon pemberitahuan tampil berwarna, tetapi melakukannya dengan kelemahan BESAR - dengan mengatur target SDK lebih rendah dari Android Lollipop!

Jika Anda memecahkan masalah ikon putih Anda dengan menetapkan target SDK Anda menjadi 20, seperti yang disarankan, aplikasi Anda tidak akan menargetkan Android Lollipop, yang berarti Anda tidak dapat menggunakan fitur khusus Lollipop.

Lihatlah http://developer.android.com/design/style/iconography.html , dan Anda akan melihat bahwa gaya putih adalah cara pemberitahuan ditampilkan di Android Lollipop.

Di Lollipop, Google juga menyarankan agar Anda menggunakan warna yang akan ditampilkan di belakang ikon pemberitahuan (putih) - https://developer.android.com/about/versions/android-5.0-changes.html

Jadi, saya pikir solusi yang lebih baik adalah menambahkan ikon siluet ke aplikasi dan menggunakannya jika perangkat menjalankan Android Lollipop.

Misalnya:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

Dan, dalam metode getNotificationIcon:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}

34
Bagaimana Anda menghasilkan siluet? Saya pengembang tanpa keterampilan photoshop dan membuat latar belakang transparan menggunakan alat online masih menghasilkan ikon putih.
Chaitanya

6
@Chaitanya Use GIMP :)
ByteHamster

4
solusi ini tidak menjawab pertanyaan mengapa proses pembangunan android memodifikasi PNG yang benar-benar baik dan kompres dan menghapus saluran alpha.
philk

6
developer.android.com/design/style/iconography.html mengarah ke material.google.com/style/icons.html dan ketika saya menekan ctrl+fdan mengetik notificationdi halaman itu ia tidak dapat menemukan apa pun ...
user25

4
alih-alih memeriksa dari pengubah kode platform versi applay ke folder drawable - drawable / drawable-v21 dan ikon tempat yang tepat
Igor Wojda

72

Sepenuhnya setuju dengan pengguna Daniel Saidi. Agar memiliki Coloruntuk NotificationIconsaya menulis jawaban ini.

Untuk itu, Anda harus membuat ikon seperti Silhouettedan membuat beberapa bagian di Transparentmana pun Anda ingin menambahkan Colors. yaitu,

masukkan deskripsi gambar di sini

Anda dapat menambahkan warna menggunakan

.setColor(your_color_resource_here)

CATATAN: setColorhanya tersedia di Lollipopjadi, Anda harus memeriksaOSVersion

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

Anda juga dapat mencapai ini dengan menggunakan Lollipopsebagai target SDK.

Semua instruksi yang NotificationIcondiberikan pada Baris Panduan Pemberitahuan Konsol Google Developer .

Ikon Notifikasi Pilihan Ukuran 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

Dan juga lihat tautan ini untuk Ukuran Ikon Pemberitahuan untuk info lebih lanjut.


4
ini ide yang sangat bagus untuk mengatur warna latar belakang sebagai notification.setColor (your_color_resource_here)
TejaDroid

1
Jadi saya sudah mencoba ini, dan ikon pemberitahuan memiliki latar belakang berwarna ketika saya menarik bayangan pemberitahuan ke bawah. Tapi, dalam baki itu sendiri, itu masih ikon putih
Stealth Rabbi

1
solusi ini benar..memiliki ikon notifikasi yang memiliki kembali transparan..dan dengan siluet, ikon tidak perlu hitam saja.. ikon dapat memiliki warna; hanya saja Android L akan mengonversi warna acara menjadi putih..dan versi android sebelumnya akan menampilkan ikon apa adanya
Lakshay

Saya menambahkan setColor untuk di bawah ini lollipop menampilkan ikon ic_launcher baik-baik saja tetapi dalam 6,0 menunjukkan ikon kotak putih tolong bantu saya
Harsha

Saya sudah menguji setColorpada Kitkat (API 19) dan IceCreamSandwich (API 15), dalam kedua kasus itu mengabaikan warna tetapi tidak crash . Jadi bisakah saya dengan aman menghilangkan memeriksa versi OS?
Maria

47

Ini adalah kode yang digunakan Android untuk menampilkan ikon pemberitahuan:

// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
//   statusbar/BaseStatusBar.java

if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
    entry.icon.setColorFilter(null);
}

Jadi, Anda perlu mengatur versi target SDK untuk sesuatu <21dan ikon akan tetap berwarna. Ini adalah solusi buruk tetapi melakukan apa yang diharapkan untuk dilakukan. Lagi pula, saya benar-benar menyarankan mengikuti Panduan Desain Google : "Ikon pemberitahuan harus sepenuhnya putih."

Inilah cara Anda dapat mengimplementasikannya:

Jika Anda menggunakan Gradle / Android Studio untuk membangun aplikasi Anda, gunakan build.gradle:

defaultConfig {
    targetSdkVersion 20
}

Jika tidak (Eclipse dll) gunakan AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />

Apakah ada solusi? Atau apa yang bisa saya lakukan untuk menunjukkan itu atau ikon lainnya dengan benar?
Alejandro Casanova

Saya telah mengedit jawaban saya karena saya menemukan solusi setelah membaca kode sumber Android.
ByteHamster

4
Terima kasih banyak atas bantuan Anda, tapi tolong tolong beri saya "konteks". Di mana saya harus melakukan itu? Apa itu "entri"?
Alejandro Casanova

Kode diambil dari AOSP hanya untuk menunjukkan bagaimana saya menemukan solusinya :) Saya telah menambahkan sedikit penjelasan tentang bagaimana mengimplementasikannya.
ByteHamster

Ini sebenarnya berfungsi. Adakah tebakan mengapa Google melakukan ini? Apakah ini bug atau fitur?
m02ph3u5

24

Untuk menghindari ikon Notifikasi menjadi putih, gunakan ikon "Silhouette" untuk mereka, yaitu. gambar latar belakang putih-transparan. Anda dapat menggunakan Irfanview untuk membangunnya:

  • pilih gambar, buka IrfanView, tekan F12 untuk alat melukis, bersihkan gambar jika perlu (hapus bagian yang tidak diinginkan, halus dan poles)
  • Image / Decrease Color Depth ke 2 (untuk gambar hitam putih)
  • Image / Negative (untuk putih pada gambar hitam)
  • Image / Resize/Resample hingga 144 x 144 (gunakan Metode Ukuran "Ubah Ukuran" bukan "Ubah Contoh", jika tidak gambar akan meningkat menjadi 24 bit warna per piksel (24 BPP) lagi
  • File / Save as PNG, periksa Show option dialog, periksa Save Transparent Color, klik Save, lalu klik pada warna hitam pada gambar untuk mengatur warna transparan

Android tampaknya hanya menggunakan resolusi gambar drawable-xxhdpi (144 x 144), jadi salin ic_notification.pngfile yang dihasilkan ke \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi. Gunakan .setSmallIcon(R.drawable.ic_notification)dalam kode Anda, atau gunakan getNotificationIcon()seperti yang disarankan Daniel Saidi di atas.

Anda juga dapat menggunakan Android Asset Studio Roman Nurik .


Saya mencoba mengonversi ikon saya menggunakan photoshop tetapi gagal, tetapi sebagai penggemar irfanview saya dengan cepat mencoba ini ketika saya melihatnya dan itu bekerja dengan sangat baik. Terima kasih!
Bruce

15

Pilihan lain adalah mengambil keuntungan dari direktori drawable (mipmap) versi-spesifik untuk memasok grafik yang berbeda untuk Lollipop dan yang lebih tinggi.

Di aplikasi saya, direktori "v21" berisi ikon dengan teks transparan sementara direktori lain berisi versi tidak transparan (untuk versi Android yang lebih tua dari Lollipop).

Berkas sistem

Yang seharusnya terlihat seperti ini:

Android Studio

Dengan cara ini, Anda tidak perlu memeriksa nomor versi dalam kode, mis

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_notification)
        .setContentTitle(title)
        .setContentText(message)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

Demikian juga, Anda dapat referensi "ic_notification" (atau apa pun yang Anda pilih untuk menyebutnya) dalam muatan GCM Anda jika Anda menggunakan atribut "ikon".

https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support


3
Ini berfungsi dan terlihat seperti solusi cara Android yang paling.
Sergey Galin

apakah Anda mengatakan bahwa jika android akan memilih ikon dari folder mipmap-21 jika versinya lollipop, dan jika kurang dari lollipop itu akan memilih dari drawable?
Lakshay

@Ian, pendekatan direktori baik untuk sumber daya per versi Android, tetapi bagaimana Anda dapat mengatur setColor(tanpa melibatkan kode tambahan) dengan cara itu?
Daniel

@Aniel warna dapat di direktori versi khusus juga, misalnya "nilai" dan "nilai-v21".
Ian

12

Menurut pedoman desain Android Anda harus menggunakan siluet untuk builder.setSmallIcon(R.drawable.some_notification_icon);Tetapi jika Anda masih ingin menunjukkan ikon berwarna-warni sebagai ikon pemberitahuan di sini adalah trik untuk lollipop dan penggunaan di atas di bawah kode. LargeIcon akan bertindak sebagai ikon pemberitahuan utama dan Anda juga harus memberikan siluet untuk smallIcon karena akan ditampilkan di kanan bawah largeIcon.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

Dan pra-lolipop hanya digunakan .setSmallIcon(R.mipmap.ic_launcher)dengan pembangun Anda.


11

Sekarang android studio menyediakan plugin Image Asset , yang akan menghasilkan ikon di semua folder drawbale yang diperlukan

Image Asset Studio membantu Anda membuat berbagai jenis ikon dengan kepadatan berbeda dan menunjukkan dengan tepat di mana mereka akan ditempatkan di proyek Anda. Ini termasuk alat untuk menyesuaikan ikon Anda dan menambahkan latar belakang, semua saat menampilkan hasilnya di panel pratinjau, sehingga mereka muncul persis seperti yang Anda inginkan. Alat-alat ini secara dramatis dapat merampingkan desain ikon dan proses impor.

Anda dapat mengakses Aset Gambar dengan mengklik baru> klik pada opsi Aset Gambar dan akan muncul jendela seperti ini: -

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


8

Saya menghadapi masalah yang sama dan itu karena ikon notifikasi aplikasi saya tidak datar. Untuk versi Android lollipop atau bahkan di bawah lollipop ikon pemberitahuan aplikasi Anda harus rata, jangan gunakan ikon dengan bayangan dll.

Di bawah ini adalah kode yang bekerja dengan sangat baik di semua versi Android

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

Ikon yang salah
masukkan deskripsi gambar di sini

Ikon Kanan

masukkan deskripsi gambar di sini


1
Di mana tepatnya Anda memperbaiki masalah di sini?
IgorGanapolsky

Cara Membuat ikon yang benar. Apakah mungkin untuk menghasilkan secara online? alat apa saja ??
Jiks


7

alpha-channel adalah satu-satunya data gambar yang digunakan Android untuk ikon pemberitahuan:

  • alpha == 1: piksel menunjukkan warna putih
  • alpha == 0: piksel ditampilkan sebagai warna yang Anda pilih Notification.Builder#setColor(int)

Ini disebutkan di https://developer.android.com/about/versions/android-5.0-changes.html :

Sistem mengabaikan semua saluran non-alfa dalam ikon aksi dan ikon pemberitahuan utama. Anda harus mengasumsikan bahwa ikon-ikon ini hanya akan menjadi alpha.

Hampir semua drawable bawaan sepertinya gambar alpha yang cocok untuk ini, jadi Anda bisa menggunakan sesuatu seperti:

Notification.Builder.setColor(Color.RED)
                    .setSmallIcon(android.R.drawable.star_on)

tapi saya masih mencari doc API yang secara resmi mengkonfirmasi itu.

Diuji pada Android 22.


Saya sudah menguji setColorpada Kitkat (API 19) dan IceCreamSandwich (API 15), dalam kedua kasus itu mengabaikan warna tetapi tidak crash . Jadi bisakah saya dengan aman menghilangkan memeriksa versi OS?
Maria

@JohnLee Saya tidak berpikir itu dapat crash, hanya mungkin terlihat buruk jika Anda tidak memperhitungkannya :-)
Ciro Santilli郝海东冠状病六四事件法轮功

3

hapus android:targetSdkVersion="21"dari manifest.xml. itu akan bekerja! dan dari ini tidak ada masalah sama sekali di apk Anda itu hanya trik saya menerapkan ini dan saya menemukan ikon berwarna-warni di pemberitahuan


9
Ide yang sangat buruk untuk memainkan "trik" dengan sistem! Bukan solusi!
sud007

3

Pemberitahuan berwarna abu - abu seperti yang dijelaskan di bawah ini. Mereka tidak hitam-putih, terlepas dari apa yang ditulis orang lain. Anda mungkin telah melihat ikon dengan banyak corak, seperti bilah kekuatan jaringan.

Sebelum API 21 (Lollipop 5.0), ikon warna berfungsi. Anda dapat memaksa aplikasi Anda untuk menargetkan API 20, tetapi itu membatasi fitur yang tersedia untuk aplikasi Anda, jadi itu tidak dianjurkan. Anda dapat menguji level API yang sedang berjalan dan mengatur ikon warna atau ikon skala abu-abu dengan tepat, tetapi ini mungkin tidak bermanfaat. Dalam kebanyakan kasus, yang terbaik adalah menggunakan ikon skala abu-abu.

Gambar memiliki empat saluran, RGBA (merah / hijau / biru / alfa). Untuk ikon notifikasi, Android mengabaikan saluran R, G, dan B. Satu-satunya saluran yang diperhitungkan adalah Alpha, juga dikenal sebagai opacity. Desain ikon Anda dengan editor yang memberi Anda kendali atas nilai Alpha warna gambar Anda.

Bagaimana nilai-nilai Alpha menghasilkan gambar skala abu-abu:

  • Alpha = 0 (transparan) - Pixel ini transparan, menunjukkan warna latar belakang.
  • Alpha = 255 (opaque) - Pixel ini berwarna putih.
  • Alpha = 1 ... 254 - Pixel ini persis seperti yang Anda harapkan, memberikan nuansa transparan dan putih.

Mengubahnya dengan setColor:

  • Panggil NotificationCompat.Builder.setColor(int argb). Dari dokumentasi untuk Notification.color:

    Warna aksen (bilangan bulat ARGB seperti konstanta dalam Warna) untuk diterapkan oleh templat Gaya standar saat menyajikan pemberitahuan ini. Desain template saat ini membangun gambar header berwarna-warni dengan overlay gambar ikon (stensil putih) di atas bidang warna ini. Komponen alfa diabaikan.

    Pengujian saya dengan setColor menunjukkan bahwa komponen Alpha tidak diabaikan; sebagai gantinya, mereka masih menyediakan skala abu-abu. Nilai Alpha yang lebih tinggi menjadikan piksel putih. Nilai Alpha yang lebih rendah mengubah piksel ke warna latar belakang (hitam di perangkat saya) di area notifikasi, atau ke warna yang ditentukan dalam notifikasi pull-down. (Tampaknya orang lain melaporkan perilaku yang sedikit berbeda, jadi waspadalah!)


2

Pasca rilis Android Lollipop android telah mengubah pedoman untuk menampilkan ikon pemberitahuan di bilah Pemberitahuan. Dokumentasi resmi mengatakan "Perbarui atau hapus aset yang melibatkan warna. Sistem mengabaikan semua saluran non-alfa dalam ikon tindakan dan ikon pemberitahuan utama. Anda harus mengasumsikan bahwa ikon ini hanya akan alfa. Sistem menggambar ikon pemberitahuan dengan warna putih dan ikon tindakan dalam abu-abu gelap. " Sekarang apa artinya dalam istilah orang awam adalah "Konversi semua bagian gambar yang Anda tidak ingin tampilkan ke piksel transparan. Semua warna dan piksel yang tidak transparan ditampilkan dalam warna putih "

Anda dapat melihat bagaimana melakukan ini secara terperinci dengan tangkapan layar di sini https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

Semoga itu bisa membantu


2

Anda Perlu mengimpor gambar PNG transparan satu warna. Jadi, Anda dapat mengatur warna Ikon dari ikon kecil. Kalau tidak, itu akan ditampilkan putih di beberapa perangkat seperti MOTO


1

Jika Anda menggunakan GoogleFireBaseMessaging, Anda dapat mengatur "ikon id" di payload "pemberitahuan" (ini membantu saya untuk menyelesaikan masalah ikon bar putih):

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

set ic_notification ke id Anda sendiri dari R.drawable.


Di mana Anda meletakkan ikon itu? Yang saya dapatkan hanyalah ikon aplikasi saya dan semua file R.drawable yang saya temukan adalah file kelas biner.
shinzou

@kuhaku dia merujuk ke file ic_launcher.png di folder 'drawable'.
Johnson

0

Saya juga menghadapi terlalu banyak masalah dalam hal ini tetapi setelah mencari di internet saya menemukan solusi yang berbeda untuk masalah ini. Izinkan saya meringkas semua solusi dan menjelaskan:

Catatan: Solusi ini untuk pengguna cordova Phonegap

  1. Contoh

<preference name="android-targetSdkVersion" value="20"/>

Anda perlu mengatur nilai android-targetSdkVersion Anda menjadi kurang dari 21. Jadi setelah mengatur nilai ini, ikon Gambar pemberitahuan akan muncul hingga Android 6 (Marshmallow), Ini tidak akan berfungsi di Android 7 (Nougat). Solusi ini berhasil untuk saya.

  1. Ubah statusbarStyle di file konfigurasi Anda. Contoh

<preference name="StatusBarStyle" value="lightcontent" />

Tetapi solusi ini hanya akan berfungsi ketika aplikasi Anda dibuka. Jadi, saya kira solusi ini bukan solusi terbaik tetapi berhasil bagi banyak pengguna.

  1. Jadikan ikon Anda transparan. Solusi ini bekerja untuk banyak orang. Sebenarnya masalahnya adalah, Dalam pengembangan aplikasi Native kita perlu memberikan mereka tiga gambar: (a) Ikon aplikasi (b) Ikon pemberitahuan (c) Gambar ikon status bar, tetapi dalam kasus pengembangan aplikasi mobile Hybrid tidak ada pilihan untuk lakukan itu. Jadi buat ikon Anda transparan dan solusi ini akan menyelesaikan masalah Anda.

Dan saya yakin salah satu solusi di atas akan bekerja untuk masalah Anda.


0

FYI: Jika Ikon tidak muncul, pastikan konfigurasi pemberitahuan lokal atau jarak jauh Anda mengandung nama ikon yang benar

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 

0

Saya pikir sudah terlambat untuk berbicara tentang API 21, tetapi saya menemukan cara yang mudah.

Saat menggunakan 'Pemberitahuan Kustom (tata letak khusus),

RemoteView

setImageViewResource(int viewId, int srcId);

dan

setImageViewUri(int viewId, Uri uri); 

menjadikan gambar itu putih di Lollipop (API 21).

Tetapi saat menggunakan

setImageViewBitmap(int viewId, Bitmap bitmap);

Gambar tidak menjadi topeng putih!



-3

mencampur dua hal ini dalam aplikasi gradle

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    //This is the version that was added by project by default
    targetSdkVersion 26 <------ default
    // Changed it to version 20
    targetSdkVersion 20 <------ mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

-38

android:targetSdkVersion="20"seharusnya < 21.


1
Tolong jangan ikuti solusi ini, yakin itu mungkin berhasil tetapi dengan biaya menjalankan aplikasi Anda dalam mode kompatibilitas untuk versi Android yang lebih baru.
king_below_my_lord
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.