Skip to content

Bab 40 — Marketing & Growth

ASO membuat orang menemukanmu ketika mereka sudah mencari. Bab ini membahas segala hal lain: bagaimana orang mengetahui aplikasimu ada, dan bagaimana pengguna yang sudah ada membawa pengguna baru.

Seperti bab sebelumnya, ini bukan tentang kode — tetapi keputusan di sini menentukan apakah aplikasi yang kamu bangun selama berbulan-bulan dipakai seratus orang atau seratus ribu.

Meluncurkan dengan benar

Godaan terbesar saat produkmu hampir selesai adalah meluncurkan sebesar mungkin, secepat mungkin. Ada begitu banyak antisipasi yang menumpuk.

Tahan godaan itu.

Alasannya praktis: sebagian besar produk belum benar-benar siap pada saat pembuatnya merasa siap. Peluncuran besar dengan aplikasi yang masih penuh bug akan menghasilkan gelombang ulasan buruk dan uninstall — dan kesan pertama di toko aplikasi sulit diperbaiki.

Ada tiga tahap peluncuran, dan urutannya penting.

   ┌──────────────────────────────────────────────────────────────┐
   │  1. SOFT LAUNCH  (beta)                                      │
   │     Teman, keluarga, beberapa orang yang paham bidangmu      │
   │     Tujuan: MENDAPAT MASUKAN, bukan pengguna                 │
   │     Durasi: sampai masukan penting habis                     │
   └──────────────────────────┬───────────────────────────────────┘

   ┌──────────────────────────────────────────────────────────────┐
   │  2. PELUNCURAN TERBATAS                                      │
   │     Komunitas relevan, satu wilayah, satu segmen             │
   │     Tujuan: menguji apakah orang asing juga menyukainya      │
   └──────────────────────────┬───────────────────────────────────┘

   ┌──────────────────────────────────────────────────────────────┐
   │  3. PELUNCURAN BESAR                                         │
   │     Media, influencer, iklan berbayar                        │
   │     Tujuan: pertumbuhan. Lakukan HANYA setelah tahap 1 & 2   │
   └──────────────────────────────────────────────────────────────┘

Soft launch

Luncurkan ke lingkaran terdekat: teman, keluarga, dan beberapa orang yang paham bidang aplikasimu.

Tujuannya bukan mendapat pengguna. Tujuannya mendapat orang yang akan mencari lubang di produkmu, mengkritiknya, dan memberitahumu apa yang membingungkan. Kritik itu bukan untuk membuatmu merasa buruk — ia adalah informasi yang paling berharga yang bisa kamu dapat pada tahap ini.

Yang perlu kamu perhatikan saat mengumpulkan masukan:

Jangan menerapkan semua saran. Beberapa masukan datang dari orang yang bukan target penggunamu. Cari pola: kalau tiga orang bingung di tempat yang sama, itu masalah nyata.

Perhatikan apa yang mereka lakukan, bukan apa yang mereka katakan. Orang sering sopan. Amati di mana mereka berhenti, di mana mereka salah ketuk, dan fitur mana yang tidak pernah mereka sentuh.

Iterasi beberapa kali. Perbaiki, minta mereka mencoba lagi, ulangi. Baru lanjut ke tahap berikutnya ketika masukan penting mulai habis.

Peluncuran terbatas

Sekarang kamu butuh orang asing — orang yang tidak punya alasan sosial untuk bersikap baik padamu.

Pilihan yang baik:

  • Komunitas online yang relevan dengan aplikasimu.
  • Satu wilayah geografis saja (banyak pengembang memulai di pasar kecil).
  • Satu segmen pengguna yang sangat spesifik.

Yang kamu cari di tahap ini: apakah orang yang tidak mengenalmu tetap memakainya setelah seminggu? Kalau tidak, peluncuran besar hanya akan memperbesar masalah yang sama.

Peluncuran besar

Baru sekarang: media, influencer, iklan berbayar, Product Hunt.

Kuncinya adalah menumpuk semuanya di hari yang sama. Peringkat toko aplikasi sangat dipengaruhi oleh kecepatan unduhan, bukan hanya totalnya. Seribu unduhan dalam satu hari berdampak jauh lebih besar pada peringkat daripada seribu unduhan yang tersebar selama sebulan.

Virality: pengguna membawa pengguna

Ini cara pertumbuhan yang paling murah dan paling berkelanjutan. Bukan "viral di media sosial" — tetapi orang yang sudah memakai aplikasimu membagikannya ke temannya.

Ada beberapa strategi. Kamu tidak perlu memakai semuanya; pilih yang masuk akal untuk aplikasimu.

