Documentation Intégration Analytics
La solution de cashback nouvelle génération
INTRODUCTION
Ce document décrit l'intégration complète des solutions analytics au sein de l'écosystème REWAPP. L'objectif est de collecter, analyser et exploiter les données comportementales des utilisateurs afin d'optimiser l'expérience utilisateur, mesurer les KPIs business et améliorer continuellement le produit.
OBJECTIFS DE L'ANALYTICS REWAPP
- Mesurer l'acquisition et l'activation des utilisateurs
- Suivre l'engagement et la rétention
- Analyser le comportement transactionnel
- Optimiser les parcours utilisateur (funnels)
- Alimenter les tableaux de bord business et techniques
- Respecter la conformité RGPD
1.1 Périmètre d'Application
VUE D'ENSEMBLE DES OUTILS ANALYTICS
2.1 Google Analytics 4 (GA4)
Caractéristiques GA4
| Caractéristique | Détail |
|---|---|
| Fournisseur | |
| Type | Analytics web et mobile |
| Modèle | Event-based (événementiel) |
| Coût | Gratuit (version standard) |
| Intégration | Firebase SDK / gtag.js |
| Rétention données | 14 mois (standard) / 50 mois (360) |
| Conformité | Privacy Shield, RGPD avec paramétrage |
- Acquisition et attribution marketing
- Analyse du trafic et des sources
- Rapports d'audience et démographie
- Intégration Google Ads pour remarketing
- Conversion tracking (inscription, liaison carte)
2.2 Mixpanel
Caractéristiques Mixpanel
| Caractéristique | Détail |
|---|---|
| Fournisseur | Mixpanel Inc. |
| Type | Product Analytics |
| Modèle | Event-based + User Profiles |
| Coût | Gratuit jusqu'à 20M events/mois |
| Intégration | SDK natif Capacitor |
| Rétention données | 90 jours (gratuit) / 5 ans (Growth) |
| Conformité | SOC 2 Type II, RGPD, CCPA |
- Analyse comportementale approfondie
- Funnels de conversion détaillés
- Cohortes et rétention utilisateur
- Segmentation avancée
- A/B testing et expérimentation
2.3 Comparatif et Complémentarité
Comparatif GA4 vs Mixpanel
| Fonctionnalité | GA4 | Mixpanel |
|---|---|---|
| Acquisition / Attribution | Excellent | Basique |
| Analyse comportementale | Basique | Excellent |
| Funnels de conversion | Bon | Excellent |
| Analyse de cohortes | Limité | Excellent |
| User profiles | Limité | Excellent |
| Intégration Google Ads | Native | Non |
| Temps réel | Oui | Oui |
| Export données | BigQuery | Mixpanel API |
STRATÉGIE RECOMMANDÉE
Utiliser GA4 pour l'acquisition/marketing ET Mixpanel pour l'analyse produit/comportementale. Les deux outils sont complémentaires.
ARCHITECTURE D'INTÉGRATION
3.1 Schéma d'Architecture
[App Mobile Angular + Ionic]
|
v
[Analytics Service Layer]
/ v v
[GA4 SDK] [Mixpanel SDK]
| |
v v
[Google] [Mixpanel]
Analytics Servers
| |
v v
[BigQuery] [Data Export]
/
v v
[Data Warehouse]
|
v
[Business Intelligence]
(Metabase/Looker)
3.2 Flux de Données Analytics
Étape 1 : Action Utilisateur
L'utilisateur effectue une action dans l'application
Étape 2 : Capture
Capture par le service Analytics centralisé
Étape 3 : Enrichissement
Enrichissement avec propriétés utilisateur et contexte
Étape 4 : Envoi Parallèle
Envoi parallèle vers GA4 et Mixpanel
Étape 5 : Traitement
Traitement et stockage par les plateformes
Étape 6 : Export
Export vers Data Warehouse (batch quotidien)
Étape 7 : Visualisation
Visualisation dans les dashboards BI
CONFIGURATION GOOGLE ANALYTICS 4
4.1 Création du Compte et de la Propriété
-
1
Accéder à analytics.google.com
-
2
Créer un compte "REWAPP"
-
3
Créer une propriété "REWAPP Production"
-
4
Sélectionner "Application mobile" comme plateforme
-
5
Configurer le fuseau horaire : Europe/Paris
-
6
Devise : EUR
IDENTIFIANTS À RÉCUPÉRER
- Measurement ID :
G-XXXXXXXXXX - Firebase App ID :
1:123456789:android:abc123def456 - API Secret (pour Measurement Protocol)
4.2 Installation SDK Mobile (Angular + Ionic)
Dépendances à installer
npm install @react-native-firebase/app @react-native-firebase/analytics
Configuration iOS (ios/Podfile)
pod 'Firebase/Analytics'
Configuration Android (android/app/build.gradle)
implementation platform('com.google.firebase:firebase-bom:32.0.0')
implementation 'com.google.firebase:firebase-analytics'
Initialisation dans l'application
import analytics from '@react-native-firebase/analytics';
// Log screen view
await analytics().logScreenView({
screen_name: 'Home',
screen_class: 'HomeScreen',
});
// Log custom event
await analytics().logEvent('transaction_completed', {
transaction_id: 'TXN-123456',
value: 25.50,
currency: 'EUR',
items: [{ item_name: 'Cashback', quantity: 1 }],
});
4.3 Configuration des Flux de Données
4.4 Paramètres de Consentement RGPD
Variables de Consentement GA4
analytics_storage: granted | denied
ad_storage: granted | denied
ad_user_data: granted | denied
ad_personalization: granted | denied
Configuration par défaut (avant consentement)
gtag('consent', 'default', {
'analytics_storage': 'denied',
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'wait_for_update': 500,
});
Mise à jour après consentement
gtag('consent', 'update', {
'analytics_storage': 'granted',
'ad_storage': userConsent.marketing ? 'granted' : 'denied',
});
CONFIGURATION MIXPANEL
5.1 Création du Projet
-
1
Accéder à mixpanel.com
-
2
Créer un nouveau projet "REWAPP"
-
3
Sélectionner la région : EU (RGPD)
-
4
Récupérer le Project Token
5.2 Installation SDK Mobile (Angular + Ionic)
npm install mixpanel-react-native
Initialisation
import { Mixpanel } from 'mixpanel-react-native';
const mixpanel = new Mixpanel('YOUR_PROJECT_TOKEN', true);
// Initialisation avec options RGPD
await mixpanel.init();
mixpanel.setServerURL('https://api-eu.mixpanel.com');
mixpanel.setUseIpAddressForGeolocation(false);
5.3 Configuration des Environnements
Tokens par Environnement
| Environnement | Project Token | API URL | Data Residency |
|---|---|---|---|
| Development | DEV_TOKEN_XXX |
api-eu.mixpanel.com | EU |
| Staging | STAGING_TOKEN_XXX |
api-eu.mixpanel.com | EU |
| Production | PROD_TOKEN_XXX |
api-eu.mixpanel.com | EU |
5.4 Identity Management
Identification Utilisateur
// Après inscription/connexion réussie
mixpanel.identify(userId);
// Création du profil utilisateur
mixpanel.getPeople().set({
'$email': user.email,
'$name': user.firstName + ' ' + user.lastName,
'$created': user.createdAt,
'account_type': 'client',
'has_linked_card': false,
});
Alias pour tracking pré-inscription
// Avant inscription (utilisateur anonyme)
const anonymousId = mixpanel.getDistinctId();
// Après inscription
mixpanel.alias(newUserId);
mixpanel.identify(newUserId);
CATALOGUE DES ÉVÉNEMENTS
6.1 Événements Cœur de l'Application
Événements Core
| Événement | Description | Propriétés |
|---|---|---|
app_open |
Ouverture de l'application | source, campaign, version |
app_background |
Mise en arrière-plan | session_duration |
signup_started |
Début d'inscription | method (email, google, apple) |
signup_completed |
Inscription terminée | user_id, method, referral_code |
login_success |
Connexion réussie | method, has_biometric |
login_failed |
Échec de connexion | error_code, method |
logout |
Déconnexion | session_duration |
onboarding_step |
Étape onboarding | step_number, step_name |
onboarding_completed |
Onboarding terminé | total_duration, steps_skipped |
6.2 Événements Transaction et Points
Événements Transactions
| Événement | Description | Propriétés |
|---|---|---|
card_link_started |
Début liaison carte | bank_name |
card_link_success |
Carte liée avec succès | bank_name, card_type, duration |
card_link_failed |
Échec liaison carte | error_code, bank_name |
transaction_detected |
Transaction détectée | amount, merchant_id, merchant_name |
points_credited |
Points crédités | points_amount, source, merchant_id |
points_balance_viewed |
Consultation solde | current_balance |
withdrawal_requested |
Demande de virement | points_amount, euro_amount |
withdrawal_completed |
Virement effectué | points_amount, euro_amount, duration |
6.3 Événements QR Code
Événements QR Code
| Événement | Description | Propriétés |
|---|---|---|
qr_generation_started |
Début génération QR | points_amount |
qr_generated |
QR code généré | qr_id, points_amount, euro_equivalent |
qr_expired |
QR code expiré (60s) | qr_id, points_amount |
qr_cancelled |
QR code annulé | qr_id, reason |
qr_scanned |
QR code scanné | qr_id, merchant_id, scan_duration |
qr_payment_success |
Paiement QR réussi | qr_id, points_debited, merchant_id |
qr_payment_failed |
Échec paiement QR | qr_id, error_code |
6.4 Événements Navigation et Engagement
Événements Navigation
| Événement | Description | Propriétés |
|---|---|---|
screen_view |
Vue d'écran | screen_name, previous_screen |
partner_list_viewed |
Liste partenaires consultée | filter_category, filter_location |
partner_detail_viewed |
Détail partenaire consulté | partner_id, partner_name, source |
search_performed |
Recherche effectuée | query, results_count, category |
notification_received |
Notification reçue | notification_type, campaign_id |
notification_clicked |
Notification cliquée | notification_type, campaign_id |
share_initiated |
Partage initié | content_type, share_method |
referral_code_shared |
Code parrainage partagé | share_method |
6.5 Format des Événements
Structure JSON Standard
{
"event": "transaction_detected",
"timestamp": "2025-11-24T14:30:00.000Z",
"user_id": "usr_123456789",
"session_id": "sess_abcdef123",
"device": {
"platform": "ios",
"os_version": "17.1",
"app_version": "1.2.0",
"device_model": "iPhone 14"
},
"properties": {
"amount": 45.50,
"currency": "EUR",
"merchant_id": "mer_987654321",
"merchant_name": "Boulangerie du Coin",
"merchant_category": "food",
"points_earned": 18,
"transaction_id": "txn_xyz789"
},
"context": {
"locale": "fr_FR",
"timezone": "Europe/Paris",
"network": "wifi"
}
}
PROPRIÉTÉS UTILISATEUR (USER PROPERTIES)
7.1 Propriétés de Base
Propriétés de Base
| Propriété | Type | Description | Exemple |
|---|---|---|---|
user_id |
string |
Identifiant unique utilisateur | usr_123456789 |
email |
string |
Email de l'utilisateur | user@example.com |
first_name |
string |
Prénom | Marie |
created_at |
datetime |
Date d'inscription | 2025-01-15T10:30:00Z |
account_status |
string |
Statut du compte | active, suspended, deleted |
auth_method |
string |
Méthode d'authentification | email, google, apple |
7.2 Propriétés Comportementales
Propriétés Comportementales
| Propriété | Type | Description | Mise à jour |
|---|---|---|---|
has_linked_card |
boolean |
Carte bancaire liée | À chaque liaison/suppression |
cards_count |
integer |
Nombre de cartes liées | À chaque modification |
total_transactions |
integer |
Nombre total de transactions | À chaque transaction |
total_points_earned |
integer |
Total points gagnés | À chaque crédit |
total_points_spent |
integer |
Total points dépensés | À chaque débit |
current_balance |
integer |
Solde actuel en points | À chaque transaction |
last_transaction_date |
datetime |
Date dernière transaction | À chaque transaction |
qr_codes_generated |
integer |
Nombre QR codes générés | À chaque génération |
withdrawals_count |
integer |
Nombre de virements | À chaque virement |
7.3 Propriétés de Segmentation
Propriétés de Segmentation
| Propriété | Type | Description | Valeurs possibles |
|---|---|---|---|
user_segment |
string |
Segment utilisateur | new, active, power_user, dormant, churned |
acquisition_source |
string |
Source d'acquisition | organic, paid_search, social, referral |
acquisition_campaign |
string |
Campagne d'acquisition | campaign_name |
lifetime_value |
number |
Valeur vie client (€) | Calculé |
engagement_score |
integer |
Score d'engagement (0-100) | Calculé quotidiennement |
preferred_merchant_category |
string |
Catégorie préférée | food, fashion, services |
city |
string |
Ville | Paris, Lyon, Marseille |
IMPLÉMENTATION TECHNIQUE
8.1 Service Analytics Centralisé
Création d'un service abstrait pour centraliser les appels analytics :
// services/analytics/AnalyticsService.ts
import analytics from '@react-native-firebase/analytics';
import { Mixpanel } from 'mixpanel-react-native';
import { ConsentManager } from './ConsentManager';
interface EventProperties {
[key: string]: string | number | boolean | object;
}
interface UserProperties {
[key: string]: string | number | boolean | Date;
}
class AnalyticsService {
private static instance: AnalyticsService;
private mixpanel: Mixpanel;
private isInitialized: boolean = false;
private consentManager: ConsentManager;
private constructor() {
this.mixpanel = new Mixpanel(process.env.MIXPANEL_TOKEN!, true);
this.consentManager = ConsentManager.getInstance();
}
static getInstance(): AnalyticsService {
if (!AnalyticsService.instance) {
AnalyticsService.instance = new AnalyticsService();
}
return AnalyticsService.instance;
}
async initialize(): Promise<void> {
if (this.isInitialized) return;
await this.mixpanel.init();
this.mixpanel.setServerURL('https://api-eu.mixpanel.com');
this.mixpanel.setUseIpAddressForGeolocation(false);
this.isInitialized = true;
}
async trackEvent(
eventName: string,
properties?: EventProperties
): Promise<void> {
if (!this.consentManager.hasAnalyticsConsent()) {
return;
}
const enrichedProperties = this.enrichProperties(properties);
// Envoi parallèle GA4 + Mixpanel
await Promise.all([
analytics().logEvent(eventName, enrichedProperties),
this.mixpanel.track(eventName, enrichedProperties),
]);
}
async trackScreen(screenName: string, screenClass?: string): Promise<void> {
if (!this.consentManager.hasAnalyticsConsent()) {
return;
}
await Promise.all([
analytics().logScreenView({
screen_name: screenName,
screen_class: screenClass || screenName,
}),
this.mixpanel.track('screen_view', {
screen_name: screenName,
screen_class: screenClass || screenName,
}),
]);
}
async identify(userId: string): Promise<void> {
await analytics().setUserId(userId);
this.mixpanel.identify(userId);
}
async setUserProperties(properties: UserProperties): Promise<void> {
if (!this.consentManager.hasAnalyticsConsent()) {
return;
}
// GA4 User Properties
for (const [key, value] of Object.entries(properties)) {
await analytics().setUserProperty(key, String(value));
}
// Mixpanel People Properties
this.mixpanel.getPeople().set(properties);
}
async reset(): Promise<void> {
await analytics().setUserId(null);
this.mixpanel.reset();
}
private enrichProperties(properties?: EventProperties): EventProperties {
return {
...properties,
app_version: process.env.APP_VERSION,
timestamp: new Date().toISOString(),
session_id: this.getSessionId(),
};
}
private getSessionId(): string {
return 'sess_' + Date.now();
}
}
export default AnalyticsService.getInstance();
8.2 Exemples d'Implémentation
Tracking d'une transaction détectée
// hooks/useTransactionTracking.ts
import AnalyticsService from '../services/analytics/AnalyticsService';
export const trackTransactionDetected = async (transaction: Transaction) => {
await AnalyticsService.trackEvent('transaction_detected', {
amount: transaction.amount,
currency: 'EUR',
merchant_id: transaction.merchantId,
merchant_name: transaction.merchantName,
merchant_category: transaction.category,
points_earned: transaction.pointsEarned,
transaction_id: transaction.id,
});
// Mise à jour des propriétés utilisateur
await AnalyticsService.incrementUserProperty('total_transactions', 1);
await AnalyticsService.incrementUserProperty('total_points_earned', transaction.pointsEarned);
await AnalyticsService.setUserProperties({
last_transaction_date: new Date(),
current_balance: transaction.newBalance,
});
};
Tracking de la génération QR Code
export const trackQRGeneration = async (qrCode: QRCode) => {
await AnalyticsService.trackEvent('qr_generated', {
qr_id: qrCode.id,
points_amount: qrCode.pointsAmount,
euro_equivalent: qrCode.pointsAmount * 0.105, // Ratio +5% commerçant
expiration_seconds: 60,
});
await AnalyticsService.incrementUserProperty('qr_codes_generated', 1);
};
Funnel d'inscription complet
export const trackSignupFunnel = {
started: async (method: string) => {
await AnalyticsService.trackEvent('signup_started', { method });
},
emailEntered: async () => {
await AnalyticsService.trackEvent('signup_email_entered');
},
passwordCreated: async () => {
await AnalyticsService.trackEvent('signup_password_created');
},
termsAccepted: async () => {
await AnalyticsService.trackEvent('signup_terms_accepted');
},
completed: async (userId: string, method: string, referralCode?: string) => {
await AnalyticsService.identify(userId);
await AnalyticsService.trackEvent('signup_completed', {
method,
referral_code: referralCode || null,
has_referral: !!referralCode,
});
await AnalyticsService.setUserProperties({
created_at: new Date(),
auth_method: method,
acquisition_source: referralCode ? 'referral' : 'organic',
});
},
};
8.3 Gestion du Consentement
// services/analytics/ConsentManager.ts
import AsyncStorage from '@react-native-async-storage/async-storage';
interface ConsentState {
analytics: boolean;
marketing: boolean;
personalization: boolean;
updatedAt: string;
}
class ConsentManager {
private static instance: ConsentManager;
private consent: ConsentState | null = null;
private readonly STORAGE_KEY = '@rewapp_consent';
static getInstance(): ConsentManager {
if (!ConsentManager.instance) {
ConsentManager.instance = new ConsentManager();
}
return ConsentManager.instance;
}
async initialize(): Promise<void> {
const stored = await AsyncStorage.getItem(this.STORAGE_KEY);
if (stored) {
this.consent = JSON.parse(stored);
}
}
async updateConsent(newConsent: Partial<ConsentState>): Promise<void> {
this.consent = {
...this.consent,
...newConsent,
updatedAt: new Date().toISOString(),
} as ConsentState;
await AsyncStorage.setItem(this.STORAGE_KEY, JSON.stringify(this.consent));
// Mise à jour GA4
if (typeof gtag !== 'undefined') {
gtag('consent', 'update', {
analytics_storage: this.consent.analytics ? 'granted' : 'denied',
ad_storage: this.consent.marketing ? 'granted' : 'denied',
});
}
}
hasAnalyticsConsent(): boolean {
return this.consent?.analytics ?? false;
}
hasMarketingConsent(): boolean {
return this.consent?.marketing ?? false;
}
async revokeAllConsent(): Promise<void> {
await this.updateConsent({
analytics: false,
marketing: false,
personalization: false,
});
}
}
export default ConsentManager;
API ET WEBHOOKS ANALYTICS
9.1 Endpoints API Analytics
/api/v1/analytics/user/{userId}/stats
Récupérer les statistiques utilisateur.
Réponse 200 OK
{
"success": true,
"data": {
"user_id": "usr_123456789",
"period": "last_30_days",
"metrics": {
"transactions_count": 15,
"total_amount_spent": 450.75,
"points_earned": 180,
"points_spent": 50,
"current_balance": 230,
"qr_codes_generated": 3,
"favorite_merchant": {
"id": "mer_987654",
"name": "Café des Arts",
"visits": 5
}
},
"engagement": {
"app_opens": 28,
"avg_session_duration": 180,
"days_active": 12
}
}
}
/api/v1/admin/analytics/export
Exporter les événements analytics (Admin uniquement).
Requête
{
"date_from": "2025-11-01",
"date_to": "2025-11-24",
"event_types": ["transaction_detected", "qr_scanned"],
"format": "csv",
"include_user_properties": true
}
Réponse 202 Accepted
{
"success": true,
"data": {
"export_id": "exp_abc123def",
"status": "processing",
"estimated_completion": "2025-11-24T15:00:00Z",
"download_url": null
}
}
9.2 Export de Données
Export vers BigQuery (GA4)
-
1
Admin → Data Settings → BigQuery Linking
-
2
Sélectionner le projet GCP
-
3
Activer l'export quotidien
-
4
Tables créées
events_YYYYMMDD,events_intraday_YYYYMMDD
Export Mixpanel vers S3
{
"type": "s3",
"bucket": "rewapp-analytics-exports",
"region": "eu-west-3",
"prefix": "mixpanel/",
"format": "json",
"schedule": "daily",
"time": "02:00"
}
9.3 Webhooks vers Data Warehouse
/api/v1/webhooks/analytics
Webhook déclenché quand un batch analytics est prêt.
Payload
{
"event_type": "analytics.batch_ready",
"timestamp": "2025-11-24T02:00:00Z",
"data": {
"batch_id": "batch_20251124",
"events_count": 15420,
"date_range": {
"from": "2025-11-23T00:00:00Z",
"to": "2025-11-24T00:00:00Z"
},
"download_urls": {
"events": "https://storage.rewapp.fr/exports/events_20251124.json.gz",
"users": "https://storage.rewapp.fr/exports/users_20251124.json.gz"
}
}
}
CODES D'ERREUR
Codes d'Erreur Analytics
| Code | Message | Description | Action |
|---|---|---|---|
ANALYTICS_001 |
SDK_NOT_INITIALIZED | SDK analytics non initialisé | Appeler initialize() avant tout tracking |
ANALYTICS_002 |
CONSENT_REQUIRED | Consentement analytics requis | Demander le consentement utilisateur |
ANALYTICS_003 |
INVALID_EVENT_NAME | Nom d'événement invalide | Vérifier le catalogue des événements |
ANALYTICS_004 |
INVALID_PROPERTIES | Propriétés d'événement invalides | Vérifier le format des propriétés |
ANALYTICS_005 |
USER_NOT_IDENTIFIED | Utilisateur non identifié | Appeler identify() après connexion |
ANALYTICS_006 |
RATE_LIMIT_EXCEEDED | Limite de requêtes dépassée | Réduire la fréquence des événements |
ANALYTICS_007 |
NETWORK_ERROR | Erreur réseau | Les événements seront réessayés |
ANALYTICS_008 |
EXPORT_FAILED | Échec de l'export | Vérifier les permissions et réessayer |
ANALYTICS_009 |
INVALID_DATE_RANGE | Plage de dates invalide | Vérifier les dates de début/fin |
ANALYTICS_010 |
QUOTA_EXCEEDED | Quota mensuel dépassé | Contacter le support Mixpanel/GA4 |
Gestion des erreurs dans le code
try {
await AnalyticsService.trackEvent('event_name', properties);
} catch (error) {
if (error.code === 'ANALYTICS_007') {
// Stocker localement et réessayer plus tard
await LocalEventQueue.add(event);
} else {
// Logger l'erreur sans bloquer l'utilisateur
Sentry.captureException(error);
}
}
CONFORMITÉ RGPD
11.1 Consentement Utilisateur
Types de Consentement Requis
| Type | Obligatoire | Description | Impact si refusé |
|---|---|---|---|
| Essentiel | Oui | Fonctionnement de base | App inutilisable |
| Analytics | Non | Mesure d'audience | Pas de tracking comportemental |
| Marketing | Non | Publicités personnalisées | Pas de remarketing |
| Personnalisation | Non | Recommandations | Contenu générique |
ÉCRAN DE CONSENTEMENT
- Présenté au premier lancement
- Choix granulaire par catégorie
- Option "Tout accepter" / "Tout refuser"
- Lien vers politique de confidentialité
- Modifiable à tout moment dans Paramètres
11.2 Anonymisation des Données
DONNÉES ANONYMISÉES AUTOMATIQUEMENT
- Adresse IP : tronquée ou masquée
- User Agent : agrégé (pas de fingerprinting)
- Localisation : niveau ville uniquement (si consentement)
// Configuration Mixpanel (anonymisation IP)
mixpanel.setUseIpAddressForGeolocation(false);
// Configuration GA4 (anonymisation IP)
// Activée par défaut dans GA4
// Pas de configuration supplémentaire requise
11.3 Politique de Rétention
Durées de Conservation
| Donnée | Durée de Conservation | Après Expiration |
|---|---|---|
| Événements bruts | 25 mois | Suppression automatique |
| Profils utilisateur | Durée du compte + 3 ans | Anonymisation |
| Données agrégées | 5 ans | Conservation anonymisée |
| Logs techniques | 90 jours | Suppression automatique |
11.4 Droits Utilisateur
/api/v1/users/{userId}/analytics-data
API de suppression des données analytics.
Réponse 200 OK
{
"success": true,
"message": "Analytics data deletion scheduled",
"data": {
"deletion_id": "del_xyz789",
"status": "scheduled",
"estimated_completion": "2025-12-24T00:00:00Z",
"platforms": ["ga4", "mixpanel"]
}
}
DASHBOARDS ET RAPPORTS
12.1 Dashboards GA4 Préconfigurés
- Acquisition Overview : sources, campagnes, conversions
- Engagement Report : sessions, pages vues, événements
- Monetization : transactions, revenus
- Retention : cohortes, taux de retour
12.2 Dashboards Mixpanel Préconfigurés
- Signup Funnel : étapes d'inscription, taux de conversion
- Transaction Funnel : de la détection au crédit points
- QR Payment Funnel : génération → scan → paiement
- User Retention : J1, J7, J30, J90
- Power Users : top utilisateurs par engagement
12.3 Rapports Automatiques
CONCLUSION
L'intégration analytics de REWAPP repose sur une architecture robuste combinant Google Analytics 4 pour l'acquisition et l'attribution marketing, et Mixpanel pour l'analyse comportementale et produit approfondie.
POINTS CLÉS
- Double tracking GA4 + Mixpanel pour une vision complète
- Service centralisé pour une maintenance simplifiée
- Conformité RGPD native avec gestion granulaire du consentement
- Catalogue d'événements standardisé couvrant tous les parcours utilisateur
- Export automatisé vers le Data Warehouse pour analyses BI avancées
CETTE ARCHITECTURE PERMET À REWAPP DE
- Mesurer précisément les KPIs business et techniques
- Optimiser les parcours utilisateur via les funnels
- Segmenter et cibler les utilisateurs efficacement
- Respecter la réglementation RGPD
- Alimenter les dashboards décisionnels en temps réel
Prochaines Étapes
-
1
Configuration des comptes GA4 et Mixpanel
-
2
Implémentation du service Analytics dans l'app mobile
-
3
Déploiement des dashboards préconfigurés
-
4
Formation des équipes produit et marketing