Pricing Model
Piani fissi per numero di dispositivi (1-10), con pricing per-device e scaglioni.
π Piani Completiβ
Mensileβ
| Piano ID | NΒ° Device | β¬/mese/dev | Prezzo Totale |
|---|---|---|---|
monthly_1 | 1 | β¬4,90 | β¬4,90 |
monthly_2 | 2 | β¬4,90 | β¬9,80 |
monthly_3 | 3 | β¬3,90 | β¬11,70 |
monthly_4 | 4 | β¬3,90 | β¬15,60 |
monthly_5 | 5 | β¬3,90 | β¬19,50 |
monthly_6 | 6 | β¬3,90 | β¬23,40 |
monthly_7 | 7 | β¬3,90 | β¬27,30 |
monthly_8 | 8 | β¬3,90 | β¬31,20 |
monthly_9 | 9 | β¬3,90 | β¬35,10 |
monthly_10 | 10 | β¬3,90 | β¬39,00 |
Semestrale (-20%)β
| Piano ID | NΒ° Device | β¬/mese/dev | Prezzo Totale |
|---|---|---|---|
semiannual_1 | 1 | β¬3,92 | β¬23,50 |
semiannual_2 | 2 | β¬3,92 | β¬47,00 |
semiannual_3 | 3 | β¬3,12 | β¬56,10 |
semiannual_4 | 4 | β¬3,12 | β¬74,80 |
semiannual_5 | 5 | β¬3,12 | β¬93,50 |
semiannual_6 | 6 | β¬3,12 | β¬112,20 |
semiannual_7 | 7 | β¬3,12 | β¬130,90 |
semiannual_8 | 8 | β¬3,12 | β¬149,60 |
semiannual_9 | 9 | β¬3,12 | β¬168,30 |
semiannual_10 | 10 | β¬3,12 | β¬187,00 |
Annuale (-40%)β
| Piano ID | NΒ° Device | β¬/mese/dev | Prezzo Totale |
|---|---|---|---|
annual_1 | 1 | β¬2,92 | β¬35,00 |
annual_2 | 2 | β¬2,92 | β¬70,00 |
annual_3 | 3 | β¬2,33 | β¬84,00 |
annual_4 | 4 | β¬2,33 | β¬112,00 |
annual_5 | 5 | β¬2,33 | β¬140,00 |
annual_6 | 6 | β¬2,33 | β¬168,00 |
annual_7 | 7 | β¬2,33 | β¬196,00 |
annual_8 | 8 | β¬2,33 | β¬224,00 |
annual_9 | 9 | β¬2,33 | β¬252,00 |
annual_10 | 10 | β¬2,33 | β¬280,00 |
π§ Product IDs per Providerβ
Stripeβ
price_monthly_1, price_monthly_2, ... price_monthly_10
price_semiannual_1, price_semiannual_2, ... price_semiannual_10
price_annual_1, price_annual_2, ... price_annual_10
Apple App Storeβ
com.visla.gps.monthly_1, com.visla.gps.monthly_2, ...
com.visla.gps.semiannual_1, com.visla.gps.semiannual_2, ...
com.visla.gps.annual_1, com.visla.gps.annual_2, ...
Google Playβ
monthly_1, monthly_2, ... monthly_10
semiannual_1, semiannual_2, ... semiannual_10
annual_1, annual_2, ... annual_10
π± UI Flowβ
Selezione Pianoβ
βββββββββββββββββββββββββββββββββββββββ
β Quanti dispositivi vuoi tracciare? β
βββββββββββββββββββββββββββββββββββββββ€
β [1] [2] [3] [4] [5] β
β [6] [7] [8] [9] [10] β
β β
β Hai selezionato: 5 dispositivi β
βββββββββββββββββββββββββββββββββββββββ€
β β Mensile β¬19,50/mese β
β β Semestrale β¬93,50 (-20%) β
β β Annuale β¬140,00 (-40%) β
βββββββββββββββββββββββββββββββββββββββ€
β [Abbonati Ora] β
βββββββββββββββββββββββββββββββββββββββ
Upgrade Flowβ
Se l'utente ha 3 device e ne vuole 5:
βββββββββββββββββββββββββββββββββββββββ
β Upgrade Piano β
βββββββββββββββββββββββββββββββββββββββ€
β Attuale: 3 dispositivi (β¬11,70/m) β
β Nuovo: 5 dispositivi (β¬19,50/m) β
β β
β Differenza: +β¬7,80/mese β
βββββββββββββββββββββββββββββββββββββββ€
β [Conferma Upgrade] [Annulla] β
βββββββββββββββββββββββββββββββββββββββ
π Logica Backendβ
Verificare limite dispositiviβ
def can_add_device(user_id: int) -> bool:
"""Check if user can add another device."""
subscription = get_active_subscription(user_id)
if not subscription:
return False
# Estrai numero devices dal plan_id (es: "monthly_5" β 5)
max_devices = int(subscription.plan_id.split("_")[-1])
current_devices = count_user_devices(user_id)
return current_devices < max_devices
Upgrade subscriptionβ
Per Stripe:
# Cambia subscription a nuovo piano
stripe.Subscription.modify(
subscription_id,
items=[{
'id': subscription_item_id,
'price': 'price_monthly_5', # Nuovo piano
}],
proration_behavior='create_prorations' # Calcola differenza
)
β Vantaggi di questo approccioβ
| Aspetto | Vantaggio |
|---|---|
| SemplicitΓ | 30 piani fissi, facili da gestire |
| CompatibilitΓ | Funziona su Stripe, Apple, Google |
| UX chiara | Utente sceglie N dispositivi, vede prezzo |
| Upgrade facile | Cambio piano = cambio subscription |
π Prossimi Passiβ
- Creare prodotti su Stripe, App Store Connect, Google Play
- Implementare UI per selezione dispositivi
- Logica backend per verificare limiti
- Webhook handling (giΓ implementato!)
π Tabella Prezziβ
Mensileβ
| Dispositivi | Prezzo/mese/device | Esempio 5 devices |
|---|---|---|
| 1-2 | β¬4,90 | β¬9,80 (2 dev) |
| 3-10 | β¬3,90 | β¬19,50 |
| 10+ | β¬2,90 | - |
Semestrale (-20%)β
| Dispositivi | Prezzo 6 mesi/device | β¬/mese/device |
|---|---|---|
| 1-2 | β¬23,50 | β¬3,92 |
| 3-10 | β¬18,70 | β¬3,12 |
| 10+ | β¬13,90 | β¬2,32 |
Annuale (-40%)β
| Dispositivi | Prezzo anno/device | β¬/mese/device |
|---|---|---|
| 1-2 | β¬35,00 | β¬2,92 |
| 3-10 | β¬28,00 | β¬2,33 |
| 10+ | β¬20,90 | β¬1,74 |
β οΈ ComplessitΓ Implementativaβ
Questo modello Γ¨ piΓΉ complesso di una subscription flat. Ecco le sfide:
Problema 1: Come calcolare il prezzo?β
Il prezzo dipende da quanti dispositivi ha l'utente.
User A: 2 dispositivi β Tier 1-2 β β¬4.90 Γ 2 = β¬9.80/mese
User B: 5 dispositivi β Tier 3-10 β β¬3.90 Γ 5 = β¬19.50/mese
User C: 15 dispositivi β Tier 10+ β β¬2.90 Γ 15 = β¬43.50/mese
Problema 2: Cosa succede se aggiunge dispositivi?β
Scenario: User ha 2 dispositivi (β¬9.80/mese), vuole aggiungerne 3.
- Nuovo totale: 5 dispositivi
- Nuovo tier: 3-10
- Nuovo prezzo: β¬3.90 Γ 5 = β¬19.50/mese
Opzioni:
- A) Upgrade immediato: Cambia subito subscription, prorata
- B) Upgrade al rinnovo: PuΓ² aggiungere, ma nuovo prezzo da prossimo ciclo
Problema 3: Stripe/Apple/Google supportano questo?β
| Provider | Supporto per-seat pricing |
|---|---|
| Stripe | β
Sì - quantity + price tiers |
| Apple | β No - Solo prezzi fissi |
| β No - Solo prezzi fissi |
π§ Soluzioni Proposteβ
Opzione A: Stripe per tutti i pagamenti (Consigliato)β
Usa Stripe come unico provider di pagamento, anche su mobile.
Pro:
- Pricing flessibile con quantity e tiers
- Un solo sistema da gestire
- Cross-platform nativo
- Upgrade/downgrade facili
Contro:
- Su iOS, Apple prende il 30% se passi da App Store (ma puoi evitarlo per apps B2B)
- Su Android, Google puΓ² richiedere Play Billing per alcuni casi
Come funziona:
# Stripe subscription con quantity
subscription = stripe.Subscription.create(
customer=customer_id,
items=[{
"price": "price_per_device_monthly",
"quantity": 5 # Number of devices
}]
)
Opzione B: Piani Fissi Pre-calcolatiβ
Crea piani fissi per ogni combinazione:
| Piano ID | Dispositivi | Durata | Prezzo |
|---|---|---|---|
monthly_2dev | 1-2 | Mese | β¬9.80 |
monthly_5dev | 3-5 | Mese | β¬19.50 |
monthly_10dev | 6-10 | Mese | β¬39.00 |
annual_2dev | 1-2 | Anno | β¬70.00 |
| ... | ... | ... | ... |
Pro: Funziona su Apple/Google Contro: Tanti piani da gestire, meno flessibile
Opzione C: Ibridoβ
- Mobile: Piani fissi semplificati (Es: "Pro 5 devices", "Pro 10 devices")
- Web: Stripe con quantity dinamica
π― Raccomandazioneβ
Per GPS Tracking B2B β Opzione A (Solo Stripe)β
PoichΓ© Visla GPS sembra un prodotto B2B (flotte, tracking veicoli), puoi:
- Evitare App Store/Play Store per pagamenti
- Usare Stripe come unico gateway
- Link nel app: "Manage Subscription" β apre browser web
// iOS - Apri web per gestione abbonamento
if let url = URL(string: "https://app.vislagps.com/subscription") {
UIApplication.shared.open(url)
}
Se devi usare In-App Purchases β Opzione Bβ
Apple/Google richiedono IAP per consumer apps. In questo caso:
Piani semplificati per Mobile:
| Piano | Dispositivi | Prezzo Mensile | Prezzo Annuale |
|---|---|---|---|
| Starter | Fino a 2 | β¬9.80 | β¬70.00 |
| Pro | Fino a 5 | β¬19.50 | β¬140.00 |
| Business | Fino a 10 | β¬39.00 | β¬280.00 |
| Enterprise | Illimitati | Contattaci | Contattaci |
π€ Domande per Teβ
-
Visla GPS Γ¨ B2B o consumer?
- B2B (flotte aziendali) β Puoi usare solo Stripe
- Consumer (privati) β Devi usare IAP su mobile
-
Upgrade device durante subscription?
- Utente puΓ² aggiungere device a metΓ ciclo?
- O deve aspettare il rinnovo?
-
Vuoi piani semplificati per mobile?
- Es: "Starter (2 dev)", "Pro (5 dev)", "Business (10 dev)"
- Invece del pricing esatto per-device
Fammi sapere e aggiorno tutta la documentazione! π