Episode ini membahas privasi: data minimization sesuai GDPR dan CCPA, permission yang minimal, consent flow, logging yang tidak membocorkan data sensitif, serta kebijakan retensi data dan audit.

Regulasi privasi seperti GDPR di Eropa dan CCPA di California mengubah cara aplikasi memperlakukan data user. Bukan hanya soal etika — melanggar aturan bisa berarti denda besar dan hilangnya kepercayaan user.
Episode 16 membahas privasi dari sisi praktik engineering: data minimization, permission yang minimal, consent flow yang bisa direkam, logging yang tidak membocorkan data sensitif, serta kebijakan retensi data dan audit. Ini bukan tugas legal semata — keputusan arsitektur menentukan mudah tidaknya aplikasi patuh.
Prinsip pertama GDPR: kumpulkan data hanya yang benar-benar dibutuhkan untuk fungsi yang diminta. Jika fitur tidak butuh lokasi, jangan minta lokasi. Jika profil bisa berfungsi tanpa tanggal lahir, jangan simpan tanggal lahir. Data yang tidak pernah dikumpulkan tidak bisa bocor.
Sebelum menambahkan field atau permission baru, tanyakan: data apa yang dikumpulkan, untuk apa, berapa lama disimpan, dan siapa yang bisa mengakses? Jawaban yang jelas menandakan desain yang patuh; jawaban yang samar menandakan masalah.
Jangan meminta semua permission saat startup. Minta satu permission dalam konteks fitur yang membutuhkannya, lalu minta permission berikutnya saat fitur lain dipakai. Permintaan massal meningkatkan penolakan dan menimbulkan kesan aplikasi mengintip.
Buka kamera -> minta izin kamera
Upload foto -> minta izin galeri
Kirim notifikasi -> minta izin notifikasiSetiap permintaan disertai penjelasan singkat kenapa data itu dibutuhkan. Episode 12 membahas teknik permintaan dan penanganan penolakan secara detail.
Regulasi mewajibkan persetujuan yang eksplisit dan bisa dibuktikan. Simpan jawaban user beserta versi kebijakan dan waktu, sehingga audit bisa menunjukkan kapan dan apa yang disetujui:
import AsyncStorage from "@react-native-async-storage/async-storage";
const KUNCI_CONSENT = "consent_v1";
async function simpanKonsen(hasil) {
const payload = {
versi: 1,
jawaban: hasil,
waktu: new Date().toISOString(),
};
await AsyncStorage.setItem(KUNCI_CONSENT, JSON.stringify(payload));
}new Date().toISOString() merekam waktu persetujuan. Saat kebijakan berubah, naikkan versi dan minta persetujuan ulang — user tidak bisa dianggap menyetujui aturan yang baru.
Simpan versi consent di penyimpanan. Saat aplikasi dibuka, bandingkan versi tersimpan dengan versi kebijakan saat ini. Jika berbeda, tampilkan consent flow baru sebelum user lanjut memakai fitur yang membutuhkan data.
Log adalah tempat paling mudah data bocor: token, email, dan lokasi sering tertulis di console tanpa sadar. Tetapkan kebijakan: jangan pernah menulis token, password, atau data PII ke log.
Jika data perlu dicatat untuk debugging, redaksi bagian sensitifnya dulu:
function logAman(objek) {
const { token, ...sisa } = objek;
console.log("data aman", JSON.stringify(sisa));
}Destructuring { token, ...sisa } memisahkan field sensitif dari yang aman, lalu hanya sisa yang di-log. Terapkan pola ini di semua titik yang mencatat data user.
Di produksi, batasi level log dan kirim ke crash monitoring dengan redaksi otomatis. Jangan pernah mengekspos log raw ke tool pihak ketiga tanpa memastikan data sensitif sudah dihapus.
Data tidak boleh disimpan selamanya. Tetapkan jangka waktu penyimpanan per jenis data, lalu bersihkan otomatis. Implementasi sederhana di penyimpanan lokal:
async function bersihkanRiwayat() {
const mentah = await AsyncStorage.getItem("riwayat");
const riwayat = mentah ? JSON.parse(mentah) : [];
const batas = Date.now() - 30 * 24 * 60 * 60 * 1000;
const masihBaru = riwayat.filter((item) => item.waktu > batas);
await AsyncStorage.setItem("riwayat", JSON.stringify(masihBaru));
}Kode di atas menghapus riwayat yang lebih tua dari 30 hari. Terapkan kebijakan serupa di server dengan job pembersihan terjadwal.
Catat aktivitas pemrosesan data: siapa mengakses, kapan, dan data apa. Audit trail memungkinkan penyelidikan saat terjadi kebocoran dan menjadi bukti kepatuhan saat regulator bertanya. Data audit sendiri harus di-retensi dengan aturan tersendiri.
Warning
Privasi bukan fitur yang ditambahkan di akhir. Desain data sejak awal dengan asumsi bahwa data yang tidak perlu dikumpulkan adalah liabilitas. Kebijakan yang bagus tanpa implementasi teknis tidak berarti apa-apa.
Episode 16 membangun aplikasi yang menghormati privasi: data minimization, permission minimal, consent flow yang tercatat, logging yang bebas data sensitif, serta kebijakan retensi dan audit yang berjalan otomatis.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan membahas New Architecture deep dive: Fabric dan JSI secara mendalam, panggilan native sinkron, interop layer untuk library lama, serta strategi migrasi dan kapan mengaktifkan New Architecture.