Skip to main content

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}
ComponenteDescrizioneValori
sub_Prefisso abbonamentoFisso
{period}Periodo fatturazionemonthly, semiannual, annual
{devices}Numero dispositivi1 - 10

Product IDs Proposti

Abbonamenti Mensili

IDDispositiviPrezzo
sub_monthly_11€4,99/mese
sub_monthly_22€9,99/mese
sub_monthly_33€14,99/mese
sub_monthly_44€19,99/mese
sub_monthly_55€24,99/mese
sub_monthly_66€29,99/mese
sub_monthly_77€34,99/mese
sub_monthly_88€39,99/mese
sub_monthly_99€44,99/mese
sub_monthly_1010€49,99/mese

Abbonamenti Semestrali (-20%)

IDDispositiviPrezzo
sub_semiannual_11€23,99/6 mesi
sub_semiannual_22€47,99/6 mesi
sub_semiannual_33€71,99/6 mesi
sub_semiannual_44€95,99/6 mesi
sub_semiannual_55€119,99/6 mesi
sub_semiannual_66€143,99/6 mesi
sub_semiannual_77€167,99/6 mesi
sub_semiannual_88€191,99/6 mesi
sub_semiannual_99€215,99/6 mesi
sub_semiannual_1010€239,99/6 mesi

Abbonamenti Annuali (-40%)

IDDispositiviPrezzo
sub_annual_11€35,99/anno
sub_annual_22€71,99/anno
sub_annual_33€107,99/anno
sub_annual_44€143,99/anno
sub_annual_55€179,99/anno
sub_annual_66€215,99/anno
sub_annual_77€251,99/anno
sub_annual_88€287,99/anno
sub_annual_99€323,99/anno
sub_annual_1010€359,99/anno

Confronto con ID Attuali

PiattaformaID AttualeID Proposto
iOScom.visla.vislagps.monthly1sub_monthly_1
Androidmonthly1sub_monthly_1
Stripemonthly_1_devicesub_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