177 lines
5.9 KiB
Markdown
177 lines
5.9 KiB
Markdown
## 10. Premium
|
|
|
|
### 10.1 Offre et tarification
|
|
|
|
**Décision** : Deux formules sans essai gratuit
|
|
|
|
| Formule | Prix | Économie | Prix effectif |
|
|
|---------|------|----------|---------------|
|
|
| **Mensuel** | 4.99€/mois | - | 4.99€/mois |
|
|
| **Annuel** | 49.99€/an | 2 mois offerts | 4.16€/mois |
|
|
|
|
**❌ Pas d'essai gratuit**
|
|
|
|
**Raisons** :
|
|
- **Anti-abus vacances** : évite inscriptions opportunistes (essai 14j avant road trip vacances, puis annulation)
|
|
- **Protection revenus créateurs** : les écoutes Premium rémunèrent créateurs dès jour 1
|
|
- **Simplicité** : pas de gestion période trial + conversion
|
|
- **Engagement** : utilisateur qui paie dès début = plus engagé
|
|
|
|
**❌ Pas de partage familial (MVP)**
|
|
|
|
**Raisons** :
|
|
- Complexité technique (gestion invitations, validation liens, limite devices)
|
|
- Risque abus ("familles" de 6 inconnus)
|
|
- Coût dev/support élevé pour ROI incertain
|
|
- La plupart des users RoadWave sont individuels (conducteurs)
|
|
- **Post-MVP** : Si forte demande, offre "Famille" à 9.99€/mois pour 5 comptes
|
|
|
|
**Justification tarif** :
|
|
- **Aligné marché bas** : Spotify = 10.99€, YouTube Premium = 11.99€, Apple Music = 10.99€
|
|
- **Prix accessible** : cible conducteurs quotidiens (budget raisonnable)
|
|
- **Incitation annuel** : 2 mois offerts = engagement long terme + réduction churn
|
|
|
|
---
|
|
|
|
### 10.2 Multi-devices et détection simultanée
|
|
|
|
**Décision** : 1 seul stream actif par compte à tout moment
|
|
|
|
**Détection connexion simultanée** :
|
|
|
|
```
|
|
User A écoute sur iPhone
|
|
→ User A lance sur iPad
|
|
→ Détection : session active iPhone existe
|
|
→ Action : Arrêt lecture iPhone (WebSocket close)
|
|
→ Message iPhone : "Lecture interrompue : votre compte est utilisé sur un autre appareil"
|
|
→ Lecture démarre iPad
|
|
```
|
|
|
|
**Implémentation technique** :
|
|
|
|
```
|
|
Redis : active_streams:{user_id} → {device_id, started_at}
|
|
TTL : 5 minutes (refresh à chaque heartbeat)
|
|
|
|
Heartbeat toutes les 30s depuis app :
|
|
→ Si autre device détecté : kill session actuelle
|
|
→ Si pas de heartbeat pendant 5 min : considérer session morte
|
|
```
|
|
|
|
**Exceptions** :
|
|
- Contenus téléchargés (offline) ne comptent pas comme stream actif
|
|
- Transition rapide device (<10s) tolérée (changement voiture → maison)
|
|
|
|
**Justification** :
|
|
- **Anti-partage compte** : empêche 2 personnes d'utiliser même compte Premium
|
|
- **Protection revenus créateurs** : 1 abonnement = 1 personne = 1 écoute
|
|
- **UX claire** : message explicite, pas de coupure brutale
|
|
|
|
---
|
|
|
|
### 10.3 Contenus exclusifs Premium
|
|
|
|
**Décision** : Créateur décide (déjà couvert section 9.6)
|
|
|
|
**Rappel règles** :
|
|
- Toggle "Réservé Premium" par contenu
|
|
- Aucune limite de ratio gratuit/premium
|
|
- Badge 👑 visible
|
|
- Users gratuits : lecture bloquée avec CTA "Passez Premium"
|
|
|
|
**Impact algorithme** :
|
|
- Contenus premium inclus dans recommandations
|
|
- Si user gratuit → skip automatique (ne consomme pas slot)
|
|
- Si user premium → diffusé normalement selon score
|
|
|
|
---
|
|
|
|
### 10.4 Avantages Premium
|
|
|
|
**Inclus dans l'abonnement** :
|
|
|
|
| Avantage | Gratuit | Premium |
|
|
|----------|---------|---------|
|
|
| **Publicités** | 1/5 contenus | 0 (aucune) |
|
|
| **Contenus exclusifs** | ❌ Bloqués | ✅ Accès complet |
|
|
| **Qualité audio** | 48 kbps Opus | 64 kbps Opus |
|
|
| **Mode offline** | 50 contenus max | Illimité |
|
|
| **Historique écoute** | 100 derniers | Illimité |
|
|
|
|
**Qualité audio** :
|
|
- Gratuit : 48 kbps Opus (~20 MB/h) = très correct pour voix
|
|
- Premium : 64 kbps Opus (~30 MB/h) = excellente qualité
|
|
|
|
**Justification différences** :
|
|
- **0 pub** = argument principal (confort écoute)
|
|
- **Qualité audio** = avantage tangible audiophiles
|
|
- **Offline illimité** = use case road trips longs
|
|
- **Pas d'over-engineering** : pas de badges cosmétiques, fonctionnalités sociales, etc. (focus essentiel)
|
|
|
|
---
|
|
|
|
### 10.5 Gestion abonnement
|
|
|
|
**Souscription** :
|
|
|
|
| Canal | Prestataire | Prix | Commission |
|
|
|-------|-------------|------|------------|
|
|
| **Web (desktop/mobile)** | Mangopay | 4.99€ | 1.8% + 0.18€ = 0.27€ |
|
|
| **iOS App** | Apple In-App Purchase | 5.99€ | 30% (Apple) |
|
|
| **Android App** | Google Play Billing | 5.99€ | 30% (Google) |
|
|
|
|
**Majoration mobile (5.99€)** :
|
|
- Apple/Google prennent 30% de commission
|
|
- RoadWave majore prix de 20% pour compenser
|
|
- **Incitation web** : Email aux users "Abonnez-vous sur roadwave.com pour 4.99€/mois" (38% moins cher en frais !)
|
|
|
|
**Renouvellement automatique** :
|
|
- Email rappel **7 jours avant** renouvellement
|
|
- Email confirmation **après** renouvellement réussi
|
|
- Retry automatique si échec paiement (3 tentatives sur 7 jours)
|
|
- Annulation automatique après 3 échecs
|
|
|
|
**Annulation** :
|
|
- Self-service dans Settings app : "Abonnement > Annuler"
|
|
- Accès Premium maintenu jusqu'à **fin période payée**
|
|
- Pas de remboursement prorata (standard industrie)
|
|
- Email confirmation annulation avec date fin d'accès
|
|
|
|
**Réabonnement** :
|
|
- Possibilité immédiate
|
|
- ❌ Pas de nouvelle période d'essai (pas d'essai du tout)
|
|
|
|
**Architecture données** :
|
|
|
|
```sql
|
|
CREATE TABLE subscriptions (
|
|
id UUID PRIMARY KEY,
|
|
user_id UUID NOT NULL REFERENCES users(id) UNIQUE,
|
|
mangopay_recurring_payin_id VARCHAR(255), -- Null si IAP
|
|
mangopay_user_id VARCHAR(255), -- Null si IAP
|
|
apple_transaction_id VARCHAR(255), -- Null si Mangopay
|
|
google_purchase_token VARCHAR(255), -- Null si Mangopay
|
|
status VARCHAR(50) NOT NULL, -- 'active', 'cancelled', 'expired', 'past_due'
|
|
plan VARCHAR(50) NOT NULL, -- 'monthly', 'yearly'
|
|
current_period_start TIMESTAMP NOT NULL,
|
|
current_period_end TIMESTAMP NOT NULL,
|
|
cancelled_at TIMESTAMP,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
```
|
|
|
|
**Vérification Premium en temps réel** :
|
|
|
|
```
|
|
Cache Redis : premium:{user_id} → boolean (TTL 1h)
|
|
Refresh via webhooks :
|
|
- Mangopay : PAYIN_NORMAL_SUCCEEDED, PAYIN_NORMAL_FAILED
|
|
- Apple : App Store Server Notifications
|
|
- Google : Real-time Developer Notifications
|
|
```
|
|
|
|
---
|
|
|
|
## Récapitulatif Section 10
|