1. Buat aplikasi lebih baik ketika dipakai bersama teman

Ini yang paling kuat, karena tidak butuh permintaan sama sekali.

Kalau aplikasimu lebih menyenangkan atau lebih berguna ketika dipakai bersama orang lain, pengguna punya alasan alami untuk mengajak temannya. Kamu tidak perlu memohon.

Contohnya:

  • Aplikasi kesehatan → olahraga bersama, tantangan grup.
  • Game → mode multipemain, papan peringkat teman.
  • Aplikasi polling → polling yang butuh banyak suara agar bermakna.
  • Aplikasi keuangan → berbagi tagihan.

Pertanyaan yang perlu kamu jawab: apa yang membuat aplikasi ini lebih baik kalau temanku juga memakainya?

Kalau jawabannya "tidak ada", pertimbangkan apakah ada fitur yang bisa menciptakannya.

2. Berbagi hasil, bukan aplikasi

Orang enggan membagikan "aplikasi bagus, coba deh". Mereka senang membagikan sesuatu yang mereka buat.

dart
// pubspec.yaml
// share_plus: ^10.1.2

import 'package:share_plus/share_plus.dart';

Future<void> bagikanPolling(Poll poll) async {
  final tautan = 'https://pollingkita.app/p/${poll.id}';

  await Share.share(
    '${poll.judul}\n\n'
    'Bantu aku memutuskan — kasih suaramu di sini:\n$tautan',
    subject: poll.judul,
  );
}

Perhatikan bahwa yang dibagikan adalah polling milik pengguna, bukan aplikasinya. Penerima mengklik karena tertarik pada isinya, lalu menemukan aplikasimu sebagai efek samping.

Membagikan gambar hasil bekerja lebih baik lagi:

dart
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/rendering.dart';
import 'package:path_provider/path_provider.dart';

Future<void> bagikanGambarHasil(GlobalKey kunciWidget, Poll poll) async {
  // Ubah widget menjadi gambar
  final batas = kunciWidget.currentContext!.findRenderObject()
      as RenderRepaintBoundary;
  final gambar = await batas.toImage(pixelRatio: 3.0);
  final byteData = await gambar.toByteData(format: ui.ImageByteFormat.png);
  final bytes = byteData!.buffer.asUint8List();

  // Simpan sementara
  final dir = await getTemporaryDirectory();
  final berkas = File('${dir.path}/hasil_${poll.id}.png');
  await berkas.writeAsBytes(bytes);

  await Share.shareXFiles(
    [XFile(berkas.path)],
    text: 'Hasil polling "${poll.judul}"\n'
        'Buat pollingmu sendiri: https://pollingkita.app',
  );
}

Widget yang akan diubah menjadi gambar dibungkus RepaintBoundary:

dart
final _kunciHasil = GlobalKey();

RepaintBoundary(
  key: _kunciHasil,
  child: KartuHasilPolling(poll: poll),
)

Berbagi hanya berguna kalau tautannya bekerja dengan baik. Penerima yang mengklik tautan harus langsung sampai ke isinya — bukan ke halaman beranda.

yaml
dependencies:
  app_links: ^6.3.2
dart
// lib/data/services/layanan_deep_link.dart
import 'dart:async';
import 'package:app_links/app_links.dart';
import 'package:flutter/material.dart';

class LayananDeepLink {
  LayananDeepLink(this.kunciNavigator);

  final GlobalKey<NavigatorState> kunciNavigator;
  final _appLinks = AppLinks();
  StreamSubscription<Uri>? _langganan;

  Future<void> mulai() async {
    // Tautan yang membuka aplikasi dari keadaan tertutup
    final awal = await _appLinks.getInitialLink();
    if (awal != null) _tangani(awal);

    // Tautan yang tiba saat aplikasi sudah berjalan
    _langganan = _appLinks.uriLinkStream.listen(_tangani);
  }

  void _tangani(Uri uri) {
    // https://pollingkita.app/p/{id}
    final segmen = uri.pathSegments;
    if (segmen.length >= 2 && segmen[0] == 'p') {
      kunciNavigator.currentState?.pushNamed('/poll', arguments: segmen[1]);
    }
  }

  void hentikan() => _langganan?.cancel();
}

Sama seperti push notification di Bab 30, ada dua jalur yang harus ditangani: aplikasi tertutup dan aplikasi sudah berjalan.

Konfigurasi Android:

xml
<!-- android/app/src/main/AndroidManifest.xml -->
<activity ...>
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https"
              android:host="pollingkita.app" />
    </intent-filter>
</activity>

