Episode ini membahas keamanan kredensial: Keychain dan Keystore untuk token, mengapa AsyncStorage tidak cukup, konfigurasi .env per build dengan react-native-config, serta kebiasaan agar secret tidak pernah masuk ke bundle atau repository.

Token login dan kredensial adalah kunci rumah aplikasi kalian. Jika token jatuh ke tangan yang salah, semua data user bisa dicuri. Di episode 9 kalian menyimpan data biasa; sekarang waktunya menangani data yang tidak boleh bocor.
Episode 13 membahas secure storage: Keychain di iOS dan Keystore di Android untuk menyimpan token, mengapa AsyncStorage bukan pilihan untuk data sensitif, konfigurasi .env per build, dan kebiasaan agar secret tidak pernah ter-commit ke repository.
Keychain (iOS) dan Keystore (Android) adalah tempat penyimpanan kredensial yang dilindungi perangkat keras dan biometrik. Library react-native-keychain menyatukan keduanya:
npm install react-native-keychainimport * as Keychain from "react-native-keychain";
async function simpanToken(token) {
await Keychain.setGenericPassword("auth", token, {
service: "com.example.myapp",
});
}
async function bacaToken() {
const kredensial = await Keychain.getGenericPassword();
return kredensial ? kredensial.password : null;
}setGenericPassword("auth", token) menyimpan username dan password generik. Dalam praktik, field username bisa berisi identitas user dan field password berisi token. Data tersimpan di secure storage perangkat, bukan di file aplikasi biasa.
AsyncStorage menyimpan data sebagai file teks biasa yang bisa dibaca siapa saja dengan akses ke perangkat atau backup. Token tidak boleh masuk ke sana. Secure storage memanfaatkan enkripsi dan akses terbatas sistem — itulah tempat yang benar untuk kredensial.
Saat release, React Native mengemas JavaScript menjadi satu file bundle yang disertakan di aplikasi. Siapa pun bisa membongkar APK atau IPA dan membaca bundle-nya. Artinya, kunci API dan secret yang ditulis sebagai string di kode otomatis terekspos.
Bahkan nilai di .env yang diinjeksi saat build tetap bisa ditemukan di bundle setelah dibongkar. Pahami level keamanannya: .env dan react-native-config melindungi secret dari repository, bukan dari reverse engineering. Secret yang benar-benar sensitif — kunci server, secret signature — tidak pernah boleh berada di aplikasi klien.
Untuk membedakan konfigurasi staging dan production, buat file .env terpisah per environment:
.env.example
.env.development
.env.staging
.env.production.env.example berisi placeholder tanpa nilai asli dan menjadi satu-satunya file env yang boleh di-commit.
react-native-config membaca file env saat build dan menyuntikkan nilainya ke aplikasi:
npm install react-native-configimport Config from "react-native-config";
export const API_URL = Config.API_URL;
export const SENTRY_DSN = Config.SENTRY_DSN;Pilih file env lewat variabel ENVFILE saat menjalankan build Android:
cd android
ENVFILE=.env.staging ./gradlew assembleReleasePerintah di atas membuat APK release yang memakai nilai dari .env.staging. Untuk project Expo, pemilihan env dilakukan lewat profil EAS Build di eas.json.
Kecualikan semua file env dari git, kecuali contoh:
.env
.env.*
!.env.exampleBaris pertama mengabaikan semua file env, dan baris ketiga mengecualikan .env.example dari pengabaian agar tetap ter-commit sebagai dokumentasi.
Jika secret pernah ter-commit, anggap sudah bocor — rotasi segera. Jadikan pemeriksaan secret sebagai bagian dari code review dan pipeline: skan repository dengan tools deteksi secret sebelum merge. Episode 14 akan membahas mitigasi reverse engineering lebih lanjut.
Warning
Secret yang ter-commit tidak bisa dianggap aman hanya karena sudah dihapus dari commit berikutnya. Sejarah git menyimpannya selamanya. Rotasi kredensial adalah satu-satunya perbaikan yang benar.
Episode 13 mengamankan kredensial: token disimpan di Keychain dan Keystore, bukan AsyncStorage, secret dihitung sudah terekspos di bundle, .env per build memisahkan konfigurasi, dan .gitignore mencegah secret masuk repository.
Inti yang harus dibawa pulang:
.env per environment memisahkan konfigurasi staging dan production..env.example yang boleh di-commit.Di episode 14 selanjutnya kita akan membahas network security dan TLS: network security config Android, App Transport Security di iOS, certificate pinning, serta mitigasi reverse engineering dan hardening aplikasi.