Lompat ke konten

Membuat Kelompok Pembelian iOS

GitHub

Kelompok langganan sangat penting untuk mengorganisir dan mengelola beberapa tingkat langganan di aplikasi iOS Anda. Memahami bagaimana mereka bekerja sangat penting untuk menerapkan fungsi upgrade, penurunan, dan crossgrade.

Kelompok langganan adalah kumpulan langganan terkait yang pengguna dapat memilih antara. Pengguna hanya dapat berlangganan satu langganan dalam kelompok pada suatu waktu. Ketika mereka berganti langganan, Apple yang mengelola transisi secara otomatis.

Kelompok langganan memungkinkan:

  • Pengaturan harga berjenjang: Menawarkan paket dasar, premium, dan ultimate
  • Durasi yang berbedaPilihan bulanan, tahunan, dan seumur hidup
  • Logika peningkatan/kurangnyaPengaturan otomatis perubahan langganan
  • Pengelolaan yang sederhanaPengelompokan langganan terkait

Dalam sebuah kelompok, setiap langganan harus dinilai dari nilai tertinggi (tingkat 1) hingga nilai terendah. Peringkat ini menentukan bagaimana perubahan langganan diklasifikasikan:

Hirarki kelompok langganan

Tingkat 1 Nilai Tertinggi

  • Premium Tahunan ($99,99/tahun)
  • Ultimate Bulanan ($19,99/bulan)

Tingkat 2 Nilai Menengah

  • Standar Tahunan ($49,99/tahun)
  • Premium Bulanan ($9,99/bulan)

Tingkat 3 Nilai Terendah

  • Dasar Tahunan ($29,99/tahun)
  • Standar Bulanan ($4,99/bulan)

Apple secara otomatis mengelola tiga jenis perubahan langganan berdasarkan tingkat peringkat:

Mengalihkan ke langganan tingkat lebih tinggi (misalnya level 2 → level 1). Behavior:

Berlaku

  • langsung Pengguna menerima
  • pengembalian denda prorata __CAPGO_KEEP_0__ Waktu yang tersisa
  • Langganan baru dimulai segera

Contoh:

// User currently has: Standard Monthly (Level 2)
// User upgrades to: Premium Annual (Level 1)
// Result: Immediate access to Premium, refund for unused Standard time

2. Downgrade

Bab 2. Downgrade

Mengalihkan ke suatu langganan dengan tingkat yang lebih rendah (misalnya, level 1 → level 2). Behavior:

Berlaku pada tanggal

  • renewal berikutnya __CAPGO_KEEP_0__
  • User tetap mempertahankan langganan saat ini hingga periode berakhir
  • Langganan baru akan dimulai secara otomatis setelah berakhirnya masa berlaku

Contoh:

// User currently has: Premium Annual (Level 1)
// User downgrades to: Standard Monthly (Level 2)
// Result: Premium access continues until annual renewal date, then switches

3. Crossgrade

Bab 3. Crossgrade

Mengganti ke langganan lainnya di tingkat yang sama.

Perilaku tergantung pada durasi:

Durasi Berbeda → Berperilaku seperti penurunan

  • Terdapat efek pada tanggal pembayaran ulang berikutnya
  • Contoh: Premium Bulanan (Level 1) → Premium Tahunan (Level 1)

Durasi yang sama → Berperilaku seperti upgrade

  • Terdapat efek segera
  • Contoh: Premium Bulanan (Level 1) → Ultimate Bulanan (Level 1)
  1. Navigasi ke Pembayaran

    Pilih aplikasi Anda di App Store Connect, kemudian pilih Monetize > Pembayaran Pilih aplikasi Anda di App Store Connect, kemudian pilih Monetize > Pembayaran.

  2. Membuat Kelompok

    Klik + Klik tombol berikutnya di samping “Kelompok Langganan” untuk membuat kelompok baru.

  3. Nama Kelompok

    Pilih nama yang deskriptif yang merefleksikan langganan yang terkandung:

    • “Akses Premium”
    • “Rencana Penyimpanan di Cloud”
    • “Fitur Pro”
  4. Tambahkan Langganan

    Setelah membuat kelompok, tambahkan langganan individu ke dalamnya. Setiap langganan akan memiliki peringkat level.

  5. Tetapkan Peringkat Level

    Tata langganan dari nilai tertinggi (1) ke nilai terendah. Pertimbangkan:

    • Rencana tahunan biasanya lebih tinggi daripada bulanan
    • Tingkat harga yang lebih tinggi rank di atas yang lebih rendah
    • Tingkat ultimate/premium rank tertinggi

Plugin native-purchases secara otomatis mengelola logika grup langganan:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch all subscriptions in a group
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly', 'premium_annual', 'ultimate_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Display current subscription using StoreKit transactions
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSubs = purchases.filter((purchase) => purchase.isActive);
// Detect pending downgrade/cancellation (StoreKit sets willCancel === true)
const pendingChange = purchases.find((purchase) => purchase.willCancel === true);
if (pendingChange) {
console.log('Subscription will stop auto-renewing on', pendingChange.expirationDate);
}
// Purchase (StoreKit handles upgrades/downgrades automatically)
await NativePurchases.purchaseProduct({
productIdentifier: 'premium_annual',
productType: PURCHASE_TYPE.SUBS,
});
// Listen for StoreKit updates (fires on upgrades/downgrades/refunds)
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription updated:', transaction);
});
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Get current subscription info
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const currentSubscription = purchases.find(
(purchase) => purchase.subscriptionState === 'subscribed',
);
if (currentSubscription) {
// StoreKit reports if user cancelled auto-renew
if (currentSubscription.willCancel) {
console.log(
`User cancelled. Access remains until ${currentSubscription.expirationDate}`,
);
}
if (currentSubscription.isUpgraded) {
console.log('User recently upgraded to this plan.');
}
}
// Listen for automatic upgrades/downgrades
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription changed!', transaction);
if (transaction.subscriptionState === 'revoked') {
revokeAccess();
} else if (transaction.isActive) {
unlockPremiumFeatures();
}
});