Kalau aplikasi belum terpasang

Deep link hanya bekerja kalau aplikasinya sudah ada di perangkat. Untuk penerima yang belum memasangnya, kamu butuh deferred deep link — mereka diarahkan ke toko aplikasi, lalu setelah memasang, dibawa langsung ke konten yang tadi diklik.

Firebase Dynamic Links dulu menyediakan ini tetapi sudah dihentikan. Alternatif yang tersedia: Branch.io, AppsFlyer OneLink, atau halaman web sederhana yang mendeteksi perangkat dan mengarahkan ke toko yang tepat.

4. Program rujukan

Beri manfaat nyata kepada kedua pihak.

   ❌ "Ajak temanmu!"                (tidak ada alasan)
   ⚠️ "Ajak teman, dapat 1 kredit"   (hanya pengirim untung)
   ✅ "Ajak teman — kalian berdua dapat 1 bulan Pro gratis"

Struktur dua arah bekerja jauh lebih baik karena pengirim tidak merasa sedang memanfaatkan temannya.

dart
Future<void> bagikanKodeRujukan(String kode) async {
  await Share.share(
    'Aku pakai Polling Kita untuk minta pendapat teman-teman.\n\n'
    'Pakai kodeku "$kode" saat daftar, dan kita berdua dapat '
    '1 bulan Pro gratis:\n'
    'https://pollingkita.app/undang/$kode',
  );
}

Rujukan mudah disalahgunakan

Orang akan membuat akun palsu untuk mendapat hadiah. Beberapa perlindungan:

  • Beri hadiah setelah pengguna baru melakukan sesuatu, bukan hanya mendaftar.
  • Batasi jumlah rujukan yang bisa dihadiahi per akun.
  • Verifikasi lewat Cloud Function, jangan lewat aplikasi.
  • Pantau pola mencurigakan — banyak pendaftaran dari satu perangkat.

5. Watermark pada konten yang keluar

Kalau aplikasimu menghasilkan gambar, video, atau berkas, sertakan nama aplikasimu di sana secara halus. Setiap kali konten itu dibagikan, aplikasimu ikut terlihat.

Kuncinya: halus. Watermark besar yang menutupi konten membuat orang enggan membagikannya sama sekali.

Website untuk aplikasi

Situs web sederhana memberi beberapa manfaat sekaligus: tempat menaruh kebijakan privasi (wajib untuk kedua toko), halaman tujuan untuk deep link, dan sumber lalu lintas dari mesin pencari.

Halaman yang perlu ada:

   /                    Beranda — apa aplikasi ini, tombol unduh
   /privasi             Kebijakan privasi (WAJIB)
   /syarat              Syarat & ketentuan
   /dukungan            Cara menghubungi (WAJIB untuk App Store)
   /p/{id}              Halaman konten untuk deep link
   /blog                Opsional, untuk SEO

Membuatnya tidak harus rumit. Beberapa opsi cepat:

  • Halaman statis di GitHub Pages, Netlify, atau Vercel — gratis.
  • Pembuat situs seperti Carrd atau Framer.
  • Flutter Web — kamu bisa membangunnya dengan keterampilan yang sudah ada.

Untuk SEO, targetkan kata kunci yang sama dengan ASO-mu. Orang yang mencari "aplikasi polling" di Google adalah orang yang sama yang mencarinya di Play Store.

Kebijakan privasi bukan opsional

Kedua toko menolak aplikasi tanpa URL kebijakan privasi yang bisa diakses publik. Ia juga harus jujur — Play Store membandingkannya dengan deklarasi Data Safety dan izin yang dipakai aplikasimu.

Kalau aplikasimu mengumpulkan email, lokasi, dan foto, semuanya harus disebutkan.

Saluran pemasaran

Media sosial

Yang bekerja: membangun sesuatu di depan umum. Membagikan proses, masalah yang kamu temui, dan bagaimana kamu menyelesaikannya menarik lebih banyak perhatian daripada mengiklankan produk jadi.

Yang tidak bekerja: memposting "unduh aplikasiku" berulang kali.

Pilih satu atau dua platform tempat target penggunamu benar-benar berada, lalu konsisten di sana. Hadir setengah-setengah di enam platform lebih buruk daripada hadir sungguhan di satu.

YouTube

Video demo yang baik bertahan lama dan terus mendatangkan pengguna selama bertahun-tahun — berbeda dari postingan media sosial yang hilang dalam sehari.

Jenis video yang bekerja:

  • Demo singkat (30–60 detik) untuk halaman toko aplikasi.
  • Tutorial yang menyelesaikan masalah nyata, dengan aplikasimu sebagai solusinya.
  • Video di balik layar tentang cara kamu membangunnya.

