Proposta Uniformazione Product IDs
Proposta
Questo documento descrive una proposta di uniformazione degli ID prodotto tra iOS, Android e Stripe. Non ancora implementato.
Obiettivo
Uniformare i Product IDs su tutte le piattaforme per:
- Maggiore coerenza nel codebase
- Facilità di manutenzione
- Report e analytics unificati
- Debugging semplificato
Formato Proposto
sub_{period}_{devices}
| Componente | Descrizione | Valori |
|---|---|---|
sub_ | Prefisso abbonamento | Fisso |
{period} | Periodo fatturazione | monthly, semiannual, annual |
{devices} | Numero dispositivi | 1 - 10 |
Product IDs Proposti
Abbonamenti Mensili
| ID | Dispositivi | Prezzo |
|---|---|---|
sub_monthly_1 | 1 | €4,99/mese |
sub_monthly_2 | 2 | €9,99/mese |
sub_monthly_3 | 3 | €14,99/mese |
sub_monthly_4 | 4 | €19,99/mese |
sub_monthly_5 | 5 | €24,99/mese |
sub_monthly_6 | 6 | €29,99/mese |
sub_monthly_7 | 7 | €34,99/mese |
sub_monthly_8 | 8 | €39,99/mese |
sub_monthly_9 | 9 | €44,99/mese |
sub_monthly_10 | 10 | €49,99/mese |
Abbonamenti Semestrali (-20%)
| ID | Dispositivi | Prezzo |
|---|---|---|
sub_semiannual_1 | 1 | €23,99/6 mesi |
sub_semiannual_2 | 2 | €47,99/6 mesi |
sub_semiannual_3 | 3 | €71,99/6 mesi |
sub_semiannual_4 | 4 | €95,99/6 mesi |
sub_semiannual_5 | 5 | €119,99/6 mesi |
sub_semiannual_6 | 6 | €143,99/6 mesi |
sub_semiannual_7 | 7 | €167,99/6 mesi |
sub_semiannual_8 | 8 | €191,99/6 mesi |
sub_semiannual_9 | 9 | €215,99/6 mesi |
sub_semiannual_10 | 10 | €239,99/6 mesi |
Abbonamenti Annuali (-40%)
| ID | Dispositivi | Prezzo |
|---|---|---|
sub_annual_1 | 1 | €35,99/anno |
sub_annual_2 | 2 | €71,99/anno |
sub_annual_3 | 3 | €107,99/anno |
sub_annual_4 | 4 | €143,99/anno |
sub_annual_5 | 5 | €179,99/anno |
sub_annual_6 | 6 | €215,99/anno |
sub_annual_7 | 7 | €251,99/anno |
sub_annual_8 | 8 | €287,99/anno |
sub_annual_9 | 9 | €323,99/anno |
sub_annual_10 | 10 | €359,99/anno |
Confronto con ID Attuali
| Piattaforma | ID Attuale | ID Proposto |
|---|---|---|
| iOS | com.visla.vislagps.monthly1 | sub_monthly_1 |
| Android | monthly1 | sub_monthly_1 |
| Stripe | monthly_1_device | sub_monthly_1 |
Vantaggi
1. Consistenza Cross-Platform
Stesso ID su iOS, Android e Stripe permette:
- Lookup unificato nel database
- Statistiche aggregate per prodotto
- Codice backend condiviso
2. Leggibilità
// Difficile da capire
com.visla.vislagps.semiannual7
// Facile da capire
sub_semiannual_7
3. Compatibilità
- ✅ iOS App Store Connect
- ✅ Google Play Console
- ✅ Stripe Products
- ✅ Database queries
- ✅ Analytics
Piano di Migrazione
Attenzione
Gli ID prodotto NON possono essere modificati dopo la creazione. È necessario eliminare e ricreare i prodotti.
Step 1: Backup
- Esportare configurazioni attuali da tutti gli store
Step 2: Eliminazione
- Eliminare prodotti esistenti su iOS, Android, Stripe
Step 3: Ricreazione
- Creare nuovi prodotti con ID uniformati
Step 4: Aggiornamento Codice
- Aggiornare
StoreManager.swift(iOS) - Aggiornare
BillingManager.kt(Android) - Aggiornare configurazione Stripe
Step 5: Test
- Testare acquisti su tutte le piattaforme
- Verificare webhook funzionanti
Codice di Esempio
iOS (StoreManager.swift)
struct SubscriptionProduct {
static func productId(period: Period, devices: Int) -> String {
return "sub_\(period.rawValue)_\(devices)"
}
enum Period: String {
case monthly
case semiannual
case annual
}
}
// Genera tutti gli ID
let allProductIds = Period.allCases.flatMap { period in
(1...10).map { devices in
SubscriptionProduct.productId(period: period, devices: devices)
}
}
Android (BillingManager.kt)
object SubscriptionProduct {
fun productId(period: Period, devices: Int): String {
return "sub_${period.id}_$devices"
}
enum class Period(val id: String) {
MONTHLY("monthly"),
SEMIANNUAL("semiannual"),
ANNUAL("annual")
}
// Genera tutti gli ID
val allProductIds = Period.entries.flatMap { period ->
(1..10).map { devices ->
productId(period, devices)
}
}
}
Backend (Python)
def get_product_id(period: str, devices: int) -> str:
return f"sub_{period}_{devices}"
# Genera tutti gli ID
periods = ["monthly", "semiannual", "annual"]
all_product_ids = [
get_product_id(period, devices)
for period in periods
for devices in range(1, 11)
]
Decisione
- Approvare proposta
- Pianificare migrazione
- Implementare
Proposta creata il 17/12/2024