Tampilan
Bab 41 — Model Bisnis & Perlindungan IP
Bab penutup Bagian V membahas pertanyaan yang menentukan apakah aplikasimu bisa bertahan: bagaimana ia menghasilkan uang, dan bagaimana melindungi apa yang sudah kamu bangun.
Ini bukan topik teknis, tetapi keputusan di sini punya konsekuensi teknis langsung — model bisnis menentukan arsitektur, dan arsitektur yang salah membuat perubahan model menjadi mahal.
Model monetisasi, diurutkan dari yang paling umum
1. Iklan
Model paling umum, dan seperti dibahas di Bab 35, yang paling mudah dilakukan dengan buruk.
Ada dua jenis yang perlu dibedakan.
Iklan standar — banner, interstitial, rewarded. Pengguna tahu itu iklan, dan sebagian besar tidak menyukainya. Pendapatannya relatif kecil per tampilan, sehingga butuh volume besar.
Iklan dalam konten — rekomendasi produk yang relevan di dalam alur aplikasimu. Misalnya, aplikasi tutorial memasak yang menyarankan peralatan yang dipakai di resep itu.
Jenis kedua jauh lebih baik: pengguna sering merasa terbantu alih-alih terganggu, dan pendapatannya per tampilan bisa jauh lebih tinggi karena niat belinya lebih jelas.
Iklan standar Iklan dalam konten
───────────────── ────────────────────
Terasa mengganggu Terasa membantu
Menurunkan ulasan Netral atau positif
Pendapatan rendah Pendapatan lebih tinggi
Mudah dipasang Butuh relevansi nyata2. Langganan
Model dengan pendapatan paling dapat diprediksi, dan yang paling disukai investor.
Syarat agar berhasil: aplikasimu harus memberi nilai berkelanjutan. Orang tidak akan membayar bulanan untuk sesuatu yang mereka pakai sekali.
✅ Cocok untuk langganan
- Konten yang terus bertambah
- Layanan berbasis awan (sinkronisasi, penyimpanan)
- Perkakas yang dipakai rutin
- Fitur yang punya biaya berjalan (AI, API berbayar)
❌ Tidak cocok
- Perkakas sekali pakai (kalkulator, konverter)
- Aplikasi yang nilainya tidak bertambah dari waktu ke waktuStruktur harga yang umum bekerja:
| Paket | Karakteristik |
|---|---|
| Gratis | Cukup berguna agar orang mau mencoba, cukup terbatas agar ada alasan naik |
| Bulanan | Titik masuk yang rendah risikonya |
| Tahunan | Diskon 30–40%; menghasilkan pendapatan di muka dan retensi lebih baik |
| Seumur hidup | Opsional; bagus untuk arus kas awal, buruk untuk pendapatan jangka panjang |
Uji coba gratis meningkatkan konversi secara signifikan, tetapi harus jujur: beri tahu dengan jelas kapan penagihan dimulai, dan permudah pembatalan. Pembatalan yang dipersulit menghasilkan ulasan buruk dan permintaan pengembalian dana — kerugian bersih.
3. Pembelian dalam aplikasi sekali bayar
Membeli sesuatu yang spesifik: menghilangkan iklan, membuka fitur, membeli mata uang dalam game.
Cocok untuk aplikasi yang nilainya tidak bertambah dari waktu ke waktu, di mana langganan akan terasa tidak adil.
Model freemium adalah bentuknya yang paling umum: aplikasi gratis dengan fitur premium yang bisa dibuka. Kuncinya adalah menentukan garis pemisah dengan tepat.
❌ GARIS TERLALU KETAT ❌ GARIS TERLALU LONGGAR
Versi gratis nyaris tidak Versi gratis sudah cukup
berguna → orang langsung untuk semua orang → tidak
pergi, tidak sempat melihat ada yang membayar
nilainya
✅ GARIS YANG TEPAT
Versi gratis benar-benar berguna dan membuat orang menyukai
aplikasimu, tetapi pengguna yang serius akan merasakan
batasnya secara alamiUntuk aplikasi polling yang kita bangun, garisnya ada pada jumlah polling per hari — pengguna kasual tidak pernah menyentuhnya, pengguna berat merasakannya setiap hari.
4. Bayar di muka
Aplikasi berbayar sejak awal. Model ini semakin sulit karena orang enggan membayar untuk sesuatu yang belum mereka coba.
Masih bekerja untuk:
- Perkakas profesional dengan audiens spesifik.
- Aplikasi dengan reputasi yang sudah mapan.
- Pasar tertentu di mana ini masih normal.
Kelemahan terbesarnya: tidak ada pendapatan berulang dan hambatan mencoba yang tinggi.
5. Model lain
Sponsorship — satu merek membiayai aplikasimu. Cocok kalau audiensmu sangat spesifik dan menarik bagi merek tertentu.
Afiliasi — komisi dari produk yang kamu rekomendasikan. Ini bentuk terbaik dari "iklan dalam konten".
Data agregat — menjual wawasan (bukan data pribadi) kepada pihak lain. Legal kalau dilakukan dengan benar, tetapi butuh kejelasan penuh dalam kebijakan privasi dan sering merusak kepercayaan.
Layanan pendamping — aplikasi gratis sebagai pintu masuk ke layanan berbayar di luar aplikasi. Ini juga cara sah menghindari komisi toko aplikasi.
Memilih model
Beberapa pertanyaan yang membantu memutuskan:
Pertimbangan tambahan:
Berapa biaya berjalanmu per pengguna? Kalau aplikasimu memanggil API AI yang berbayar seperti di Bab 34, model gratis dengan iklan hampir pasti merugi. Kamu butuh langganan.
Seberapa sering orang memakainya? Aplikasi yang dibuka setiap hari cocok untuk iklan; yang dibuka sebulan sekali tidak.
Siapa penggunamu? Profesional yang memakai aplikasimu untuk bekerja jauh lebih bersedia membayar daripada pengguna kasual.
Menggabungkan model
Banyak aplikasi sukses memakai lebih dari satu:
- Gratis dengan iklan → langganan untuk menghilangkan iklan.
- Gratis dengan batas → sekali bayar untuk membuka batas.
- Langganan → pembelian tambahan untuk fitur khusus.
Yang perlu dihindari: model yang saling bertentangan, seperti langganan yang tetap menampilkan iklan.
Konsekuensi teknis
Model bisnismu memengaruhi arsitektur, dan menyadarinya sejak awal menghemat banyak pekerjaan.
dart
// lib/domain/entities/fitur.dart
/// Definisikan batas fitur di satu tempat,
/// bukan tersebar di seluruh kode.
enum Fitur {
pollingTanpaBatas,
pollingUnggulan,
bebasIklan,
eksporData,
asistenAi,
statistikLanjutan,
}
extension AksesFitur on Langganan {
bool bisa(Fitur fitur) => switch (fitur) {
Fitur.pollingTanpaBatas => tingkat == TingkatLangganan.bisnis,
Fitur.pollingUnggulan => tingkat != TingkatLangganan.gratis,
Fitur.bebasIklan => tingkat != TingkatLangganan.gratis,
Fitur.eksporData => tingkat == TingkatLangganan.bisnis,
Fitur.asistenAi => tingkat != TingkatLangganan.gratis,
Fitur.statistikLanjutan => tingkat != TingkatLangganan.gratis,
};
}Widget pembungkus yang memakainya:
dart
// lib/presentation/widgets/gerbang_fitur.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class GerbangFitur extends StatelessWidget {
const GerbangFitur({
super.key,
required this.fitur,
required this.child,
this.alternatif,
});
final Fitur fitur;
final Widget child;
final Widget? alternatif;
@override
Widget build(BuildContext context) {
final bisa = context.select<PenyediaLangganan, bool>(
(p) => p.data.bisa(fitur),
);
if (bisa) return child;
return alternatif ?? _AjakanUpgrade(fitur: fitur);
}
}
class _AjakanUpgrade extends StatelessWidget {
const _AjakanUpgrade({required this.fitur});
final Fitur fitur;
static const _deskripsi = {
Fitur.pollingUnggulan: 'Tampilkan pollingmu di bagian teratas',
Fitur.eksporData: 'Unduh hasil polling sebagai CSV',
Fitur.asistenAi: 'Minta AI membuatkan opsi polling',
Fitur.statistikLanjutan: 'Lihat siapa yang memberi suara dan kapan',
};
@override
Widget build(BuildContext context) {
final skema = Theme.of(context).colorScheme;
return Card(
color: skema.surfaceContainerHighest,
child: Padding(
padding: const EdgeInsets.all(20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.workspace_premium, size: 40, color: skema.primary),
const SizedBox(height: 12),
Text(
_deskripsi[fitur] ?? 'Fitur ini tersedia di paket berbayar',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleMedium,
),
const SizedBox(height: 16),
FilledButton(
onPressed: () => Navigator.pushNamed(context, '/paket'),
child: const Text('Lihat Paket'),
),
],
),
),
);
}
}Memakainya:
dart
GerbangFitur(
fitur: Fitur.eksporData,
child: TombolEkspor(poll: poll),
)Gerbang di UI tidak cukup
Widget di atas hanya menyembunyikan tombol. Pengguna yang membongkar aplikasi tetap bisa memanggil fungsinya.
Batas sesungguhnya harus ditegakkan di server, seperti dibahas di Bab 36. Gerbang UI adalah untuk pengalaman pengguna; gerbang server adalah untuk keamanan.
Pola ini juga memudahkan eksperimen: mengubah fitur mana yang gratis cukup mengubah satu switch, bukan mencari sepuluh tempat di seluruh kode.
Perlindungan kekayaan intelektual
Bagian ini sering diabaikan sampai ada masalah — dan saat itu biasanya sudah terlambat.
Apa yang bisa dilindungi
| Aset | Perlindungan | Catatan |
|---|---|---|
| Nama & logo | Merek dagang | Perlindungan terkuat untuk aplikasi |
| Kode sumber | Hak cipta | Otomatis, tanpa pendaftaran |
| Desain antarmuka | Hak cipta / desain industri | Terbatas |
| Nama domain | Pendaftaran | Daftarkan lebih awal |
| Ide & konsep | ❌ Tidak bisa | Ide tidak dilindungi |
Poin terakhir penting dan sering mengejutkan: kamu tidak bisa melindungi ide. Siapa pun boleh membuat aplikasi polling. Yang dilindungi adalah ekspresi dari ide itu — kode spesifikmu, nama merekmu, dan logomu.
Merek dagang
Perlindungan paling penting untuk aplikasi, karena nama adalah bagaimana orang menemukanmu.
Di Indonesia, pendaftaran dilakukan melalui DJKI (Direktorat Jenderal Kekayaan Intelektual). Prosesnya:
- Penelusuran — pastikan nama yang kamu inginkan belum terdaftar.
- Pendaftaran — pilih kelas yang tepat (Kelas 9 untuk perangkat lunak, Kelas 42 untuk layanan teknologi).
- Pemeriksaan — bisa memakan waktu 12–24 bulan.
- Publikasi dan penerbitan sertifikat.
Sebelum semua itu, lakukan pemeriksaan mandiri:
- Cari di database DJKI (pdki-indonesia.dgip.go.id)
- Cari di Play Store dan App Store
- Cari di Google
- Periksa ketersediaan domain
- Periksa ketersediaan akun media sosial
Lakukan penelusuran SEBELUM membangun
Menemukan bahwa namamu sudah dipakai orang lain setelah aplikasimu terbit berarti: mengganti nama, kehilangan seluruh peringkat ASO, membingungkan pengguna yang sudah ada, dan berpotensi menghadapi tuntutan hukum.
Lima belas menit penelusuran di awal menghemat semua itu.
Hak cipta kode
Hak cipta atas kodemu muncul otomatis saat kamu menulisnya — tidak perlu mendaftar. Tetapi ada hal yang perlu diperhatikan.
Lisensi dependensi. Setiap paket yang kamu pakai punya lisensi, dan sebagian punya kewajiban.
bash
# Melihat lisensi seluruh dependensi
flutter pub deps --style=compact| Lisensi | Kewajiban |
|---|---|
| MIT, BSD, Apache 2.0 | Sertakan pemberitahuan lisensi. Aman untuk komersial. |
| GPL, AGPL | Mewajibkan kode turunanmu ikut open source. Hindari untuk aplikasi tertutup. |
| LGPL | Boleh ditautkan, tetapi modifikasi pustakanya harus dibagikan |
Menemukan paket berlisensi GPL di aplikasi komersialmu adalah masalah serius yang lebih baik dicegah daripada diperbaiki.
Flutter menyediakan halaman lisensi bawaan:
dart
showLicensePage(
context: context,
applicationName: 'Polling Kita',
applicationVersion: '1.2.0',
applicationIcon: Image.asset('assets/ikon/logo.png', width: 48),
applicationLegalese: '© 2026 Nama Perusahaan',
);Menampilkannya bukan hanya kewajiban hukum untuk beberapa lisensi — ia juga tanda profesionalisme.
Melindungi dari peniruan
Realitasnya: kamu tidak bisa mencegah orang meniru aplikasimu. Yang bisa kamu lakukan adalah membuat peniruan tidak sepadan.
Yang tidak melindungi:
- Menyembunyikan kode. APK bisa dibongkar dengan mudah.
- Obfuskasi. Memperlambat, tidak menghentikan.
- Berharap tidak ada yang memperhatikan.
Yang benar-benar melindungi:
- Merek yang kuat. Orang mencari namamu, bukan fiturmu.
- Efek jaringan. Aplikasi yang bernilai karena penggunanya sulit ditiru — penyalin memulai dari nol pengguna.
- Kecepatan. Terus berkembang lebih cepat daripada penyalin.
- Data dan konten. Sesuatu yang butuh waktu untuk dikumpulkan.
- Hubungan dengan pengguna. Kepercayaan tidak bisa disalin.
Untuk aplikasi polling, efek jaringan adalah pertahanan terkuat: aplikasi polling tanpa pengguna tidak berguna, seberapa pun mirip tampilannya.
Obfuskasi kode
Meskipun bukan perlindungan sesungguhnya, ini tetap layak dilakukan karena gratis:
bash
flutter build appbundle --release \
--obfuscate \
--split-debug-info=build/symbolsSimpan berkas simbol
Obfuskasi mengacak nama kelas dan fungsi, sehingga jejak crash menjadi tidak terbaca. Berkas di build/symbols yang mengembalikannya.
Simpan berkas itu untuk setiap versi yang kamu rilis. Tanpa itu, laporan Crashlytics dari versi tersebut tidak bisa dibaca selamanya.
Unggah ke Crashlytics agar otomatis diterjemahkan:
bash
firebase crashlytics:symbols:upload \
--app=1:123:android:abc \
build/symbolsMelindungi aset
Gambar, ikon, dan animasi di dalam APK bisa diekstrak dengan mudah.
Untuk aset yang benar-benar berharga:
- Muat dari server dengan autentikasi, bukan dibundel di aplikasi.
- Beri watermark pada gambar yang dihasilkan.
- Simpan logika bernilai di server, bukan di aplikasi.
Prinsip umumnya: apa pun yang ada di dalam aplikasi harus dianggap publik.
Aspek hukum yang perlu ada
Terlepas dari model bisnismu, beberapa dokumen ini wajib atau sangat disarankan.
Kebijakan privasi — wajib untuk kedua toko. Harus menyebutkan data apa yang dikumpulkan, untuk apa, dibagikan ke siapa, dan bagaimana pengguna bisa menghapusnya.
Syarat & ketentuan — melindungimu dari penyalahgunaan. Menjelaskan apa yang boleh dan tidak boleh dilakukan pengguna, dan membatasi tanggung jawabmu.
Persetujuan pemrosesan data — kalau kamu punya pengguna di Uni Eropa (GDPR), California (CCPA), atau wilayah dengan aturan serupa.
Penghapusan akun — Google Play mewajibkan aplikasi yang mengizinkan pembuatan akun juga menyediakan cara menghapusnya, termasuk dari luar aplikasi.
dart
Future<void> hapusAkun(String uid) async {
// 1. Hapus data pengguna
await _db.collection('users').doc(uid).delete();
// 2. Hapus konten milik pengguna
final polling =
await _db.collection('polls').where('pemilikId', isEqualTo: uid).get();
final batch = _db.batch();
for (final doc in polling.docs) {
batch.delete(doc.reference);
}
await batch.commit();
// 3. Hapus berkas
await _storage.hapusSemuaMilik(uid);
// 4. Terakhir, hapus akun autentikasi
await FirebaseAuth.instance.currentUser?.delete();
}Urutannya penting: hapus akun Auth terakhir, karena setelah itu kamu kehilangan izin untuk menghapus data lainnya.
Ikhtisar
- Model monetisasi berurutan dari yang paling umum: iklan, langganan, pembelian dalam aplikasi, bayar di muka.
- Iklan dalam konten (rekomendasi relevan) jauh lebih baik daripada iklan standar — terasa membantu, bukan mengganggu.
- Langganan butuh nilai berkelanjutan. Ia hampir wajib kalau aplikasimu punya biaya berjalan per pengguna, seperti panggilan API AI.
- Paket tahunan dengan diskon 30–40% menghasilkan pendapatan di muka dan retensi lebih baik.
- Pada model freemium, garis pemisah menentukan segalanya: versi gratis harus benar-benar berguna, tetapi pengguna serius merasakan batasnya secara alami.
- Definisikan batas fitur di satu tempat (enum + extension), bukan tersebar di seluruh kode.
- Gerbang UI untuk pengalaman, gerbang server untuk keamanan. Keduanya diperlukan.
- Ide tidak bisa dilindungi — yang dilindungi adalah ekspresinya: kode, nama, logo.
- Merek dagang adalah perlindungan terpenting untuk aplikasi. Lakukan penelusuran DJKI, toko aplikasi, dan domain sebelum membangun.
- Periksa lisensi dependensi. GPL dan AGPL mewajibkan kode turunanmu ikut open source.
- Kamu tidak bisa mencegah peniruan. Yang melindungi: merek kuat, efek jaringan, kecepatan, data, dan kepercayaan pengguna.
- Obfuskasi gratis dan layak dilakukan, tetapi simpan berkas simbol atau laporan crash menjadi tidak terbaca selamanya.
- Apa pun yang ada di dalam aplikasi harus dianggap publik.
- Google Play mewajibkan cara menghapus akun. Hapus akun Auth terakhir, setelah semua data lain.
Bagian V selesai. Aplikasimu kini punya jalur dari kode sampai bisnis.
Berikutnya: Bab 42 — Pengantar Flame & Game Loop, membuka Bagian VI tentang game 2D.
Transkrip asli
Disintesis dari 3_flutter-monetize/8_how-to-make-money-with-your-app.md, 13_protecting-intellectual-property.md, 15_case-studies.md, 3_small-update-on-my-own-apps.md, 14_ai-app-development-for-non-developers.md, dan 21_further-resources.md. Lihat PDF Monetize.