Optimalkan judul dan deskripsi untuk pencarian YouTube — ia adalah mesin pencari terbesar kedua setelah Google.

Influencer

Kesalahan umum adalah mengejar akun dengan pengikut terbanyak. Yang lebih efektif adalah mikro-influencer — akun dengan 5.000 sampai 50.000 pengikut di bidang yang sangat relevan.

Alasannya: keterlibatan mereka jauh lebih tinggi, audiensnya lebih spesifik, dan biayanya jauh lebih rendah. Sering kali mereka bersedia mencoba aplikasimu gratis kalau memang relevan.

Cara menghubungi yang bekerja:

   ❌ "Halo, tolong promosikan aplikasi saya."

   ✅ "Halo [nama], saya lihat video kamu tentang [topik spesifik].
      Saya baru membuat aplikasi yang menyelesaikan [masalah yang
      kamu sebutkan di video itu]. Kalau tertarik, saya senang
      memberikan akses Pro gratis — tanpa kewajiban apa pun untuk
      membuat konten tentangnya."

Yang membedakan: menunjukkan kamu benar-benar mengenal kontennya, dan tidak menuntut apa pun.

Iklan berbayar

Jangan memulai dari sini. Iklan memperkuat apa yang sudah ada — kalau retensimu buruk, iklan hanya membuatmu membayar untuk pengguna yang langsung pergi.

Syarat sebelum mulai beriklan:

  • Retensi hari ke-1 di atas 25%
  • Retensi hari ke-7 di atas 10%
  • Kamu tahu berapa nilai satu pengguna bagimu (LTV)
  • Ada cara mengukur dari mana pengguna datang

Kalau salah satu belum terpenuhi, perbaiki dulu produknya.

Ketika sudah siap:

Google Ads (Universal App Campaigns) untuk Android — kamu memberi materi iklan dan anggaran, Google mengoptimalkan penempatannya.

Apple Search Ads untuk iOS — muncul di hasil pencarian App Store. Sering punya biaya per pemasangan yang lebih rendah karena menargetkan orang yang sudah mencari.

Mulai dengan anggaran kecil untuk mengukur biaya per pemasangan, lalu tingkatkan hanya kalau angkanya masuk akal dibandingkan nilai seumur hidup pengguna.

Menjaga pengguna tetap kembali

Mendapat pengguna itu mahal. Mempertahankannya jauh lebih murah, dan lebih menentukan.

   PERTUMBUHAN NYATA = akuisisi > kehilangan

   Menambah 1.000 pengguna per bulan tetapi kehilangan 900
   = pertumbuhan 100 per bulan

   Menambah 500 per bulan dan kehilangan 100
   = pertumbuhan 400 per bulan

Aplikasi kedua tumbuh empat kali lebih cepat dengan separuh biaya akuisisi.

Onboarding

Sebagian besar pengguna yang hilang, hilang di lima menit pertama.

   ❌ ONBOARDING BURUK           ✅ ONBOARDING BAIK
   ──────────────────────        ──────────────────────
   Wajib daftar sebelum          Boleh mencoba dulu,
   melihat apa pun               daftar saat diperlukan

   Minta semua izin              Minta izin saat fitur
   di layar pertama              itu benar-benar dipakai

   5 layar tutorial              Tunjukkan sambil jalan

   Layar kosong                  Data contoh atau
   setelah masuk                 ajakan yang jelas

Poin kedua penting dan sering dilanggar: meminta izin lokasi, kamera, dan notifikasi sekaligus di layar pertama menyebabkan penolakan yang jauh lebih tinggi daripada memintanya saat pengguna mengklik fitur yang membutuhkannya — seperti dibahas di Bab 32.

Notifikasi yang tidak mengganggu

Push notification bisa mengembalikan pengguna, atau membuat mereka menghapus aplikasimu. Perbedaannya ada pada relevansi.

   ❌ "Kami merindukanmu! Buka aplikasi sekarang"
   ❌ "Diskon 50%! Jangan lewatkan!"  (kirim setiap hari)

   ✅ "Polling kamu 'Makan di mana?' sudah dapat 12 suara"
   ✅ "Budi memberi suara pada pollingmu"
   ✅ "Polling kamu berakhir dalam 1 jam"

Yang membedakan: notifikasi kedua tentang sesuatu yang pengguna lakukan, bukan tentang keinginanmu agar mereka kembali.

Beri pengguna kendali penuh atas jenis notifikasi yang mereka terima. Pengguna yang bisa mematikan sebagian notifikasi lebih jarang mematikan semuanya.

