# Retention Messaging API Apple: pesan sebelum langganan batal

> Retention Messaging API Apple menampilkan pesanmu saat pelanggan mengetuk Cancel Subscription. Format, syarat, akses, dan cara memasangnya.

Halaman asli: [Retention Messaging API Apple: pesan sebelum langganan batal](https://devoria.fr/id/blog/retention-messaging-api-apple-pesan-pembatalan-langganan)
Penulis: [Mehdi Azizi](https://devoria.fr/id/mehdi-azizi)
Terbit: 2026-11-04
Revisi konten terakhir: 2026-11-04


Retention Messaging API adalah layanan Apple yang bekerja dari server ke server. Layanan ini menampilkan pesanmu kepada pelanggan saat ia mengetuk Cancel Subscription. Pesan muncul di halaman konfirmasi, sebelum pembatalan diproses. **Pesan ini bisa mengingatkan nilai langgananmu, menawarkan paket lain atau promotional offer, tapi tombol untuk membatalkan tetap selalu ada.** API ini berstatus pratinjau sejak Juli 2025, dengan akses lewat permintaan. Apple juga sudah mengumumkan versi yang lebih sederhana di App Store Connect untuk musim gugur 2026.

Panduan ini menjelaskan apa yang ditampilkan API, sejak kapan API ini ada, siapa yang bisa memakainya, apa syaratnya, dan cara memasangnya. Semuanya diambil dari dokumentasi Apple dan sesi WWDC26 yang membahasnya, yang saya baca ulang pada 3 November 2026.

Saya menjual langganan di aplikasi iOS saya: Solys, pemblokir media sosial, TradaZen, simulator trading, Nolera, aplikasi coba pakaian dengan AI, dan Vigie. Saya mengajukan akses API untuk keempatnya pada 25 Oktober 2026, dan sudah menyiapkan pesannya dalam semua bahasa aplikasi. Per 28 Oktober, persetujuan Apple belum datang. Jadi panduan ini menjelaskan aturannya dan persiapan saya, belum hasilnya.

## Apa yang dilakukan Retention Messaging API

Menurut [dokumentasi Apple](https://developer.apple.com/documentation/retentionmessaging), API ini memungkinkan kamu memilih pesan yang ditampilkan sistem saat pelanggan membuka halaman detail langganan dan mungkin akan membatalkannya. Kamu menyiapkan pesan lebih dulu, untuk setiap produk dan setiap bahasa.

Alurnya selalu sama:

1. Pelanggan membuka langganannya, misalnya di Apple Account, Subscriptions, atau dari App Store.
2. Ia mengetuk Cancel Subscription.
3. Sistem menampilkan halaman konfirmasi (Confirm Cancellation) beserta pesanmu.
4. Ia tetap bisa membatalkan, mempertahankan langganannya, atau menerima apa yang ditawarkan pesanmu.

Pesan ini tampil di iOS 15.1 dan iPadOS 15.1 atau lebih baru, di visionOS 1, dan di macOS 14 atau lebih baru.

## Sejak kapan, dan untuk siapa

| Tanggal     | Apa yang berubah, menurut Apple                              |
| ----------- | ------------------------------------------------------------ |
| 16 Jul 2025 | Versi 1.0: pratinjau pertama API                             |
| 9 Des 2025  | Uji performa server untuk real-time                          |
| 31 Mar 2026 | Poin-poin dalam pesan, pengaturan alamat real-time lewat API |
| 27 Apr 2026 | Dukungan langganan bulanan dengan komitmen 12 bulan          |
| Juni 2026   | WWDC26: pengumuman modul di App Store Connect                |

Tanggal-tanggal ini berasal dari [catatan versi API](https://developer.apple.com/documentation/retentionmessaging/retention-messaging-changelog), kecuali yang terakhir, yang diambil dari sesi WWDC26. API ini masih pratinjau: dokumentasinya mengarahkan ke [formulir permintaan akses](https://developer.apple.com/contact/request/retention-messaging-api/), yang mengharuskan kamu login ke akun developer.

Di WWDC26, sesi [Explore Retention Messaging in App Store Connect](https://developer.apple.com/videos/play/wwdc2026/309/) memperkenalkan modul yang bisa diatur tanpa kode, di App Store Connect. Apple menyebutnya "terbuka untuk semua". Versi real-time tetap lewat permintaan. [Halaman fitur baru App Store](https://developer.apple.com/app-store/whats-new/) mengumumkan modul ini untuk "musim gugur ini". **Per 3 November 2026, bantuan App Store Connect belum punya satu halaman pun tentang modul ini, dan modulnya belum muncul di akun saya pada 28 Oktober.**

API ini ditujukan untuk aplikasi yang menjual langganan auto-renewable. Ini bukan khusus untuk penerbit besar: RevenueCat mencatat dalam [studi atas 22 juta pesan](https://www.revenuecat.com/blog/growth/apple-retention-messaging-benchmarks) bahwa aplikasi kecil juga bisa mengajukan akses.

## 4 jenis pesan

| Jenis              | Yang dilihat pelanggan                                   | Pesan default | Real-time |
| ------------------ | -------------------------------------------------------- | ------------- | --------- |
| Teks               | Judul, teks, hingga lima poin                            | Ya            | Ya        |
| Teks dengan gambar | Sama, ditambah gambar                                    | Ya            | Ya        |
| Ganti paket        | Teks dan langganan lain dari grup yang sama              | Tidak         | Ya        |
| Promotional offer  | Teks dan penawaran untuk lanjut dengan harga lebih murah | Tidak         | Ya        |

Menurut halaman tentang [persiapan pesan](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messages), pesan default hanya boleh berupa teks, dengan atau tanpa gambar. **Dengan API, menawarkan promo atau paket lain mengharuskan kamu merespons secara real-time.** Modul yang diumumkan di App Store Connect nantinya akan menyediakan pesan dengan penawaran, tanpa server.

Promotional offer adalah penawaran yang kamu buat di App Store Connect. Menurut [bantuan tentang promotional offer](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions), penawaran ini ditujukan untuk pelanggan saat ini dan pelanggan lama. Dalam pesan retensi, server kamulah yang menandatanganinya, menurut halaman tentang persiapan pesan. Ganti paket menawarkan langganan dari grup yang sama. Kalau kamu baru mengenal penawaran ini, baca dulu panduan saya tentang [kode penawaran dan promotional offer](https://devoria.fr/id/blog/offer-code-app-store-connect-kode-promo).

## Apa yang bisa kamu tampilkan: batas persisnya

| Elemen              | Batas dari Apple                                                |
| ------------------- | --------------------------------------------------------------- |
| Judul               | Maksimal 66 karakter                                            |
| Teks                | Maksimal 144 karakter                                           |
| Poin                | Maksimal 5                                                      |
| Gambar lebar penuh  | PNG tanpa transparansi, lebar 3.840 px, tinggi 160 sampai 2.160 |
| Gambar poin         | 1.024 × 1.024 px                                                |
| Gambar per aplikasi | Maksimal 2.000                                                  |

Batas panjang berasal dari deskripsi [body request pengiriman pesan](https://developer.apple.com/documentation/retentionmessaging/uploadmessagerequestbody), dan format gambar dari halaman tentang [pengiriman gambar](https://developer.apple.com/documentation/retentionmessaging/upload-image). Apple juga meminta gambar yang tampil baik di mode terang maupun mode gelap.

Setiap pesan dan gambar ditinjau oleh Apple. Statusnya berubah dari `PENDING` menjadi `APPROVED`, dan sistem hanya menampilkan yang sudah disetujui. Di sandbox, persetujuan terjadi otomatis. Dokumentasinya memberi aturan konten yang jelas: jangan mengirim apa pun yang menyesatkan atau tidak akurat.

## Syarat yang harus dipenuhi

- **Satu pesan default untuk setiap produk, di setiap bahasa.** Tanpa itu, tidak ada yang tampil dalam bahasa tersebut. Pesan ini juga jadi cadangan kalau server kamu tidak merespons.
- **Pesan dan gambar yang sudah disetujui** sebelum apa pun ditayangkan.
- **Untuk real-time, server yang cepat.** Halaman tentang [pemasangan alamat real-time](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messaging-endpoint) mensyaratkan sertifikat SSL yang valid, TLS 1.2, dan respons di bawah 700 ms di produksi. Lebih dari itu, request gagal dan pesan default yang tampil.
- **Uji performa yang lolos di sandbox**, sebelum kamu mendaftarkan alamat produksi.
- **Verifikasi aplikasi.** Setiap request dari Apple berisi ID aplikasi, `appAppleId`. Kalau tidak cocok dengan milikmu, Apple meminta kamu untuk tidak merespons.

Request real-time memberimu ID transaksi asli, produk, dan bahasa perangkat. Kamu yang memilih pesannya, sesuai aturanmu sendiri.

## Memasang Retention Messaging: tiga jalur

| Jalur                   | Untuk siapa                          | Yang dibutuhkan                          |
| ----------------------- | ------------------------------------ | ---------------------------------------- |
| Modul App Store Connect | Semua orang, setelah dirilis         | Tanpa kode; teks, gambar, atau penawaran |
| API, dengan server kamu | Yang punya back-end                  | Akses Apple, alamat HTTPS, uji performa  |
| API, lewat RevenueCat   | Aplikasi yang sudah pakai RevenueCat | Akses Apple, pengaturan di dashboard     |

Kalau beberapa pengaturan ada bersamaan, Apple menjelaskan urutannya di sesi WWDC26: respons real-time lebih dulu. Kalau tidak ada atau formatnya salah, pengaturan App Store Connect. Kalau itu juga tidak ada, pesan default yang diatur lewat API.

### Dengan server kamu sendiri

1. Ajukan akses lewat formulir Apple.
2. Kirim gambar-gambarmu, lalu pesan-pesanmu, masing-masing dengan judul dan teks.
3. Tunggu persetujuannya, lalu daftarkan satu pesan default untuk setiap langganan dan setiap bahasa.
4. Untuk real-time, buat alamat `Get Retention Message` di server kamu dan daftarkan di sandbox.
5. Jalankan [uji performa](https://developer.apple.com/documentation/retentionmessaging/initiate-performance-test) di sandbox, dengan transaksi uji.
6. Setelah ujinya lolos, daftarkan alamat produksimu.

### Dengan RevenueCat

Ini jalur yang saya pilih: tidak perlu menulis server, dan aplikasi saya memang sudah memakai RevenueCat, seperti yang saya jelaskan di [RevenueCat dan langganan in-app iOS](https://devoria.fr/id/blog/revenuecat-langganan-in-app-ios). Menurut [dokumentasi RevenueCat](https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api):

1. Di formulir Apple, alamat yang perlu kamu isi adalah alamat yang ditampilkan RevenueCat di pengaturan aplikasi App Store kamu.
2. Setelah disetujui, buka Lifecycle, lalu Retention, dan hubungkan alamat sandbox.
3. Jalankan uji performa dengan langganan sandbox atau TestFlight yang aktif. Prosesnya bisa sampai satu jam.
4. Buat dulu pesan default, bahasa demi bahasa.
5. Setelah itu tambahkan pesan real-time, dengan aturan. Salah satunya, "Is in free trial", menyasar orang yang sedang dalam uji coba gratis.
6. Pindah ke produksi: pengaturan sandbox tidak ikut terbawa, jadi pesannya harus dibuat ulang.

## Menulis pesan yang mempertahankan tanpa menjebak

Teksnya tetap dan ditinjau Apple sebelum ditampilkan. Jadi teks ini tidak bisa membicarakan orang yang membacanya, atau hari saat ia membacanya. Ini pesan default yang saya siapkan untuk TradaZen, dalam bahasa Prancis:

```text
Judul (57 karakter):
Tu voulais apprendre à trader, et tu repars à l'aveugle ?

Teks (127 karakter):
Sans entraînement, ton vrai argent paie chaque erreur. Ici, elles ne coûtent rien. Ta série, ta ligue et tes leçons s'arrêtent.
```

Aturan yang saya tetapkan untuk keempat aplikasi saya:

- **Judul mengingatkan orang pada tujuannya**, dalam bentuk pertanyaan. Judul tidak membuatnya malu.
- **Teks menyebutkan dengan tepat apa yang berhenti.** Saya menulis bahwa akses "terkunci" kalau datanya tetap ada, bukan bahwa data akan "dihapus".
- **Tanpa kata keterangan waktu** seperti "besok" atau "hari ini": teks yang sama tampil kapan saja selama periode langganan.
- **Tanpa janji keuntungan**, tanpa urgensi palsu. Judul pertama yang menjanjikan hidup berubah berkat trading sudah saya buang sebelum dikirim. [Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) melarang segala praktik manipulatif, dan paywall TradaZen pernah ditolak karena alasan ini, seperti yang saya ceritakan di [guideline 5.6 dan paywall](https://devoria.fr/id/blog/guideline-5-6-paywall-ditolak-app-store).
- **Setiap bahasa punya teksnya sendiri**, memakai kosakata aplikasi versi terjemahannya, dan dihitung sampai ke karakter terakhir.

Untuk TradaZen, saya juga menyiapkan pesan real-time untuk orang yang sedang uji coba di langganan tahunan. Pesan ini akan menawarkan paket tahunan yang lebih murah dari grup yang sama, karena angka saya menunjukkan bahwa mereka memakai aplikasi sesering pengguna yang membayar: yang mereka tolak adalah harganya. Pengaturan ini menunggu persetujuan Apple.

## Apa yang bisa diharapkan

Jangan berharap keajaiban. Apple menyebut save rate sebagai porsi pelanggan yang tetap berlangganan setelah sampai di halaman konfirmasi. Di sesi WWDC26, Apple menyebutkan bahwa langganan yang memakai Retention Messaging naik rata-rata 1,4 poin pada rate ini. Pesan dengan promotional offer mencatat kenaikan terbaik, 5,5 poin, dan hasilnya berbeda-beda antar developer. Sementara itu, studi RevenueCat mencatat bahwa pelanggan hanya menerima sekitar 1,1% promotional offer dan 0,6% tawaran ganti paket.

Jadi pesan ini tidak menggantikan kerja di tahap sebelumnya. Uji coba gratis yang dibatalkan dalam hitungan menit ditentukan oleh paywall dan sesi-sesi pertama: penyebab dan solusinya ada di panduan saya tentang [uji coba gratis yang dibatalkan](https://devoria.fr/id/blog/uji-coba-gratis-dibatalkan-ios-penyebab-solusi), dan cara membuat uji cobanya ada di [introductory offer](https://devoria.fr/id/blog/introductory-offer-app-store-connect-uji-coba-gratis-ios).

## Siapkan langgananmu sebelum pesannya

[iOS & Android Kit](https://devoria.fr/id/kits/ios) berangkat dari kode awal aplikasi saya: onboarding, paywall, dan langganan sudah dikodekan, dan alur empat langkahnya membawamu sampai ke App Store, sesuai ritmemu. Seluruh rangkaiannya, dari produk di App Store Connect sampai paywall, dijelaskan di halaman [langganan in-app iOS](https://devoria.fr/id/expertise/langganan-in-app-ios).

Kalau kamu sedang menyiapkan rilis pertamamu, [ikuti diagnosis gratisnya](https://devoria.fr/id/diagnostic): diagnosis ini memberitahumu apa yang sebenarnya menghambat proyekmu dan mengirimkan checklist anti-penolakan Apple milik saya.

## Pertanyaan umum

### Apa itu Retention Messaging API dari Apple?

Ini layanan server ke server yang memilih pesan yang ditampilkan kepada pelanggan saat ia mengetuk Cancel Subscription. Pesan tampil di halaman konfirmasi, sebelum pembatalan. Pesan ini bisa mengingatkan nilai langganan, menawarkan paket lain, atau promotional offer.

### Apakah Retention Messaging tersedia untuk semua developer?

API ini masih pratinjau, dengan akses lewat permintaan ke Apple. Di WWDC26, Apple mengumumkan modul di App Store Connect yang terbuka untuk semua, dijadwalkan untuk musim gugur 2026. Per 3 November 2026, bantuan App Store Connect belum menjelaskannya.

### Di versi iOS berapa pesan ini tampil?

Di iOS 15.1 dan iPadOS 15.1 atau lebih baru, di visionOS 1, dan di macOS 14 atau lebih baru. Di perangkat yang lebih lama, pembatalan terjadi tanpa pesan.

### Apakah pesan ini menghalangi pelanggan membatalkan?

Tidak. Halaman konfirmasi tetap punya tombol untuk membatalkan. Pelanggan juga bisa mempertahankan langganannya, atau menerima penawaran atau paket yang diusulkan.

### Bisakah menawarkan diskon saat pembatalan?

Bisa. Dengan API, itu berupa pesan promotional offer, hanya lewat real-time: penawarannya dibuat di App Store Connect dan ditandatangani oleh server kamu. Modul yang diumumkan di App Store Connect juga memungkinkan pesan dengan penawaran. Sedangkan ganti paket menawarkan langganan lain dari grup yang sama.

### Berapa karakter untuk pesan retensi?

Judul maksimal 66 karakter, teks 144. Kamu bisa menambahkan hingga lima poin dan satu gambar PNG tanpa transparansi. Setiap bahasa butuh pesan default sendiri.

### Apakah perlu server untuk memakai Retention Messaging?

Untuk pesan default, tidak perlu meng-hosting alamat apa pun: cukup panggil API untuk mengirim dan mendaftarkannya. Dengan RevenueCat, RevenueCat yang berperan sebagai server. Real-time membutuhkan alamat HTTPS yang merespons di bawah 700 ms. Modul yang diumumkan di App Store Connect bisa diatur tanpa kode.


## Proyekmu

[iOS & Android Kit](https://devoria.fr/id/kits/ios): Bikin app iPhone dan Android kamu dengan Claude Code: kode awal dari app-app saya, langkah demi langkah sampai ke store, dan semua kit. Rp 1.999.000.

[Diagnosis: apa yang memisahkanmu dari app iPhone-mu](https://devoria.fr/id/diagnostic): 7 pertanyaan, 60 detik: kamu tahu apa yang benar-benar menghambatmu merilis app iPhone, jalurmu dalam 4 tahap, dan kit yang cocok untukmu.
