v1.0 Novembre 2025
7.4.3

Documentation Intégration Analytics

La solution de cashback nouvelle génération

24 novembre 2025
Version 1.0
1

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

Mobile iOS/Android (Angular + Ionic)
Web Site Vitrine (Next.js)
Admin Dashboard Admin (React)
Partenaire Dashboard PWA (React)
2

VUE D'ENSEMBLE DES OUTILS ANALYTICS

2.1 Google Analytics 4 (GA4)

Caractéristiques GA4

Caractéristique Détail
Fournisseur Google
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.

3

ARCHITECTURE D'INTÉGRATION

3.1 Schéma d'Architecture

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

2
Étape 2 : Capture

Capture par le service Analytics centralisé

3
Étape 3 : Enrichissement

Enrichissement avec propriétés utilisateur et contexte

4
Étape 4 : Envoi Parallèle

Envoi parallèle vers GA4 et Mixpanel

5
Étape 5 : Traitement

Traitement et stockage par les plateformes

6
Étape 6 : Export

Export vers Data Warehouse (batch quotidien)

7
Étape 7 : Visualisation

Visualisation dans les dashboards BI

4

CONFIGURATION GOOGLE ANALYTICS 4

4.1 Création du Compte et de la Propriété

  1. 1
    Accéder à analytics.google.com
  2. 2
    Créer un compte "REWAPP"
  3. 3
    Créer une propriété "REWAPP Production"
  4. 4
    Sélectionner "Application mobile" comme plateforme
  5. 5
    Configurer le fuseau horaire : Europe/Paris
  6. 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

BASH
npm install @react-native-firebase/app @react-native-firebase/analytics

Configuration iOS (ios/Podfile)

RUBY
pod 'Firebase/Analytics'

Configuration Android (android/app/build.gradle)

GRADLE
implementation platform('com.google.firebase:firebase-bom:32.0.0')
implementation 'com.google.firebase:firebase-analytics'

Initialisation dans l'application

TYPESCRIPT
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

iOS com.rewapp.mobile
Android com.rewapp.mobile
Web www.rewapp.fr

4.4 Paramètres de Consentement RGPD

Variables de Consentement GA4

VARIABLES
analytics_storage: granted | denied
ad_storage: granted | denied
ad_user_data: granted | denied
ad_personalization: granted | denied

Configuration par défaut (avant consentement)

JAVASCRIPT
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

JAVASCRIPT
gtag('consent', 'update', {
  'analytics_storage': 'granted',
  'ad_storage': userConsent.marketing ? 'granted' : 'denied',
});
5

CONFIGURATION MIXPANEL

5.1 Création du Projet

  1. 1
    Accéder à mixpanel.com
  2. 2
    Créer un nouveau projet "REWAPP"
  3. 3
    Sélectionner la région : EU (RGPD)
  4. 4
    Récupérer le Project Token

5.2 Installation SDK Mobile (Angular + Ionic)

BASH
npm install mixpanel-react-native

Initialisation

TYPESCRIPT
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

TYPESCRIPT
// 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

TYPESCRIPT
// Avant inscription (utilisateur anonyme)
const anonymousId = mixpanel.getDistinctId();

// Après inscription
mixpanel.alias(newUserId);
mixpanel.identify(newUserId);
6

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

JSON
{
  "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"
  }
}
7

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
8

IMPLÉMENTATION TECHNIQUE

8.1 Service Analytics Centralisé

Création d'un service abstrait pour centraliser les appels analytics :

TYPESCRIPT
// 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

TYPESCRIPT
// 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

TYPESCRIPT
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

TYPESCRIPT
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

TYPESCRIPT
// 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;
9

API ET WEBHOOKS ANALYTICS

9.1 Endpoints API Analytics

GET /api/v1/analytics/user/{userId}/stats

Récupérer les statistiques utilisateur.

Réponse 200 OK
JSON
{
  "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
    }
  }
}
POST /api/v1/admin/analytics/export

Exporter les événements analytics (Admin uniquement).

Requête
JSON
{
  "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
JSON
{
  "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. 1
    Admin → Data Settings → BigQuery Linking
  2. 2
    Sélectionner le projet GCP
  3. 3
    Activer l'export quotidien
  4. 4
    Tables créées

    events_YYYYMMDD, events_intraday_YYYYMMDD

Export Mixpanel vers S3

JSON
{
  "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

POST /api/v1/webhooks/analytics

Webhook déclenché quand un batch analytics est prêt.

Payload
JSON
{
  "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"
    }
  }
}
10

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

TYPESCRIPT
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);
  }
}
11

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)
TYPESCRIPT
// 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

Article 15 Droit d'Accès
Article 16 Droit de Rectification
Article 17 Droit à l'Effacement
Article 20 Droit à la Portabilité
DELETE /api/v1/users/{userId}/analytics-data

API de suppression des données analytics.

Réponse 200 OK
JSON
{
  "success": true,
  "message": "Analytics data deletion scheduled",
  "data": {
    "deletion_id": "del_xyz789",
    "status": "scheduled",
    "estimated_completion": "2025-12-24T00:00:00Z",
    "platforms": ["ga4", "mixpanel"]
  }
}
12

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

Hebdomadaire Email : KPIs clés, tendances
Mensuel PDF : analyse détaillée, insights
Temps Réel Alertes anomalies, seuils critiques
13

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. 1
    Configuration des comptes GA4 et Mixpanel
  2. 2
    Implémentation du service Analytics dans l'app mobile
  3. 3
    Déploiement des dashboards préconfigurés
  4. 4
    Formation des équipes produit et marketing