Mengukur retensi

   Retensi D1  = pengguna yang kembali keesokan harinya
   Retensi D7  = kembali dalam 7 hari
   Retensi D30 = kembali dalam 30 hari

Angka acuan yang umum dipakai:

RetensiBurukSedangBaik
D1< 20%20–35%> 40%
D7< 8%8–15%> 20%
D30< 3%3–8%> 10%

Angka ini bervariasi menurut kategori — game punya D1 lebih tinggi, aplikasi utilitas punya D30 lebih tinggi. Yang lebih penting daripada membandingkan dengan orang lain adalah memperbaiki angkamu sendiri dari waktu ke waktu.

Yang perlu diukur

Pasang analitik sejak awal, tetapi ukur hal yang benar.

dart
import 'package:firebase_analytics/firebase_analytics.dart';

final analitik = FirebaseAnalytics.instance;

// Peristiwa yang benar-benar berarti
await analitik.logEvent(
  name: 'polling_dibuat',
  parameters: {
    'jumlah_opsi': poll.opsi.length,
    'punya_gambar': poll.urlGambar != null ? 1 : 0,
    'punya_lokasi': poll.lokasi != null ? 1 : 0,
  },
);

await analitik.logEvent(name: 'polling_dibagikan');
await analitik.logEvent(name: 'suara_diberikan');
await analitik.logEvent(name: 'onboarding_selesai');

Ukur peristiwa, bukan tampilan layar

Menghitung berapa kali sebuah layar dibuka jarang memberi tahu apa pun yang berguna.

Yang berguna adalah peristiwa yang menandakan nilai: pengguna membuat polling, membagikannya, mendapat suara pertama. Metrik ini yang menjawab "apakah aplikasiku benar-benar berguna?"

Tetapkan satu metrik utama yang paling mewakili keberhasilan aplikasimu, dan pantau itu di atas segalanya.

Ikhtisar

  • Tahan godaan meluncurkan besar terlalu cepat. Urutannya: soft launch (masukan) → peluncuran terbatas (orang asing) → peluncuran besar (pertumbuhan).
  • Soft launch bertujuan mendapat masukan, bukan pengguna. Cari pola dalam kritik; jangan terapkan semua saran.
  • Saat peluncuran besar, tumpuk semua saluran di hari yang sama — peringkat toko dipengaruhi kecepatan unduhan, bukan hanya total.
  • Virality terkuat: buat aplikasi lebih baik ketika dipakai bersama teman. Ini menghilangkan kebutuhan meminta.
  • Orang membagikan hasil yang mereka buat, bukan aplikasinya. Bagikan polling, bukan "aplikasi bagus, coba deh".
  • Deep link harus menangani dua jalur: aplikasi tertutup dan aplikasi sudah berjalan.
  • Program rujukan harus menguntungkan kedua pihak, dan diverifikasi di server agar tidak disalahgunakan.
  • Situs web wajib untuk kebijakan privasi — kedua toko menolak tanpa itu.
  • Mikro-influencer (5–50 ribu pengikut) sering lebih efektif daripada akun besar: keterlibatan lebih tinggi, biaya jauh lebih rendah.
  • Jangan beriklan sebelum retensi sehat. Iklan memperkuat apa yang sudah ada, termasuk kebocoran.
  • Sebagian besar pengguna hilang di lima menit pertama. Izinkan mencoba sebelum daftar, dan minta izin saat fiturnya dipakai — bukan di layar pertama.
  • Notifikasi yang baik tentang sesuatu yang pengguna lakukan, bukan tentang keinginanmu agar mereka kembali.
  • Ukur peristiwa yang menandakan nilai, bukan tampilan layar. Tetapkan satu metrik utama.
  • Retensi lebih menentukan daripada akuisisi: menambah 500 dan kehilangan 100 mengalahkan menambah 1.000 dan kehilangan 900.

Berikutnya: Bab 41 — Model Bisnis & Perlindungan IP.

Transkrip asli

Disintesis dari 3_flutter-monetize/6_launching-your-app-like-a-pro.md, 9_virality-from-inside-the-app.md, 10_website-for-your-app-with-ai.md, 11_influencer-marketing-for-apps.md, 12_additional-hacks-to-promote-your-app.md, 16_social-media-automation.md, 17_youtube-marketing-for-apps.md, 18_google-ads-for-android-app.md, 19_apple-search-ads-for-ios-app.md, dan 5_google-seo-for-your-app.md. Lihat PDF Monetize.

Rangkuman pembelajaran pribadi, disusun ulang dari beberapa kursus Flutter.