Idlen Logo
Features

React & Next.js

Intégrer le Pixel Idlen avec les applications React et Next.js

Intégration React & Next.js

Ce guide couvre l'intégration du Pixel Idlen avec les applications React, y compris Next.js (Pages Router et App Router).

Configuration de Base

Balise Script dans le HTML

L'approche la plus simple est d'ajouter le script du pixel à votre HTML :

<!-- public/index.html (Create React App) -->
<!-- ou app/layout.tsx (Next.js App Router) -->

<script>
!function(i,d,l,e,n){i.idlen=i.idlen||function(){
(i.idlen.q=i.idlen.q||[]).push([].slice.call(arguments))};
var s=d.createElement('script');s.async=1;
s.src='https://pixel.idlen.io/v1/pixel.js';
d.head.appendChild(s)}(window,document);

idlen('init', 'VOTRE_ADVERTISER_ID');
idlen('track', 'PageView');
</script>

Next.js App Router

Utilisation de next/script

// app/layout.tsx
import Script from 'next/script';

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="fr">
      <head>
        <Script id="idlen-pixel" strategy="afterInteractive">
          {`
            !function(i,d,l,e,n){i.idlen=i.idlen||function(){
            (i.idlen.q=i.idlen.q||[]).push([].slice.call(arguments))};
            var s=d.createElement('script');s.async=1;
            s.src='https://pixel.idlen.io/v1/pixel.js';
            d.head.appendChild(s)}(window,document);

            idlen('init', '${process.env.NEXT_PUBLIC_IDLEN_ADVERTISER_ID}');
            idlen('track', 'PageView');
          `}
        </Script>
      </head>
      <body>{children}</body>
    </html>
  );
}

Suivi des Changements de Route

Créez un provider pour suivre les changements de route :

// app/providers/IdlenProvider.tsx
'use client';

import { usePathname, useSearchParams } from 'next/navigation';
import { useEffect, Suspense } from 'react';

declare global {
  interface Window {
    idlen: (...args: any[]) => void;
  }
}

function IdlenTracker() {
  const pathname = usePathname();
  const searchParams = useSearchParams();

  useEffect(() => {
    if (typeof window !== 'undefined' && window.idlen) {
      window.idlen('track', 'PageView');
    }
  }, [pathname, searchParams]);

  return null;
}

export function IdlenProvider({ children }: { children: React.ReactNode }) {
  return (
    <>
      <Suspense fallback={null}>
        <IdlenTracker />
      </Suspense>
      {children}
    </>
  );
}

Next.js Pages Router

// pages/_app.tsx
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import Script from 'next/script';

declare global {
  interface Window {
    idlen: (...args: any[]) => void;
  }
}

export default function App({ Component, pageProps }) {
  const router = useRouter();

  useEffect(() => {
    const handleRouteChange = () => {
      if (window.idlen) {
        window.idlen('track', 'PageView');
      }
    };

    router.events.on('routeChangeComplete', handleRouteChange);
    return () => {
      router.events.off('routeChangeComplete', handleRouteChange);
    };
  }, [router.events]);

  return (
    <>
      <Script id="idlen-pixel" strategy="afterInteractive">
        {`
          !function(i,d,l,e,n){i.idlen=i.idlen||function(){
          (i.idlen.q=i.idlen.q||[]).push([].slice.call(arguments))};
          var s=d.createElement('script');s.async=1;
          s.src='https://pixel.idlen.io/v1/pixel.js';
          d.head.appendChild(s)}(window,document);

          idlen('init', '${process.env.NEXT_PUBLIC_IDLEN_ADVERTISER_ID}');
          idlen('track', 'PageView');
        `}
      </Script>
      <Component {...pageProps} />
    </>
  );
}

Hook React pour les Conversions

Créez un hook personnalisé pour suivre les conversions :

// hooks/useIdlen.ts
'use client';

import { useCallback } from 'react';

declare global {
  interface Window {
    idlen: (...args: any[]) => void;
  }
}

export function useIdlen() {
  const trackConversion = useCallback(
    (eventName: string, value?: number) => {
      if (typeof window !== 'undefined' && window.idlen) {
        window.idlen('track', 'Conversion', {
          eventName,
          value,
        });
      }
    },
    []
  );

  const trackEvent = useCallback(
    (eventType: string, data?: Record<string, any>) => {
      if (typeof window !== 'undefined' && window.idlen) {
        window.idlen('track', eventType, data);
      }
    },
    []
  );

  return { trackConversion, trackEvent };
}

Utilisation

// components/SignupForm.tsx
'use client';

import { useIdlen } from '@/hooks/useIdlen';

export function SignupForm() {
  const { trackConversion } = useIdlen();

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    
    const result = await submitSignup(formData);
    
    if (result.success) {
      trackConversion('signup');
      // Rediriger ou afficher le succès
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      {/* Champs du formulaire */}
    </form>
  );
}

Variables d'Environnement

Stockez votre Advertiser ID dans les variables d'environnement :

# .env.local
NEXT_PUBLIC_IDLEN_ADVERTISER_ID=votre-advertiser-id
Sécurité : Le préfixe NEXT_PUBLIC_ rend la variable disponible dans le navigateur. C'est sûr puisque l'Advertiser ID est destiné à être public.

Types TypeScript

Ajoutez les définitions de types pour le pixel Idlen :

// types/idlen.d.ts
declare global {
  interface Window {
    idlen: {
      (command: 'init', advertiserId: string, options?: {
        debug?: boolean;
        autoTrack?: boolean;
      }): void;
      (command: 'track', eventType: 'PageView'): void;
      (command: 'track', eventType: 'Conversion', data?: {
        eventName?: string;
        value?: number;
      }): void;
      q?: any[];
    };
  }
}

export {};
Copyright © 2026