Selalu komunikasikan perilaku perubahan dengan jelas:

For Upgrade:

“Anda akan mendapatkan akses langsung ke fitur Premium. Kami akan menghitung ulang langganan Anda saat ini.”

For Downgrade:

“Anda akan tetap memiliki akses Premium hingga [tanggal perpanjangan], kemudian beralih ke Standar.”

For Crossgrade:

“Rencana Anda akan berubah ke pembayaran tahunan pada perpanjangan berikutnya pada [tanggal].”

Pakai Apple’s App Store Server Notifications v2 atau backend validasi bukti pembelian Anda sendiri untuk menggandakan perubahan StoreKit di database Anda. Pasang notifikasi server dengan transactionUpdated pengguna dan backend tetap sinkron.

  • Tetapkan langganan terkait di kelompok yang sama
  • Jangan campurkan fitur yang tidak terkait (misalnya penyimpanan dan penghapusan iklan)
  • Buat kelompok terpisah untuk setiap set fitur
  • Langganan tahunan → Level lebih tinggi daripada bulanan (untuk tingkat yang sama)
  • Tingkat harga yang lebih tinggi → Level lebih tinggi
  • Perhatikan nilai, bukan hanya harga
  • Tampilkan langganan saat ini secara jelas
  • Tampilkan semua opsi yang tersedia di grup
  • Indikasikan perubahan mana yang segera vs. pada masa perbaharuan
  • Mudahkan pengguna untuk berganti antar rencana
  • Uji semua skenario peningkatan
  • Uji semua skenario penurunan
  • Verifikasi perilaku crossgrade
  • Periksa webhook berjalan

Periksa 1: Tiga Tingkat Rencana Bulanan

Judul: Skenario 1: Tiga Tingkat Rencana Bulanan
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Dasar → Premium: Naikkan (langsung)
  • Premium → Ultimate: Naikkan (langsung)
  • Ultimate → Premium: Turunkan (pada perpanjangan)
  • Dasar → Ultimate: Naikkan (langsung)

Skenario 2: Rencana Durasi Campuran

Judul: Skenario 2: Rencana Durasi Campuran
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Per Bulanan → Per Tahun: Mengubah Kelas (pada perpanjangan)
  • Tahunan → Per Bulanan: Menurun (pada perpanjangan)

Skenario 3: Multi-Tingkat Multi-Durasi

Judul Bagian “Skenario 3: Multi-Tingkat Multi-Durasi”
Level 1: Ultimate Annual ($199/year)
Level 2: Ultimate Monthly ($19.99/month)
Level 3: Premium Annual ($99/year)
Level 4: Premium Monthly ($9.99/month)
Level 5: Basic Annual ($49/year)
Level 6: Basic Monthly ($4.99/month)

Pengaturan ini menyediakan fleksibilitas maksimum sambil menjaga logika naik/turun yang jelas.

Judul Bagian “Bantuan”

  • Langganan tidak muncul di grup:
  • Pastikan telah ditugaskan ke grup yang benar
  • Pastikan ID produk benar

Kemunculan perilaku upgrade/turun downgrade yang salah:

  • Ulangi ranking level (1 = tertinggi)
  • Pastikan tingkatan langganan sesuai
  • Periksa apakah level sudah benar

Produk dari grup yang berbeda:

  • Pengguna dapat berlangganan ke beberapa grup secara bersamaan
  • Ini sengaja - jaga produk terkait di grup yang sama

getActiveProducts menampilkan langganan multiple:

  • Periksa apakah langganan berada di grup yang berbeda
  • Pastikan pengguna tidak berlangganan melalui Family Sharing
  • Ulangi status langganan di App Store Connect

Untuk informasi lebih lanjut, lihat dokumentasi resmi Apple tentang kelompok langganan.

Lanjutkan dari Buat Kelompok Langganan iOS

Judul Bagian “Lanjutkan dari Buat Kelompok Langganan iOS”

Jika Anda menggunakan Buat Kelompok Langganan iOS untuk merencanakan persetujuan toko dan distribusi, hubungkan dengan Menggunakan @capgo/native-purchases untuk kemampuan native di Menggunakan @capgo/native-purchases, @capgo/capacitor-ulasan dalam aplikasi untuk detail implementasi di @capgo/capacitor-ulasan-dalam-aplikasi, Menggunakan @capgo/capacitor-ulasan-dalam-aplikasi untuk kemampuan asli di Menggunakan @capgo/capacitor-ulasan-dalam-aplikasi, @capgo/capacitor-pasar-asli untuk detail implementasi di @capgo/capacitor-pasar-asli, dan Menggunakan @capgo/capacitor-pasar-asli untuk kemampuan asli di Menggunakan @capgo/capacitor-pasar-asli.