Mit dem Kameleoon React SDK können Sie Feature-Experimente ausführen und Feature Flags in Ihrer Frontend-Web- und Mobilanwendung aktivieren. Die Integration unseres SDK in Ihre Web- und Mobilanwendung ist einfach, und sein Fußabdruck (Speicher- und Netzwerknutzung) ist gering.
Erste Schritte: Hilfe für den Einstieg finden Sie im Entwicklerhandbuch
Changelog: Details zur neuesten Version des React SDK finden Sie im Changelog.
SDK-Methoden: Die vollständige Referenzdokumentation des React SDK finden Sie im Abschnitt reference.
Anforderungen: Das React SDK erfordert React 16.8.0+
Developer guide
Folgen Sie diesem Abschnitt, um das SDK in Ihre Anwendung zu integrieren und mehr über die Verwendung des SDK zu erfahren.
Getting started
Dieser Abschnitt führt Sie durch die erstmalige Installation und Konfiguration des SDK.
Installation
Das Kameleoon SDK Installation Tool ist die bevorzugte Methode zur Installation des SDK. Dieser SDK Installer hilft Ihnen, das SDK Ihrer Wahl zu installieren, ein grundlegendes Codebeispiel zu generieren und bei Bedarf externe Abhängigkeiten zu konfigurieren.
Um das SDK Installation Tool zu starten, installieren und führen Sie es global aus:
npm install --global @kameleoon/sdk-installer
kameleoon-sdk
Oder führen Sie es direkt mit npx aus:
npx @kameleoon/sdk-installer
Create the Kameleoon Client
Um zu beginnen, erstellen Sie einen Einstiegspunkt für das React SDK, indem Sie auf der obersten Ebene Ihrer Anwendung einen Kameleoon Client erstellen. Erstellen Sie eine Instanz von KameleoonClient mithilfe der Funktion createClient(), die aus dem kameleoon-Paket importiert wird.
import {
createClient,
Environment,
SDKConfigurationType,
} from '@kameleoon/react-sdk';
// -- Optional configuration
const configuration: Partial<SDKConfigurationType> = {
updateInterval: 60,
environment: Environment.Production,
cookieDomain: '.example.com',
};
const client = createClient({ siteCode: 'my_site_code', configuration });
import { createClient, Environment } from '@kameleoon/react-sdk';
// -- Optional configuration
const configuration = {
updateInterval: 60,
environment: Environment.Production,
cookieDomain: '.example.com',
};
const client = createClient({ siteCode: 'my_site_code', configuration });
Wrap the application in the Kameleoon Provider
Der zweite Schritt besteht darin, den zuvor erstellten Kameleoon Client mit KameleoonProvider zu verbinden, indem der konfigurierte Client an KameleoonProvider übergeben wird:
import {
createClient,
Environment,
KameleoonProvider,
} from '@kameleoon/react-sdk';
const client = createClient({
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
},
});
function AppWrapper(): JSX.Element {
return (
<KameleoonProvider client={client}>
<App />
</KameleoonProvider>
);
}
import {
createClient,
Environment,
KameleoonProvider,
} from '@kameleoon/react-sdk';
const client = createClient({
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
},
});
function AppWrapper() {
return (
<KameleoonProvider client={client}>
<App />
</KameleoonProvider>
);
}
Wenn Sie Next.js für Server-Side Rendering (SSR) verwenden, müssen Sie KameleoonProviderSSR oder KameleoonProvider mit stubMode=true verwenden.
Dies verhindert, dass der SDK-Client auf dem Server initialisiert wird, und stellt sicher, dass das React SDK ausschließlich clientseitig läuft.
import {
createClient,
Environment,
KameleoonProviderSSR,
} from '@kameleoon/react-sdk';
function AppWrapper(): JSX.Element {
return (
<KameleoonProviderSSR sdkParameters={{
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
}
}}>
<App />
</KameleoonProviderSSR>
);
}
Wenn Sie Next.js für Server-Side Rendering (SSR) verwenden, müssen Sie KameleoonProviderSSR oder KameleoonProvider mit stubMode=true verwenden.
Dies verhindert, dass der SDK-Client auf dem Server initialisiert wird, und stellt sicher, dass das React SDK ausschließlich clientseitig läuft.
import {
createClient,
Environment,
KameleoonProviderSSR,
} from '@kameleoon/react-sdk';
function AppWrapper() {
return (
<KameleoonProviderSSR sdkParameters={{
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
}
}}>
<App />
</KameleoonProviderSSR>
);
}
Wenn Sie Next.js für Server-Side Rendering (SSR) verwenden, müssen Sie KameleoonProviderSSR oder KameleoonProvider mit stubMode=true verwenden.
Dies verhindert, dass der SDK-Client auf dem Server initialisiert wird, und stellt sicher, dass das React SDK ausschließlich clientseitig läuft.
import {
createClient,
Environment,
KameleoonProvider,
} from '@kameleoon/react-sdk';
// Checks if the code is running on the server (Node.js) and not in the browser.
// This can be replaced with any other mechanism you use to detect server-side execution.
const isServer = typeof window === 'undefined';
const client = createClient({
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
},
externals: {
// Add your external dependencies here, e.g. storage, eventSource, visitorCodeManager, etc.
},
stubMode: isServer,
});
function AppWrapper(): JSX.Element {
return (
<KameleoonProvider client={client}>
<App />
</KameleoonProvider>
);
}
Wenn Sie Next.js für Server-Side Rendering (SSR) verwenden, müssen Sie KameleoonProviderSSR oder KameleoonProvider mit stubMode=true verwenden.
Dies verhindert, dass der SDK-Client auf dem Server initialisiert wird, und stellt sicher, dass das React SDK ausschließlich clientseitig läuft.
import {
createClient,
Environment,
KameleoonProvider,
} from '@kameleoon/react-sdk';
// Checks if the code is running on the server (Node.js) and not in the browser.
// This can be replaced with any other mechanism you use to detect server-side execution.
const isServer = typeof window === 'undefined';
const client = createClient({
siteCode: 'my_site_code',
configuration: {
updateInterval: 60,
environment: Environment.Production,
},
externals: {
// Add your external dependencies here, e.g. storage, eventSource, visitorCodeManager, etc.
},
stubMode: isServer,
});
function AppWrapper() {
return (
<KameleoonProvider client={client}>
<App />
</KameleoonProvider>
);
}
KameleoonProvider
Verwenden Sie diesen Provider auf der Root-Ebene, indem Sie Ihre Anwendung umhüllen, um Zugriff auf KameleoonClient zu erhalten. Dies stellt sicher, dass Ihre Anwendung beim Start nicht aufgrund von Flag-Änderungen flackert.
Props
| Name | Typ | Beschreibung |
|---|
| children (required) | ReactNode | untergeordnete Elemente des Providers |
| client (required) | KameleoonClient | KameleoonClient-Instanz, erstellt durch createClient() |
KameleoonProviderSSR
Verwenden Sie diesen Provider auf der Root-Ebene, indem Sie Ihre Anwendung umhüllen, um Zugriff auf KameleoonClient zu erhalten.
KameleoonProviderSSR unterscheidet sich von KameleoonProvider dadurch, dass er eine KameleoonClient-Instanz innerhalb des Kontexts bei der ersten Client-Anfrage erstellt. Dies vermeidet das Risiko, den Client auf der Serverseite zu erstellen. Es wird für die Verwendung in SSR-basierten Systemen, wie Next.js mit SSR, empfohlen.
Props
| Name | Typ | Beschreibung |
|---|
| children (required) | ReactNode | untergeordnete Elemente des Providers |
| sdkParameters (required) | SDKParameters | SDKParameters-Einstellungen zum Erstellen einer Instanz von KameleoonClient |
Await for the client initialization
Die Initialisierung von KameleoonClient erfolgt asynchron, um sicherzustellen, dass der Kameleoon-API-Aufruf erfolgreich war; dafür wird der Hook useInitialize verwendet. Sie können async/await, Promise.then() oder eine andere Methode verwenden, um die asynchrone Client-Initialisierung zu handhaben.
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
// -- Waiting for the client initialization using `async/await`
const init = useCallback(async (): Promise<void> => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
// -- Waiting for the client initialization using `async/await`
const init = useCallback(async () => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
Activating a feature flag
Assigning a unique ID to a user
Um einem Benutzer eine eindeutige ID zuzuweisen, können Sie die Methode getVisitorCode() verwenden. Wenn noch kein visitor code existiert (aus dem Cookie der Anfrage-Header), generiert die Methode eine zufällige eindeutige ID oder verwendet einen defaultVisitorCode, den Sie generiert hätten. Die ID wird dann in einem Cookie der Antwort-Header gesetzt.
Wenn Sie Kameleoon im Hybrid-Modus verwenden, stellt der Aufruf der Methode getVisitorCode() sicher, dass die eindeutige ID (visitor code) zwischen der Anwendungsdatei engine.js (früher kameleoon.js genannt) und dem SDK geteilt wird.
Retrieving a flag configuration
Um ein Feature Flag in Ihrem Code zu implementieren, müssen Sie zunächst das Feature Flag in Ihrem Kameleoon-Konto erstellen.
Um den Status oder die Variation eines Feature Flags für einen bestimmten Benutzer zu ermitteln, sollten Sie die Methode getVariation() oder isFeatureFlagActive() verwenden, um die Konfiguration basierend auf dem featureKey abzurufen.
Die Methode getVariation() behandelt sowohl einfache Feature Flags mit EIN/AUS-Zuständen als auch komplexere Flags mit mehreren Variationen. Die Methode ruft die entsprechende Variation für den Benutzer ab, indem sie die Feature-Regeln überprüft, die Variation zuweist und sie basierend auf dem featureKey und dem visitorCode zurückgibt.
Die Methode isFeatureFlagActive() kann verwendet werden, wenn Sie die Konfiguration eines einfachen Feature Flags abrufen möchten, das nur einen EIN- oder AUS-Zustand hat, im Gegensatz zu komplexeren Feature Flags mit mehreren Variationen oder Zieloptionen.
Wenn Ihr Feature Flag zugehörige Variablen hat (wie spezifische Verhaltensweisen, die jeder Variation zugeordnet sind), ermöglicht getVariation() Ihnen auch den Zugriff auf das Variation-Objekt, das Details zur zugewiesenen Variation und ihrem zugehörigen Experiment enthält. Diese Methode prüft, ob der Benutzer angesprochen wird, findet die dem Besucher zugewiesene Variation und speichert sie im Speicher. Wenn track=true ist, sendet das SDK das Expositionsereignis an das angegebene Experiment bei der nächsten Tracking-Anfrage, die automatisch basierend auf dem tracking_interval_millisecond des SDK ausgelöst wird. Standardmäßig ist dieses Intervall auf 1000 Millisekunden (1 Sekunde) eingestellt.
Die Methode getVariation() ermöglicht es Ihnen zu steuern, ob das Tracking durchgeführt wird. Wenn track=false, werden keine Expositionsereignisse vom SDK gesendet. Dies ist nützlich, wenn Sie Daten nicht über das SDK verfolgen möchten und sich stattdessen beispielsweise auf das client-seitige Tracking verlassen, das von der Kameleoon-Engine verwaltet wird. Außerdem ist die Einstellung track=false hilfreich bei der Verwendung der Methode getVariations(), bei der Sie möglicherweise nur die Variationen für alle Flags benötigen, ohne Tracking-Ereignisse auszulösen. Wenn Sie mehr darüber erfahren möchten, wie das Tracking funktioniert, lesen Sie diesen Artikel
Adding data points to target a user or filter / breakdown visits in reports
Um einen Benutzer anzusprechen, stellen Sie sicher, dass Sie relevante Datenpunkte zu seinem Profil hinzugefügt haben, bevor Sie die Feature-Variation abrufen oder prüfen, ob das Flag aktiv ist. Verwenden Sie die Methode addData(), um diese Datenpunkte zum Profil des Benutzers hinzuzufügen.
Um Datenpunkte abzurufen, die auf anderen Geräten gesammelt wurden, oder um auf vergangene Benutzerdaten zuzugreifen (clientseitig gesammelt bei Verwendung von Kameleoon im Hybrid-Modus), verwenden Sie die Methode getRemoteVisitorData(). Diese Methode ruft Daten asynchron von den Servern ab. Es ist wichtig, getRemoteVisitorData() vor dem Abrufen der Variation oder der Überprüfung, ob das Feature Flag aktiv ist, aufzurufen, da diese Daten erforderlich sein können, um einem Benutzer eine bestimmte Variation zuzuweisen.
Um mehr über die verfügbaren Targeting-Bedingungen zu erfahren, sehen Sie sich den detaillierten Artikel zum Thema an.
Darüber hinaus stehen die Datenpunkte, die Sie dem Besucherprofil hinzufügen, bei der Analyse Ihrer Experimente zur Verfügung, sodass Sie Ihre Ergebnisse nach Faktoren wie Gerät und Browser filtern und aufschlüsseln können. Der Kameleoon Hybrid-Modus sammelt automatisch eine Vielzahl von Datenpunkten clientseitig, was es einfach macht, Ihre Ergebnisse basierend auf diesen vorab gesammelten Datenpunkten aufzuschlüsseln. Die vollständige Liste finden Sie hier.
Wenn Sie zusätzliche Datenpunkte über das hinaus verfolgen müssen, was automatisch gesammelt wird, können Sie die Custom Data-Funktion von Kameleoon verwenden. Mit Custom Data können Sie spezifische Informationen erfassen und analysieren, die für Ihre Experimente relevant sind. Vergessen Sie nicht, die Methode flush() aufzurufen, um die gesammelten Daten zur Analyse an die Kameleoon-Server zu senden.
Um die Genauigkeit Ihrer Ergebnisse zu gewährleisten, wird empfohlen, Bots mithilfe des Datentyps UserAgent herauszufiltern.
Tracking goal conversions
Wenn ein Benutzer eine gewünschte Aktion abschließt (z. B. einen Kauf tätigt), wird dies als Konversion aufgezeichnet. Um Konversionen zu verfolgen, verwenden Sie die Methode trackConversion() und geben Sie die erforderlichen Parameter visitorCode und goalId an.
Die Konversions-Tracking-Anfrage wird zusammen mit der nächsten geplanten Tracking-Anfrage gesendet, die das SDK in regelmäßigen Abständen sendet (definiert durch tracking_interval_millisecond). Wenn Sie die Anfrage sofort senden möchten, verwenden Sie die Methode flush() mit dem Parameter instant=true.
Sending events to analytics solutions
Um Konversionen zu verfolgen und Expositionsereignisse an Ihre Kundenanalyselösung zu senden, müssen Sie Kameleoon zunächst im Hybrid-Modus implementieren. Verwenden Sie dann die Methode getEngineTrackingCode().
Die Methode getEngineTrackingCode() ruft den eindeutigen Tracking-Code ab, der zum Senden von Expositionsereignissen an Ihre Analyselösung erforderlich ist. Mit dieser Methode können Sie Ereignisse aufzeichnen und an die gewünschte Analyseplattform senden.
React Native considerations
React Native auf der android-Plattform unterstützt die Funktion Real Time Update nicht.
Obwohl das React SDK sowohl in React Native- als auch in React-Kontexten auf die gleiche Weise funktioniert, ist es wichtig zu beachten, dass sich die Einrichtungsschritte unterscheiden.
Aufgrund des Fehlens einer Browser-API in React Native muss das React SDK über verschiedene Implementierungen externer Abhängigkeiten verfügen, um korrekt zu funktionieren.
Zu diesem Zweck stellt Kameleoon mehrere dedizierte npm-Pakete bereit, die Sie installieren und manuell einrichten oder mit dem Kameleoon SDK Installation Tool installieren können (empfohlen).
Die Pakete umfassen:
@kameleoon/react-native-storage - erstellt mit der Bibliothek react-native-mmkv
@kameleoon/react-native-event-source - erstellt mit der Bibliothek react-native-event-source-ts
@kameleoon/react-native-visitor-code-manager - erstellt auf Basis der Bibliothek react-native-mmkv
@kameleoon/react-native-platform-analyzer - erstellt mit der Bibliothek react-native
- optional
@kameleoon/react-native-secure-prng - erstellt mit der Bibliothek react-native-get-random-values
Wenn Sie die aufgeführten Pakete nicht verwenden möchten, können Sie Ihre eigene Implementierung gemäß dem Leitfaden zu externen Abhängigkeiten bereitstellen.
Beispiel für die React SDK-Einrichtung für eine React Native-Anwendung:
import { createClient } from '@kameleoon/react-sdk';
import { KameleoonEventSource } from '@kameleoon/react-native-event-source';
import { KameleoonStorage } from '@kameleoon/react-native-storage';
import { KameleoonVisitorCodeManager } from '@kameleoon/react-native-visitor-code-manager';
import { KameleoonSecurePRNG } from '@kameleoon/react-native-secure-prng';
import { KameleoonPlatformAnalyzer } from '@kameleoon/react-native-platform-analyzer';
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
storage: new KameleoonStorage(),
eventSource: new KameleoonEventSource(),
visitorCodeManager: new KameleoonVisitorCodeManager(),
platformAnalyzer: new KameleoonPlatformAnalyzer(),
// -- Optional --
prng: new KameleoonSecurePRNG(),
},
});
import { createClient } from '@kameleoon/react-sdk';
import { KameleoonEventSource } from '@kameleoon/react-native-event-source';
import { KameleoonStorage } from '@kameleoon/react-native-storage';
import { KameleoonVisitorCodeManager } from '@kameleoon/react-native-visitor-code-manager';
import { KameleoonSecurePRNG } from '@kameleoon/react-native-secure-prng';
import { KameleoonPlatformAnalyzer } from '@kameleoon/react-native-platform-analyzer';
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
storage: new KameleoonStorage(),
eventSource: new KameleoonEventSource(),
visitorCodeManager: new KameleoonVisitorCodeManager(),
platformAnalyzer: new KameleoonPlatformAnalyzer(),
// -- Optional --
prng: new KameleoonSecurePRNG(),
},
});
Using a custom bucketing key
Standardmäßig verwendet Kameleoon eine eindeutige, anonyme Besucher-ID (visitorCode), um Benutzer Feature-Flag-Variationen zuzuweisen. Diese ID wird in der Regel auf dem Gerät des Benutzers generiert und gespeichert (in einem Browser-Cookie für client- und serverseitige SDKs — im persistenten Speicher für mobile SDKs). In bestimmten Szenarien müssen Sie jedoch möglicherweise sicherstellen, dass alle Benutzer derselben Organisation dieselbe Variante eines Feature Flags sehen.
Die Option Custom Bucketing Key ermöglicht es Ihnen, dieses Standardverhalten zu überschreiben, indem Sie Ihre eigene benutzerdefinierte Kennung für das Bucketing bereitstellen. Diese Überschreibung stellt sicher, dass die Zuweisungslogik von Kameleoon Ihren angegebenen Schlüssel anstelle des Standard-visitorCode verwendet.
Use cases
Die Verwendung eines benutzerdefinierten Bucketing-Keys ist entscheidend für die Aufrechterhaltung der Konsistenz und Genauigkeit Ihrer Feature-Flag-Zuweisungen, insbesondere in diesen Situationen:
- Experimente auf Konto- oder Organisationsebene: Für B2B-Produkte oder Szenarien, in denen Sie alle Benutzer derselben Organisation derselben Variation zuweisen möchten, können Sie eine Kennung wie eine
accountId verwenden. Custom Bucketing Keys sind entscheidend für A/B test-Funktionen, die ein ganzes Team oder Unternehmen betreffen.
Durch die Implementierung eines benutzerdefinierten Bucketing-Keys sorgen Sie für eine größere Konsistenz und Genauigkeit in Ihren Experimenten, was zu zuverlässigeren Ergebnissen und einer besseren Benutzererfahrung führt.
Technical details
Wenn Sie einen benutzerdefinierten Bucketing-Key für ein Feature Flag konfigurieren, stellen Sie Kameleoon eine bestimmte Kennung aus den Daten Ihrer Anwendung zur Verfügung:
addData(visitorCode, new CustomData(index, 'newVisitorCode'));
- Bereitstellung des benutzerdefinierten Schlüssels: Sie stellen dem Kameleoon SDK Ihre benutzerdefinierte Kennung mithilfe der Methode
addData() zur Verfügung. In dieser Methode übergeben Sie Ihren gewählten benutzerdefinierten Bucketing-Key als CustomData-Objekt. Hier bezieht sich newVisitorCode auf die Kennung, die Sie für Ihr Bucketing verwenden möchten (z. B. die neue userId oder accountId).
Damit der benutzerdefinierte Bucketing-Key korrekt funktioniert, muss er auch während des Erstellungs- oder Bearbeitungsprozesses des Feature Flags definiert und konfiguriert werden. Ohne diese entsprechende Konfiguration wird das Bucketing des SDK Ihren benutzerdefinierten Schlüssel nicht anwenden. Detaillierte Anweisungen zur Einrichtung in Kameleoon finden Sie in diesem Artikel.
- Bucketing-Logik: Sobald ein benutzerdefinierter Bucketing-Key über die Methode
addData() bereitgestellt wird, verwenden alle Hash-Berechnungen zur Zuweisung von Benutzern zu Variationen diesen newVisitorCode (Ihren benutzerdefinierten Schlüssel) anstelle des Standard-visitorCode. Die Verwendung des newVisitorCode bedeutet, dass die Bucketing-Entscheidung an Ihre benutzerdefinierte Kennung gebunden ist, was konsistente Zuweisungen über verschiedene Kontexte hinweg gewährleistet, in denen diese Kennung vorhanden ist.
- Datenerfassung und Analytik: Es ist wichtig zu beachten, dass, obwohl der
newVisitorCode (Ihr benutzerdefinierter Schlüssel) für Bucketing-Entscheidungen verwendet wird, alle nachfolgenden Daten (z. B. Tracking-Ereignisse und Konversionen) gesendet und mit dem ursprünglichen visitorCode verknüpft werden. Diese Trennung stellt sicher, dass Ihre Analytik die individuellen Benutzerreisen und Interaktionen im breiteren Kontext Ihres Experiments genau widerspiegelt, auch wenn das Bucketing auf einer höheren Ebene (wie einem Konto) oder über mehrere Geräte/Sitzungen hinweg erfolgt. Ihre ursprünglichen Besucherdaten bleiben für umfassende Berichte intakt.
Technical requirementes
Um einen benutzerdefinierten Bucketing-Key effektiv zu verwenden:
- Der Schlüssel muss eine
string sein.
- Er muss für die Entität, die Sie bucketen möchten, eindeutig sein (z. B. sollte bei Verwendung einer
userId die ID jedes Benutzers eindeutig sein).
- Der Schlüssel muss dem SDK genau zu dem Zeitpunkt zur Verfügung stehen, an dem die Feature-Flag-Entscheidung für diesen Benutzer oder diese Anfrage ausgewertet wird.
Targeting conditions
Die Kameleoon SDKs unterstützen eine Vielzahl vordefinierter Targeting-Bedingungen, die Sie zum Targeting von Benutzern in Ihren Kampagnen verwenden können.
Die Liste der von diesem SDK unterstützten Bedingungen finden Sie unter use visit history to target users.
Sie können auch Ihre eigenen externen Daten zum Targeting von Benutzern verwenden.
Logging
Das SDK generiert Logs, um verschiedene interne Prozesse und Probleme widerzuspiegeln.
Log levels
Das SDK unterstützt die Konfiguration der Begrenzung des Loggings durch ein Log-Level.
import { KameleoonClient, KameleoonLogger, LogLevel } from '@kameleoon/react-sdk';
const client = createClient({ siteCode: 'my_site_code', configuration });
// The `NONE` log level does not allow logging.
client.setLogLevel(LogLevel.NONE);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.NONE);
// The `ERROR` log level only allows logging issues that may affect the SDK's main behaviour.
client.setLogLevel(LogLevel.ERROR);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.ERROR);
// The `WARNING` log level allows logging issues which may require additional attention.
// It extends the `ERROR` log level.
// The `WARNING` log level is a default log level.
client.setLogLevel(LogLevel.WARNING);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.WARNING);
import { KameleoonClient, KameleoonLogger, LogLevel } from ‘@kameleoon/react-sdk/full’;
// The `INFO` log level allows logging general information on the SDK’s internal processes.
// It extends the `WARNING` log level.
client.setLogLevel(LogLevel.INFO);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.INFO);
// The `DEBUG` level logs additional details about the SDK’s internal processes and extends the `INFO` level
// with more granular. diagnostic output.
// This information is not intended for end-user interpretation but can be sent to our support team
// to assist with internal troubleshooting.
client.setLogLevel(LogLevel.DEBUG);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.DEBUG);
import { KameleoonClient, KameleoonLogger, LogLevel } from ‘@kameleoon/react-sdk’;
const client = createClient({ siteCode: ‘my_site_code’, configuration });
// The `NONE` log level allows no logging.
client.setLogLevel(LogLevel.NONE);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.NONE);
// The `ERROR` log level only allows logging issues that may affect the SDK’s main behaviour.
client.setLogLevel(LogLevel.ERROR);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.ERROR);
// The `WARNING` log level allows logging issues which may require additional attention.
// It extends the `ERROR` log level.
// The `WARNING` log level is a default log level.
client.setLogLevel(LogLevel.WARNING);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.WARNING);
import { KameleoonClient, KameleoonLogger, LogLevel } from ‘@kameleoon/react-sdk/full’;
// The `INFO` log level allows logging general information on the SDK’s internal processes.
// It extends the `WARNING` log level.
client.setLogLevel(LogLevel.INFO);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.INFO);
// The `DEBUG` level logs additional details about the SDK’s internal processes and extends the `INFO` level
// with more granular. diagnostic output.
// This information is not intended for end-user interpretation but can be sent to our support team
// to assist with internal troubleshooting.
client.setLogLevel(LogLevel.DEBUG);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.DEBUG);
Custom handling of logs
Das SDK schreibt seine Logs standardmäßig in die Konsolenausgabe. Dieses Verhalten kann überschrieben werden.
Die Logging-Begrenzung durch ein Log-Level wird unabhängig von der Log-Handhabungslogik durchgeführt.
import { KameleoonClient, KameleoonLogger, IExternalLogger, LogLevel } from '@kameleoon/react-sdk';
export class CustomLogger implements IExternalLogger {
// `log` method accepts logs from the SDK
public log(level: LogLevel, message: string): void {
// Custom log handling logic here. For example:
switch (level) {
case LogLevel.DEBUG:
console.debug(message);
break;
case LogLevel.INFO:
console.info(message);
break;
case LogLevel.WARNING:
console.warn(message);
break;
case LogLevel.ERROR:
console.error(message);
break;
}
}
}
const client = createClient({
siteCode: 'my_site_code',
externals: {
logger: new CustomLogger(),
},
});
// Log level filtering is applied separately from log handling logic.
// The custom logger will only accept logs that meet or exceed the specified log level.
// Ensure the log level is set correctly.
client.setLogLevel(LogLevel.DEBUG);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.DEBUG);
import { KameleoonClient, KameleoonLogger, LogLevel } from '@kameleoon/react-sdk';
export class CustomLogger {
// `log` method accepts logs from the SDK
log(level, message) {
// Custom log handling logic here. For example:
switch (level) {
case 'DEBUG':
console.debug(message);
break;
case 'INFO':
console.info(message);
break;
case 'WARNING':
console.warn(message);
break;
case 'ERROR':
console.error(message);
break;
}
}
}
const client = createClient({
siteCode: 'my_site_code',
externals: {
logger: new CustomLogger(),
},
});
// Log level filtering is applied separately from log handling logic.
// The custom logger will only accept logs that meet or exceed the specified log level.
// Ensure the log level is set correctly.
client.setLogLevel(LogLevel.DEBUG);
// Or use KameleoonLogger
KameleoonLogger.setLogLevel(LogLevel.DEBUG);
Domain information
Sie geben eine Domain als domain in der [Konfiguration] von KameleoonClient an, die zum Speichern des Kameleoon Visitor Code in Cookies verwendet wird. Dies ist wichtig, wenn Sie mit den Methoden getVisitorCode und setLegalConsent arbeiten. Die von Ihnen angegebene Domain wird im Cookie als Schlüssel Domain= gespeichert.
Setting the domain
Die von Ihnen angegebene Domain gibt an, dass die URL-Adresse das Cookie verwenden kann. Wenn Ihre Domain beispielsweise www.example.com ist, ist das Cookie nur von einer www.example.com-URL aus verfügbar. Das bedeutet, dass Seiten mit der Domain app.example.com das Cookie nicht verwenden können.
Um flexibler mit Subdomains umzugehen, können Sie eine Domain mit . voranstellen. Zum Beispiel ermöglicht die Domain .example.com, dass das Cookie sowohl auf app.example.com als auch auf login.example.com funktioniert.
Sie können keine regulären Ausdrücke, Sonderzeichen, Protokolle oder Portnummern in der domain verwenden.
Zusätzlich darf eine bestimmte Liste von Subdomains nicht mit dem Präfix . verwendet werden.
Hier ist ein kleiner Domain-Spickzettel:
| Domain | Zulässige URLs | Nicht zulässige URLs |
|---|
www.example.com | ✅www.example.com | ❌ app.example.com |
| ✅ example.com | ❌ .com |
| | |
.example.com = example.com | ✅ example.com | ❌ otherexample.com |
| ✅ www.example.com | |
| ✅ app.example.com | |
| ✅ login.example.com | |
https://www.example.com | ⛔ ungültige Domain | ⛔ ungültige Domain |
www.example.com:4408 | ⛔ ungültige Domain | ⛔ ungültige Domain |
.localhost.com = localhost | ⛔ ungültige Domain | ⛔ ungültige Domain |
Developing on localhost
localhost wird immer als ungültige Domain betrachtet, was das Testen der Domain bei der Entwicklung auf localhost erschwert.
Es gibt zwei Möglichkeiten, dieses Problem zu vermeiden:
- Geben Sie das Feld
domain im SDK-Client während des Testens nicht an. Dies vermeidet localhost-Probleme (das Cookie wird auf jeder Domain gesetzt).
- Erstellen Sie eine lokale Domain für
localhost. Zum Beispiel:
- Navigieren Sie zu
/etc/hosts auf Linux oder zu c:\Windows\System32\Drivers\etc\hosts auf Windows
- Öffnen Sie
hosts mit Superuser- oder Administratorrechten
- Fügen Sie dem localhost-Port eine Domain hinzu, zum Beispiel:
127.0.0.1 app.com
- Jetzt können Sie Ihre Anwendung lokal auf
app.com:{my_port} ausführen und .app.com als Ihre Domain angeben
External dependencies
Externe SDK-Abhängigkeiten verwenden das Dependency Injection-Muster, um Ihnen die Möglichkeit zu geben, Ihre eigenen Implementierungen für bestimmte Teile eines SDK bereitzustellen.
Im React SDK haben alle externen Abhängigkeiten Standardimplementierungen, die eine native Browser-API verwenden, sodass es nicht erforderlich ist, sie bereitzustellen, es sei denn, für bestimmte Anwendungsfälle ist eine andere API erforderlich.
Hier ist die Liste der verfügbaren externen Abhängigkeiten:
| Abhängigkeit | Interface | Verwendete API | Beschreibung |
|---|
storage (optional) | IExternalStorage | Browser localStorage | Wird zum Speichern aller vorhandenen und gesammelten SDK-Daten verwendet |
requester (optional) | IExternalRequester | Browser fetch | Wird zur Durchführung aller Netzwerkanfragen verwendet |
eventSource (optional) | IExternalEventSource | Browser EventSource | Wird zum Empfangen von Server Sent Events für Real Time Update-Funktionen verwendet |
visitorCodeManager (optional) | IExternalVisitorCodeManager | Browser-Cookie | Wird zum Speichern und Synchronisieren des Visitor Code verwendet |
prng (optional) | IExternalPRNG | Math.random oder Browser crypto.getRandomValues | Wird zum Generieren eindeutiger IDs für Tracking-Ereignisse verwendet |
logger (optional) | ILogger | Benutzerdefinierte Implementierung | Wird für die benutzerdefinierte Behandlung von Logs aus dem SDK verwendet. Ermöglicht die Definition, wie Logs verarbeitet und wo sie ausgegeben werden. |
platformAnalyzer (optional) | IPlatformAnalyzer | React Native-API | Erkennt automatisch die Plattform und fügt diese Information den Besucherdaten hinzu. Speziell für React Native entwickelt. |
Das folgende Beispiel implementiert externe Abhängigkeiten. Um eine Schnittstelle aus einem SDK zu importieren, erstellen Sie eine Klasse, die sie implementiert, und übergeben Sie die instanziierte Klasse an das SDK.
Storage
import { IExternalStorage } from '@kameleoon/react-sdk';
// --- External Storage implementation ---
// - JavaScript `Map` is used as an example storage
const storage = new Map();
class MyStorage<T> implements IExternalStorage<T> {
public read(key: string): T | null {
// - Read data using `key`
const data = storage.get(key);
// - Return `null` if there's no data
if (!data) {
return null;
}
// - Return obtained data
return data;
}
public write(key: string, data: T): void {
// - Write data using `key`
storage.set(key, data);
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
storage: new MyStorage(),
},
});
import { KameleoonClient } from '@kameleoon/react-sdk';
// --- External Storage implementation ---
// - JavaScript `Map` is used as an example storage
const storage = new Map();
class MyStorage {
read(key) {
// - Read data using `key`
const data = storage.get(key);
// - Return `null` if there's no data
if (!data) {
return null;
}
// - Return obtained data
return data;
}
write(key, data) {
// - Write data using `key`
storage.set(key, data);
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
storage: new MyStorage(),
},
});
EventSource
import {
IExternalEventSource,
EventSourceOpenParametersType,
} from '@kameleoon/react-sdk';
// --- External EventSource implementation ---
// - Example uses native browser `EventSource`
class MyEventSource implements IExternalEventSource {
private eventSource?: EventSource;
public open({
eventType,
onEvent,
url,
}: EventSourceOpenParametersType): void {
// - Initialize `EventSource`
const eventSource = new EventSource(url);
this.eventSource = eventSource;
// - Add event listener with provided event type and event callback
this.eventSource.addEventListener(eventType, onEvent);
}
public close(): void {
// - Cleanup open event source
if (this.eventSource) {
this.eventSource.close();
}
}
public onError(callback: (error: Event) => void): void {
// - Set error callback
if (this.eventSource) {
this.eventSource.onerror = callback;
}
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
eventSource: new MyEventSource(),
},
});
// --- External EventSource implementation ---
// - Example uses native browser `EventSource`
class MyEventSource {
eventSource;
open({ eventType, onEvent, url }) {
// - Initialize `EventSource`
const eventSource = new EventSource(url);
this.eventSource = eventSource;
// - Add event listener with provided event type and event callback
this.eventSource.addEventListener(eventType, onEvent);
}
close() {
// - Cleanup open event source
if (this.eventSource) {
this.eventSource.close();
}
}
public onError(callback) {
// - Set error callback
if (this.eventSource) {
this.eventSource.onerror = callback;
}
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
eventSource: new MyEventSource(),
},
});
VisitorCodeManager
import {
IExternalVisitorCodeManager,
SetDataParametersType,
KameleoonUtils,
} from '@kameleoon/react-sdk';
// --- External Visitor Code Manager implementation ---
// - Example uses browser `document.cookie` API
class MyVisitorCodeManager implements IExternalVisitorCodeManager {
public getData(key: string): string | null {
const cookieString = document.cookie;
// - Return `null` if no cookie was found
if (!cookieString) {
return null;
}
// - Parse cookie using provided `key`
return KameleoonUtils.getCookieValue(cookieString, key);
}
public setData({
visitorCode,
domain,
maxAge,
key,
path,
}: SetDataParametersType): void {
// - Set cookie with provided parameters
let resultCookie = `${key}=${visitorCode}; Max-Age=${maxAge}; Path=${path}`;
if (domain) {
resultCookie += `; Domain=${domain}`;
}
document.cookie = resultCookie;
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
visitorCodeManager: new MyVisitorCodeManager(),
},
});
import { KameleoonUtils } from '@kameleoon/react-sdk';
// --- External Visitor Code Manager implementation ---
// - Example uses browser `document.cookie` API
class MyVisitorCodeManager {
getData(key) {
const cookieString = document.cookie;
// - Return `null` if no cookie was found
if (!cookieString) {
return null;
}
// - Parse cookie using provided `key`
return KameleoonUtils.getCookieValue(cookieString, key);
}
setData({ visitorCode, domain, maxAge, key, path }) {
// - Set cookie with provided parameters
let resultCookie = `${key}=${visitorCode}; Max-Age=${maxAge}; Path=${path}`;
if (domain) {
resultCookie += `; Domain=${domain}`;
}
document.cookie = resultCookie;
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
visitorCodeManager: new MyVisitorCodeManager(),
},
});
Requester
import {
RequestType,
IExternalRequester,
KameleoonResponseType,
SendRequestParametersType,
} from '@kameleoon/react-sdk';
// --- External Requester Implementation
export class MyRequester implements IExternalRequester {
public async sendRequest({
url,
parameters,
}: SendRequestParametersType<RequestType>): Promise<KameleoonResponseType> {
// - Using native browser `fetch`
return await fetch(url, parameters);
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
requester: new MyRequester(),
},
});
import { KameleoonClient } from '@kameleoon/react-sdk';
// --- External Requester Implementation
export class MyRequester {
async sendRequest({ url, parameters }) {
// - Using native browser `fetch`
return await fetch(url, parameters);
}
}
// --- Create KameleoonClient ---
const client = new KameleoonClient({
siteCode: 'my_site_code',
externals: {
requester: new MyRequester(),
},
});
Pseudo Random Number Generator
Der Pseudo Random Number Generator (PRNG) ist eine Abhängigkeit, die eine zufällige Gleitkommazahl zwischen 0 und 1 generiert (ähnlich wie Math.random).
Die Standardimplementierung von Kameleoon basiert auf der crypto-Funktion des Browsers oder auf Math.random, wenn crypto nicht verfügbar ist.
Diese APIs sind sehr sicher und zuverlässig, jedoch möchten Sie in einigen Grenzfällen (insbesondere in einigen React Native-Engines) möglicherweise Ihre eigene Implementierung bereitstellen oder ein dediziertes Kameleoon-Paket für React Native verwenden - @kameleoon/react-native-secure-prng
import { IExternalPRNG } from '@kameleoon/react-sdk';
// --- External Pseudo Random Number Generator (PRNG) implementation ---
class MyPRNG implements IExternalPRNG {
public getRandomNumber(): number {
// Return a random floating point number between `0` and `1`, like `Math.random()` does.
return Math.random();
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
prng: new MyPRNG(),
},
});
// --- External Pseudo Random Number Generator (PRNG) implementation ---
class MyPRNG {
getRandomNumber() {
// Return a random floating point number between `0` and `1`, like `Math.random()` does.
return Math.random();
}
}
// --- Create KameleoonClient ---
const client = createClient({
siteCode: 'my_site_code',
externals: {
prng: new MyPRNG(),
},
});
Error Handling
Fast jeder React SDK-Callback, der von Hooks zurückgegeben wird, kann irgendwann einen Fehler auslösen; diese Fehler sind nicht nur Warnhinweise, sondern absichtlich vordefinierte KameleoonErrors,
die die native Error-Klasse von JavaScript erweitern und nützliche Nachrichten sowie ein spezielles type-Feld mit dem Typ KameleoonException bereitstellen.
KameleoonException ist eine Enum, die alle möglichen Fehlertypen enthält.
Um genau zu wissen, welche Art von KameleoonException die Callbacks auslösen können, können Sie den Abschnitt Throws der Hook-Beschreibung auf dieser Seite überprüfen oder einfach in Ihrer IDE über den Callback fahren, um die jsdoc-Beschreibung zu sehen.
Insgesamt wird die Behandlung der Fehler als bewährte Vorgehensweise betrachtet, um Ihre Anwendung stabiler zu machen und technische Probleme zu vermeiden.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
KameleoonError,
KameleoonException,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
try {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
} catch (error) {
// -- Type guard for inferring error type, as native JavaScript `catch`
// only infers `unknown`.
if (error instanceof KameleoonError) {
switch (error.type) {
case KameleoonException.VisitorCodeMaxLength:
// -- Handle an error
break;
case KameleoonException.StorageWrite:
// -- Handle an error
break;
case KameleoonException.Initialization:
// -- Handle an error
break;
default:
break;
}
}
}
}, [initialize, addData, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
KameleoonException,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData } = useData();
const init = useCallback(async () => {
try {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
} catch (error) {
switch (error.type) {
case KameleoonException.VisitorCodeMaxLength:
// -- Handle an error
break;
case KameleoonException.StorageWrite:
// -- Handle an error
break;
case KameleoonException.Initialization:
// -- Handle an error
break;
default:
break;
}
}
}, [initialize, addData, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Cross-device experimentation
Um Besucher zu unterstützen, die von mehreren Geräten aus auf eine App zugreifen, ermöglicht Kameleoon die Synchronisierung zuvor gesammelter Besucherdaten über jedes der Geräte des Besuchers hinweg und die Abstimmung seines Besuchsverlaufs über Geräte hinweg durch geräteübergreifende Experimentation. Fallstudien und detaillierte Informationen darüber, wie Kameleoon Daten geräteübergreifend verarbeitet, finden Sie im Artikel zur geräteübergreifenden Experimentation.
Synchronizing custom data across devices
Obwohl benutzerdefinierte Mapping-Synchronisierung verwendet wird, um Besucherdaten geräteübergreifend abzugleichen, ist sie nicht immer erforderlich. Im Folgenden sind zwei Szenarien aufgeführt, in denen keine benutzerdefinierte Mapping-Synchronisierung erforderlich ist:
Gleiche Benutzer-ID über Geräte hinweg
Wenn dieselbe Benutzer-ID konsistent auf allen Geräten verwendet wird, wird die Synchronisierung automatisch ohne benutzerdefinierte Mapping-Synchronisierung gehandhabt. Es genügt, die Methode getRemoteVisitorData() aufzurufen, wenn Sie die zwischen mehreren Geräten gesammelten Daten synchronisieren möchten.
Multi-Server-Instanzen mit konsistenten IDs
In komplexen Setups mit mehreren Servern (z. B. verteilte Server-Instanzen), bei denen dieselbe Benutzer-ID auf allen Servern verfügbar ist, ist die Synchronisierung zwischen Servern (mit getRemoteVisitorData()) ohne zusätzliche benutzerdefinierte Mapping-Synchronisierung ausreichend.
Kunden, die zusätzliche Daten benötigen, können die Beschreibung der Methode getRemoteVisitorData() für weitere Anleitungen konsultieren. Im folgenden Code wird angenommen, dass dieselbe eindeutige Kennung (in diesem Fall der visitorCode, der auch als userId bezeichnet werden kann) konsistent zwischen den beiden Geräten für eine genaue Datenabfrage verwendet wird.
Wenn Sie gesammelte Daten in Echtzeit synchronisieren möchten, müssen Sie den Scope Visitor für Ihre Custom Data wählen.
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData, flush } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Custom Data with index `0` was set to `Visitor` scope
// in Kameleoon.
const customDataIndex = 0;
const customData = new CustomData(customDataIndex, 'my_data');
addData('my_visitor', customData);
flush();
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getRemoteVisitorData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Before working with data, call `getRemoteVisitorData`.
await getRemoteVisitorData({ visitorCode: 'my_visitor_code' });
// -- New SDK code will have access to CustomData with `Visitor` scope
// defined on Device One.
// So, "my_data" is now available to target and track "my_visitor".
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData, flush } = useData();
const init = useCallback(async () => {
await initialize();
// -- Custom Data with index `0` was set to `Visitor` scope
// in Kameleoon.
const customDataIndex = 0;
const customData = new CustomData(customDataIndex, 'my_data');
addData('my_visitor', customData);
flush();
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getRemoteVisitorData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Before working with data, call `getRemoteVisitorData`.
await getRemoteVisitorData({ visitorCode: 'my_visitor_code' });
// -- New SDK code will have access to CustomData with `Visitor` scope
// defined on Device One.
// So, "my_data" is now available to target and track "my_visitor".
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Using custom data for session merging
SDK Version 9
SDK Version 10
Geräteübergreifende Experimentation ermöglicht es Ihnen, den Verlauf eines Besuchers über jedes seiner Geräte hinweg zu kombinieren (Verlaufsabstimmung). Eine der leistungsstarken Funktionen, die die Verlaufsabstimmung bietet, ist die Möglichkeit, verschiedene Besuchersitzungen zu einer zusammenzuführen. Um den Besuchsverlauf abzustimmen, können Sie CustomData verwenden, um eine eindeutige Kennung für den Besucher bereitzustellen.Folgen Sie dem Leitfaden activating cross-device history reconciliation, um Ihre Custom Data auf der Kameleoon-Plattform einzurichtenWenn Ihre Custom Data eingerichtet sind, können Sie sie in Ihrem Code verwenden, um die Sitzung eines Besuchers zusammenzuführen.
Sitzungen mit derselben Kennung sehen immer dieselbe Experiment-Variation und werden als einzelner Besucher in der Visitor-Ansicht der Ergebnisseiten Ihres Experiments angezeigt.Die SDK-Konfiguration stellt sicher, dass zugehörige Sitzungen immer dieselbe Variation des Experiments sehen.Anschließend können Sie das SDK normal verwenden. Die folgenden Methoden können im Kontext der Sitzungszusammenführung hilfreich sein:
- Verwenden Sie
getRemoteVisitorData mit isUniqueIdentifier=true, um Daten für alle verknüpften Besucher abzurufen
- Verwenden Sie
trackConversion oder flush mit isUniqueIdentifier=true, um einige Daten für einen bestimmten Besucher zu verfolgen, der mit einem anderen Besucher verknüpft ist
Hier ist ein Beispiel für die Verwendung von Custom Data zur Sitzungszusammenführung. In diesem Beispiel haben wir eine Anwendung mit einer Login-Seite. Da wir die Benutzer-ID zum Zeitpunkt der Anmeldung nicht kennen, verwenden wir eine anonyme Besucherkennung, die von der Methode getVisitorCode generiert wird. Nach der Anmeldung des Benutzers können wir den anonymen Besucher mit der Benutzer-ID verknüpfen und ihn als eindeutige Kennung für den Besucher verwenden.import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function LoginPage(): JSX.Element {
const [visitorCode, setVisitorCode] = useState<string | null>(null);
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
const anonymousVisitor = getVisitorCode();
// -- Saving `visitorCode` in the state to re-use it later.
setVisitorCode(anonymousVisitor);
// -- Getting a variation, assume it's variation `A`
const variation = getVariation({
visitorCode: anonymousVisitor,
featureKey: 'my_feature_key',
});
}, [initialize, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
type Props = {
anonymousVisitor: string;
};
function ApplicationPage(props: Props): JSX.Element {
const { addData, trackConversion, getRemoteVisitorData } = useData();
const { getVariation } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
// -- At this point anonymous visitor has logged in,
// and we have a user ID to use as a visitor identifier
// -- Associating both visitors with an identifier Custom Data,
// where index `1` is the Custom Data's index, configured
// as a unique identifier in Kameleoon.
const userIdentifierData = new CustomData(1, 'my_user_id');
// -- Let's assume the anonymous visitor identifier
// was passed as a prop.
addData(props.anonymousVisitor, userIdentifierData);
// -- Retrieving the variation for the user ID ensures
// consistency with the anonymous visitor's variation.
// Both the anonymous visitor and the user ID will be
// assigned variation `A`.
const variation = getVariation({
visitorCode: 'my_user_id',
featureKey: 'my_feature_key',
});
// -- `my_user_id` and `anonymousVisitor` are now linked.
// They can be tracked as a single visitor.
trackConversion({
visitorCode: 'my_user_id',
goalId: 123,
revenue: 100,
// -- Informing the SDK that the visitor is a unique identifier
isUniqueIdentifier: true,
});
// -- Additionally, linked visitors share previously
// collected remote data.
const data = await getRemoteVisitorData({
visitorCode: 'my_user_id',
// -- Informing the SDK that the visitor is a unique identifier.
isUniqueIdentifier: true,
});
}, [
getRemoteVisitorData,
trackConversion,
addData,
getVariation,
]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function LoginPage() {
const [visitorCode, setVisitorCode] = useState(null);
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
const anonymousVisitor = getVisitorCode();
// -- Saving `visitorCode` in the state to re-use it later.
setVisitorCode(anonymousVisitor);
// -- Getting a variation, assume it's variation `A`
const variation = getVariation({
visitorCode: anonymousVisitor,
featureKey: 'my_feature_key',
});
}, [initialize, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function ApplicationPage(props) {
const { addData, trackConversion, getRemoteVisitorData } = useData();
const { getVariation } = useFeatureFlag();
const init = useCallback(async () => {
// -- At this point anonymous visitor has logged in,
// and we have a user ID to use as a visitor identifier
// -- Associating both visitors with an identifier Custom Data,
// where index `1` is the Custom Data's index, configured
// as a unique identifier in Kameleoon.
const userIdentifierData = new CustomData(1, 'my_user_id');
// -- Let's assume the anonymous visitor identifier
// was passed as a prop.
addData(props.anonymousVisitor, userIdentifierData);
// -- Retrieving the variation for the user ID ensures
// consistency with the anonymous visitor's variation.
// Both the anonymous visitor and the user ID will be
// assigned variation `A`.
const variation = getVariation({
visitorCode: 'my_user_id',
featureKey: 'my_feature_key',
});
// -- `my_user_id` and `anonymousVisitor` are now linked.
// They can be tracked as a single visitor.
trackConversion({
visitorCode: 'my_user_id',
goalId: 123,
revenue: 100,
// -- Informing the SDK that the visitor is a unique identifier.
isUniqueIdentifier: true,
});
// -- Additionally, linked visitors share previously
// collected remote data.
const data = await getRemoteVisitorData({
visitorCode: 'my_user_id',
// -- Informing the SDK know the visitor is a unique identifier.
isUniqueIdentifier: true,
});
}, [
getRemoteVisitorData,
trackConversion,
addData,
getVariation,
]);
useEffect(() => {
init();
}, [init]);
}
Geräteübergreifende Experimentation ermöglicht es Ihnen, den Verlauf eines Besuchers über jedes seiner Geräte hinweg zu kombinieren (Verlaufsabstimmung). Eine der leistungsstarken Funktionen, die die Verlaufsabstimmung bietet, ist die Möglichkeit, verschiedene Besuchersitzungen zu einer zusammenzuführen. Um den Besuchsverlauf abzustimmen, können Sie CustomData verwenden, um eine eindeutige Kennung für den Besucher bereitzustellen.Folgen Sie dem Leitfaden activating cross-device history reconciliation, um Ihre Custom Data auf der Kameleoon-Plattform einzurichtenWenn Ihre Custom Data eingerichtet sind, können Sie sie in Ihrem Code verwenden, um die Sitzung eines Besuchers zusammenzuführen.
Sitzungen mit derselben Kennung sehen immer dieselbe Experiment-Variation und werden als einzelner Besucher in der Visitor-Ansicht der Ergebnisseiten Ihres Experiments angezeigt.Die SDK-Konfiguration stellt sicher, dass zugehörige Sitzungen immer dieselbe Variation des Experiments sehen.Bevor Sie andere Methoden verwenden, stellen Sie sicher, dass Sie das SDK darüber informieren, dass der Besucher eine eindeutige Kennung ist, indem Sie einem Besucher UniqueIdentifier-Daten hinzufügenHier ist ein Beispiel für die Verwendung von Custom Data zur Sitzungszusammenführung. In diesem Beispiel haben wir eine Anwendung mit einer Login-Seite. Da wir die Benutzer-ID zum Zeitpunkt der Anmeldung nicht kennen, verwenden wir eine anonyme Besucherkennung, die von der Methode getVisitorCode generiert wird. Nach der Anmeldung des Benutzers können wir den anonymen Besucher mit der Benutzer-ID verknüpfen und ihn als eindeutige Kennung für den Besucher verwenden.import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function LoginPage(): JSX.Element {
const [visitorCode, setVisitorCode] = useState<string | null>(null);
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
const anonymousVisitor = getVisitorCode();
// -- Saving `visitorCode` in the state to re-use it later.
setVisitorCode(anonymousVisitor);
// -- Getting a variation, assume it's variation `A`
const variation = getVariation({
visitorCode: anonymousVisitor,
featureKey: 'my_feature_key',
});
}, [initialize, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
UniqueIdentifier,
} from '@kameleoon/react-sdk';
type Props = {
anonymousVisitor: string;
};
function ApplicationPage(props: Props): JSX.Element {
const { addData, trackConversion, getRemoteVisitorData, flush } = useData();
const { getVariation } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
// -- At this point anonymous visitor has logged in,
// and we have a user ID to use as a visitor identifier
// -- Associating both visitors with an identifier Custom Data,
// where index `1` is the Custom Data's index, configured
// as a unique identifier in Kameleoon.
const userIdentifierData = new CustomData(1, 'my_user_id');
// -- Let's assume the anonymous visitor identifier
// was passed as a prop.
addData(props.anonymousVisitor, userIdentifierData);
// -- Flushing data for the anonymous `visitorCode`
flush(props.anonymousVisitor);
// -- Informing the SDK that the visitor is unique identifier.
addData('my_user_id', new UniqueIdentifier(true));
// -- Retrieving the variation for the user ID ensures
// consistency with the anonymous visitor's variation.
// Both the anonymous visitor and the user ID will be
// assigned variation `A`.
const variation = getVariation({
visitorCode: 'my_user_id',
featureKey: 'my_feature_key',
});
// -- `my_user_id` and `anonymousVisitor` are now linked.
// They can be tracked as a single visitor.
trackConversion({
visitorCode: 'my_user_id',
goalId: 123,
revenue: 100,
});
// -- Additionally, linked visitors share previously
// collected remote data.
const data = await getRemoteVisitorData({
visitorCode: 'my_user_id',
});
}, [
getRemoteVisitorData,
trackConversion,
addData,
getVariation,
]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function LoginPage() {
const [visitorCode, setVisitorCode] = useState(null);
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
const anonymousVisitor = getVisitorCode();
// -- Saving `visitorCode` in the state to re-use it later.
setVisitorCode(anonymousVisitor);
// -- Getting a variation, assume it's variation `A`
const variation = getVariation({
visitorCode: anonymousVisitor,
featureKey: 'my_feature_key',
});
}, [initialize, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
UniqueIdentifier,
} from '@kameleoon/react-sdk';
function ApplicationPage(props) {
const { addData, trackConversion, getRemoteVisitorData, flush } = useData();
const { getVariation } = useFeatureFlag();
const init = useCallback(async () => {
// -- At this point anonymous visitor has logged in,
// and we have a user ID to use as a visitor identifier
// -- Associating both visitors with an identifier Custom Data,
// where index `1` is the Custom Data's index, configured
// as a unique identifier in Kameleoon.
const userIdentifierData = new CustomData(1, 'my_user_id');
// -- Let's assume the anonymous visitor identifier
// was passed as a prop.
addData(props.anonymousVisitor, userIdentifierData);
// -- Flushing data for the anonymous `visitorCode`
flush(props.anonymousVisitor);
// -- Informing the SDK that the visitor is a unique identifier.
addData('my_user_id', new UniqueIdentifier(true));
// -- Retrieving the variation for the user ID ensures
// consistency with the anonymous visitor's variation.
// Both the anonymous visitor and the user ID will be
// assigned variation `A`.
const variation = client.getVariation({
visitorCode: 'my_user_id',
featureKey: 'my_feature_key',
});
// -- `my_user_id` and `anonymousVisitor` are now linked.
// They can be tracked as a single visitor.
trackConversion({
visitorCode: 'my_user_id',
goalId: 123,
revenue: 100,
});
// -- Additionally, linked visitors share previously
// collected remote data.
const data = await getRemoteVisitorData({
visitorCode: 'my_user_id',
});
}, [
getRemoteVisitorData,
trackConversion,
addData,
getVariation,
]);
useEffect(() => {
init();
}, [init]);
}
Utilities
Das SDK verfügt über eine Reihe von Utility-Methoden, die zur Vereinfachung des Entwicklungsprozesses verwendet werden können. Alle Methoden werden als statische Mitglieder der Klasse KameleoonUtils dargestellt.
simulateSuccessRequest
Die Methode simulateSuccessRequest wird verwendet, um eine erfolgreiche Anfrage an den Kameleoon-Server zu simulieren. Sie kann für benutzerdefinierte Requester-Implementierungen nützlich sein, wenn der Entwickler eine erfolgreiche Anfrage simulieren muss, z. B. um das Tracking zu deaktivieren.
import {
KameleoonUtils,
IExternalRequester,
SendRequestParametersType,
RequestType,
KameleoonResponseType,
} from '@kameleoon/react-sdk';
// - Example of `Requester` with disabled tracking
class Requester implements IExternalRequester {
public async sendRequest({
url,
parameters,
requestType,
}: SendRequestParametersType<RequestType>): Promise<KameleoonResponseType> {
if (requestType === RequestType.Tracking) {
return KameleoonUtils.simulateSuccessRequest<RequestType.Tracking>(
requestType,
null,
);
}
return await fetch(url, parameters);
}
}
import { KameleoonUtils } from '@kameleoon/react-sdk';
// - Example of `Requester` with disabled tracking
class Requester {
async sendRequest({ url, parameters, requestType }) {
if (requestType === RequestType.Tracking) {
return KameleoonUtils.simulateSuccessRequest(requestType, null);
}
return await fetch(url, parameters);
}
}
Arguments
| Name | Typ | Beschreibung |
|---|
| requestType (required) | RequestType | Ein Anfragetyp |
| data (required) | SimulateRequestDataType[RequestType] | Ein Typ von Anfragedaten, der je nach RequestType unterschiedlich ist |
Der Datentyp SimulateRequestDataType ist wie folgt definiert:
RequestType.Tracking - null
RequestType.ClientConfiguration - ClientConfigurationDataType
RequestType.RemoteData - JSONType
Return value
| Typ | Beschreibung |
|---|
Promise<KameleoonResponseType> | gibt ein Promise mit der Antwort der Anfrage zurück |
getCookieValue
Die Methode getCookieValue wird verwendet, um eine gängige Cookie-Zeichenfolge (key_1=value_1; key_2=value_2; ...) zu parsen und den Wert eines bestimmten Cookie-Schlüssels abzurufen. Sie ist nützlich bei der Arbeit mit einer benutzerdefinierten Implementierung von VisitorCodeManager.
import { KameleoonUtils } from '@kameleoon/react-sdk';
const cookies = 'key_1=value_1; key_2=value_2';
const key = 'key_1';
const value = KameleoonUtils.getCookieValue(cookies, key); // = `value_1`
import { KameleoonUtils } from '@kameleoon/react-sdk';
const cookies = 'key_1=value_1; key_2=value_2';
const key = 'key_1';
const value = KameleoonUtils.getCookieValue(cookies, key); // = `value_1`
Arguments
| Name | Typ | Beschreibung |
|---|
| cookie (required) | string | Cookie-Zeichenfolge in der Form key_1=value_1; key_2=value_2 |
| key (required) | string | Zeichenfolgendarstellung eines Schlüssels, mit dem ein Wert gefunden wird |
Return value
| Typ | Beschreibung | |
|---|
| `string | null` | gibt eine Zeichenfolge mit einem Cookie-Wert oder null zurück, wenn der Schlüssel nicht gefunden wurde |
Reference
Dies ist die vollständige Referenzdokumentation für das React SDK.
Initialization
Dieser Abschnitt bietet die Methoden, die Sie zum Erstellen und Initialisieren des Kameleoon Client in Ihrer Anwendung verwenden.
initialize()
SDK Version 9
SDK Version 10
Eine asynchrone initialize-Funktion, die mit dem Hook useInitialize gesammelt wird und für die Initialisierung von KameleoonClient verwendet wird, indem sie Kameleoon SDK-bezogene Daten vom Server abruft oder Daten aus einer lokalen Quelle abruft, wenn die Daten aktuell sind oder das Aktualisierungsintervall noch nicht erreicht wurde.
-
Wenn die SDK-Konfiguration nicht abgerufen werden konnte, aber im SDK-Speicher eine ältere Konfiguration verfügbar ist, verwendet das SDK die ältere Konfiguration als Fallback und
initialize löst keinen Fehler aus.
-
Die Client-Initialisierung verfügt über einen optionalen Offline-Modus.
Er wird durch Setzen des optionalen Parameters
useCache auf true aktiviert.
Im Offline-Modus sendet das SDK die Anfrage automatisch erneut, sobald es feststellt, dass die Internetverbindung wiederhergestellt wurde, falls Tracking-Anfragen von einer der folgenden Methoden aufgrund von Internetverbindungsproblemen fehlschlagen:import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const init = useCallback(async (): Promise<void> => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const init = useCallback(async () => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung | Standardwert |
|---|
| useCache (optional) | boolean or undefined | Parameter zum Aktivieren des SDK-Offline-Modus; wenn true übergeben wird, geben fehlgeschlagene Abfragen keinen Fehler zurück und verwenden zwischengespeicherte Daten, falls verfügbar | false |
Return value
| Typ | Beschreibung |
|---|
Promise<boolean> | ein Promise, das in einen Boolean aufgelöst wird, der eine erfolgreiche SDK-Initialisierung anzeigt. Im Allgemeinen löst initialize einen Fehler aus, wenn etwas passiert, das nicht behandelt werden kann, sodass der boolean-Wert fast immer true ist und nicht viele nützliche Informationen liefert. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden |
KameleoonException.ClientConfiguration | Client-Konfiguration konnte nicht von der Kameleoon-API abgerufen werden |
KameleoonException.MaximumRetriesReached | Maximale Wiederholungsanzahl erreicht, Anfrage fehlgeschlagen |
Eine asynchrone initialize-Funktion, die mit dem Hook useInitialize gesammelt wird und für die Initialisierung von KameleoonClient verwendet wird, indem sie Kameleoon SDK-bezogene Daten vom Server abruft oder Daten aus einer lokalen Quelle abruft, wenn die Daten aktuell sind oder das Aktualisierungsintervall noch nicht erreicht wurde.
-
Wenn die SDK-Konfiguration nicht abgerufen werden konnte, aber im SDK-Speicher eine ältere Konfiguration verfügbar ist, verwendet das SDK die ältere Konfiguration als Fallback und
initialize löst keinen Fehler aus.
-
Das SDK unterstützt einen Offline-Modus.
Im Offline-Modus sendet das SDK die Anfrage automatisch erneut, sobald es feststellt, dass die Internetverbindung wiederhergestellt wurde, falls Tracking-Anfragen von einer der folgenden Methoden aufgrund von Internetverbindungsproblemen fehlschlagen:import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const init = useCallback(async (): Promise<void> => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const init = useCallback(async () => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
Return value
| Typ | Beschreibung |
|---|
Promise<boolean> | ein Promise, das in einen Boolean aufgelöst wird, der eine erfolgreiche SDK-Initialisierung anzeigt. Im Allgemeinen löst initialize einen Fehler aus, wenn etwas passiert, das nicht behandelt werden kann, sodass der boolean-Wert fast immer true ist und nicht viele nützliche Informationen liefert. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden |
KameleoonException.ClientConfiguration | Client-Konfiguration konnte nicht von der Kameleoon-API abgerufen werden |
KameleoonException.MaximumRetriesReached | Maximale Wiederholungsanzahl erreicht, Anfrage fehlgeschlagen |
isInitialized()
Die Funktion isInitialized, die mit dem Hook useInitialize gesammelt wird, ist eine kleine Utility-Methode, die prüft, ob die SDK-Initialisierung abgeschlossen ist. Dies kann beispielsweise nützlich sein, wenn Sie mit einem tief verschachtelten Komponentenbaum arbeiten, da Sie schnell die SDK-Bereitschaft überprüfen können, ohne einen globalen Zustand verwalten zu müssen oder das Initialisierungsergebnis über Komponenten-Props zu übergeben.
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const init = useCallback(async (): Promise<void> => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
function DeeplyNestedComponent(): JSX.Element {
const { isInitialized } = useInitialize();
const { getVariation } = useFeatureFlag();
if (isInitialized()) {
const variation = getVariation({ visitorCode: 'visitor_code', featureKey: 'my_feature_key' });
}
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const init = useCallback(async () => {
await initialize();
}, [initialize]);
useEffect(() => {
init();
}, [init]);
}
function DeeplyNestedComponent() {
const { isInitialized } = useInitialize();
const { getVariation } = useFeatureFlag();
if (isInitialize()) {
const variation = getVariation({ visitorCode: 'visitor_code', featureKey: 'my_feature_key' });
}
}
Return value
Ein boolean-Wert. Gibt true zurück, wenn das SDK erfolgreich initialisiert wurde, andernfalls false.
createClient()
Um zu beginnen, müssen Sie einen Einstiegspunkt für das React SDK erstellen, indem Sie auf der obersten Ebene Ihrer Anwendung einen Kameleoon Client mit der aus dem kameleoon-Paket importierten Funktion createClient() erstellen.
Eine Instanz von KameleoonClient wird mit der Funktion createClient() erstellt.
import {
createClient,
Environment,
SDKConfigurationType,
} from '@kameleoon/react-sdk';
// -- Optional configuration
const configuration: Partial<SDKConfigurationType> = {
updateInterval: 60,
environment: Environment.Production,
cookieDomain: '.example.com',
};
const client = createClient({ siteCode: 'my_site_code', configuration });
import { createClient, Environment } from '@kameleoon/react-sdk';
// -- Optional configuration
const configuration = {
updateInterval: 60,
environment: Environment.Production,
cookieDomain: '.example.com',
};
const client = createClient({ siteCode: 'my_site_code', configuration });
Arguments
Ein Objekt vom Typ SDKParameters, das Folgendes enthält:
| Name | Typ | Beschreibung |
|---|
| siteCode (required) | string | Dies ist ein eindeutiger Schlüssel des Kameleoon-Projekts, das Sie mit dem SDK verwenden. Dieses Feld ist obligatorisch. |
| configuration (optional) | Partial<SDKConfigurationType> | Konfiguration des Clients |
| externals (optional) | ExternalsType | externe Implementierung der SDK-Abhängigkeiten (External dependencies) |
Configuration Parameters
SDK Version 9
SDK Version 10
| Name | Typ | Beschreibung | Standardwert |
|---|
| updateInterval (optional) | number | Gibt das Aktualisierungsintervall in Minuten an, in dem das SDK die Konfiguration für die aktiven Experimente und Feature Flags abruft. Der Wert bestimmt die maximale Zeit, die benötigt wird, um Änderungen wie das Aktivieren oder Deaktivieren von Feature Flags oder das Starten von Experimenten auf Ihre Produktionsserver zu übertragen. Wenn nicht angegeben, ist das Standardintervall auf 60 Minuten festgelegt. Darüber hinaus bieten wir einen Streaming-Modus, der server-sent events (SSE) verwendet, um neue Konfigurationen automatisch an das SDK zu übertragen und neue Konfigurationen in Echtzeit ohne Verzögerungen anzuwenden. | 60 |
| environment (optional) | Environment | Feature-Flag-Umgebung | Environment.Production |
| targetingDataCleanupInterval (optional) | number | Intervall in Minuten zum Bereinigen von Targeting-Daten; Mindestwert ist 1 Minute | undefined (keine Bereinigung wird durchgeführt) |
| domain (optional) | string | Domain, zu der das Cookie gehört. Veraltet, verwenden Sie stattdessen cookieDomain | undefined |
| cookieDomain (optional) | string | Domain, zu der das Cookie gehört. | undefined |
| networkDomain (optional) | string | benutzerdefinierte Domain, die die SDKs für alle ausgehenden Netzwerkanfragen verwenden, häufig für Proxying verwendet. Das Format ist second_level_domain.top_level_domain (z. B. example.com). Wenn ein ungültiges Format angegeben wird, verwendet das SDK den Standard-Kameleoon-Wert | undefined |
| requestTimeout (optional) | number | Timeout in Millisekunden für alle SDK-Netzwerkanfragen; wenn das Timeout überschritten wird, schlägt die Anfrage sofort fehl | 10_000 (10 Sekunden) |
| trackingInterval (optional) | number | Gibt das Intervall für Tracking-Anfragen in Millisekunden an. Alle Besucher, die für ein Feature Flag ausgewertet wurden oder zugehörige Daten hatten, werden in diese Tracking-Anfrage einbezogen, die einmal pro Intervall ausgeführt wird. Der Mindestwert beträgt 100 ms und der Höchstwert 1_000 ms | 1_000 (1 Sekunde) |
Der Parameter domain ist veraltet und wird in einer zukünftigen Version entfernt. Verwenden Sie stattdessen cookieDomain.
| Name | Typ | Beschreibung | Standardwert |
|---|
| updateInterval (optional) | number | Gibt das Aktualisierungsintervall in Minuten an, in dem das SDK die Konfiguration für die aktiven Experimente und Feature Flags abruft. Der Wert bestimmt die maximale Zeit, die benötigt wird, um Änderungen wie das Aktivieren oder Deaktivieren von Feature Flags oder das Starten von Experimenten auf Ihre Produktionsserver zu übertragen. Wenn nicht angegeben, ist das Standardintervall auf 60 Minuten festgelegt. Darüber hinaus bieten wir einen Streaming-Modus, der server-sent events (SSE) verwendet, um neue Konfigurationen automatisch an das SDK zu übertragen und neue Konfigurationen in Echtzeit ohne Verzögerungen anzuwenden. | 60 |
| environment (optional) | Environment | string | Feature-Flag-Umgebung | Environment.Production |
| targetingDataCleanupInterval (optional) | number | Intervall in Minuten zum Bereinigen von Targeting-Daten; Mindestwert ist 1 Minute | undefined (keine Bereinigung wird durchgeführt) |
| cookieDomain (optional) | string | Domain, zu der das Cookie gehört. | undefined |
| networkDomain (optional) | string | benutzerdefinierte Domain, die die SDKs für alle ausgehenden Netzwerkanfragen verwenden, häufig für Proxying verwendet. Das Format ist second_level_domain.top_level_domain (z. B. example.com). Wenn ein ungültiges Format angegeben wird, verwendet das SDK den Standard-Kameleoon-Wert | undefined |
| requestTimeout (optional) | number | Timeout in Millisekunden für alle SDK-Netzwerkanfragen; wenn das Timeout überschritten wird, schlägt die Anfrage sofort fehl | 10_000 (10 Sekunden) |
| trackingInterval (optional) | number | Gibt das Intervall für Tracking-Anfragen in Millisekunden an. Alle Besucher, die für ein Feature Flag ausgewertet wurden oder zugehörige Daten hatten, werden in diese Tracking-Anfrage einbezogen, die einmal pro Intervall ausgeführt wird. Der Mindestwert beträgt 1_000 ms und der Höchstwert 5_000 ms | 1_000 (1 Sekunde) |
| stubMode (optional) | boolean | Wenn auf true gesetzt, arbeitet der Client im Stub-Modus und führt keine Operationen aus. In diesem Modus führen alle Methodenaufrufe keine Aktionen aus, wodurch sichergestellt wird, dass keine externen Aktionen oder Nebenwirkungen auftreten. | false |
| defaultDataFile (optional) | string | Die Funktion defaultDataFile stellt sicher, dass das Kameleoon SDK immer READY ist, indem sie eine Fallback-Konfiguration bereitstellt, wenn keine zwischengespeicherte Datendatei existiert. Entwickler können eine gültige Konfiguration vorab laden, indem sie sie von https://sdk-config.kameleoon.eu/v3/<sitecode> abrufen und während der Initialisierung als defaultDataFile übergeben. Wenn ein Zeitstempel dateModified (in Millisekunden) angegeben ist und neuer als die zwischengespeicherte Version ist, verwendet das SDK die Standard-Datendatei anstelle der zwischengespeicherten Version. Wenn dateModified weggelassen wird, wird die Standard-Datendatei nur angewendet, wenn keine zwischengespeicherte Version existiert. Dadurch wird sichergestellt, dass das SDK immer über eine gültige Konfiguration verfügt, sei es Standard, zwischengespeichert oder aktualisiert. | undefined |
Option 1 (Empfohlen): Verwenden Sie JSON.stringify()const dataFileJson = {"configuration":{"consentType":.....,
{"key":"show_car","type":"JSON","value":"{\"make\":\"Porsche\",\"model\":\"911\"}"}},
"dateModified":1752209266000};
const dataFileString = JSON.stringify(dataFileJson);
const configuration = {
updateInterval: 20,
defaultDataFile: dataFileString
};
Option 2: Rohe JSON-Zeichenfolge (Sonderzeichen escapen)const configuration = {
updateInterval: 20,
defaultDataFile: `{"configuration":{"consentType":.....,
{"key":"show_car","type":"JSON","value":"{\\"make\\":\\"Porsche\\",\\"model\\":\\"911\\"}"},
"dateModified":1752209266000}`
};
Return value
| Typ | Beschreibung |
|---|
KameleoonClient | eine Instanz von KameleoonClient. |
Stellen Sie sicher, dass Sie nicht mehrere Client-Instanzen in einer Anwendung verwenden, da dies noch nicht vollständig unterstützt wird und die Konfiguration des lokalen Speichers überschreiben und unerwartetes Verhalten (Bugs) verursachen kann.
Feature flags and variations
Dieser Abschnitt bietet die Methoden, die Sie verwenden, um die Feature Flags und Variationen abzurufen und zu verwalten, die dem Besucher zugewiesen sind.
getVariation()
- 📨 Sendet Tracking-Daten an Kameleoon (abhängig vom
track-Parameter)
Ruft die Variation ab, die einem bestimmten Besucher für ein bestimmtes Feature Flag zugewiesen ist.
Diese Methode nimmt featureKey als obligatorisches Argument und track als optionales Argument. Das track-Argument ist optional und standardmäßig true.
Sie gibt die zugewiesene Variation für den Besucher zurück. Wenn der Besucher mit keinen Feature-Flag-Regeln verknüpft ist, gibt die Methode die Standard-Variation für das angegebene Feature Flag zurück.
Stellen Sie sicher, dass in Ihrem Code eine ordnungsgemäße Fehlerbehandlung implementiert ist, um potenzielle Ausnahmen zu verwalten.
Die Standardvariation bezieht sich auf die Variation, die einem Besucher zugewiesen wird, wenn er keinen vordefinierten Bereitstellungsregeln für ein Feature Flag entspricht. Mit anderen Worten, es ist die Fallback-Variation, die auf alle Benutzer angewendet wird, die nicht von bestimmten Regeln angesprochen werden. Sie wird als Variation im Abschnitt “Then, for everyone else…” in einer Verwaltungsoberfläche dargestellt.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
// -- Get variation with tracking
const variation = getVariation({
visitorCode,
featureKey: 'my_feature_key',
});
// -- Get variation without tracking
const variation = getVariation({
visitorCode,
featureKey: 'my_feature_key',
track: false,
});
// -- An Example variation:
// {
// key: 'variation_key',
// id: 123,
// experimentId: 456,
// variables: Map {
// 'variable_key' => {
// key: 'variable_key',
// type: VariableType.BOOLEAN,
// value: true,
// }
// },
// }
}, [initialize, visitorCode, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVariation } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
// -- Get variation with tracking
const variation = getVariation({
visitorCode,
featureKey: 'my_feature_key',
});
// -- Get variation without tracking
const variation = getVariation({
visitorCode,
featureKey: 'my_feature_key',
track: false,
});
// -- An Example variation:
// {
// key: 'variation_key',
// id: 123,
// experimentId: 456,
// variables: Map {
// 'variable_key' => {
// key: 'variable_key',
// type: VariableType.BOOLEAN,
// value: true,
// }
// },
// }
}, [initialize, visitorCode, getVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Ein Objekt vom Typ GetVariationParamsType mit folgenden Eigenschaften:
| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. | |
| featureKey (required) | string | Schlüssel der Funktion, die Sie einem Besucher zugänglich machen möchten. | |
| track (optional) | boolean | Ein optionaler Parameter zum Aktivieren oder Deaktivieren des Trackings der Feature-Auswertung. | true |
Return value
| Typ | Beschreibung |
|---|
Variation | Eine zugewiesene Variation für einen bestimmten Besucher für ein bestimmtes Feature Flag. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat. |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
KameleoonException.FeatureFlagConfigurationNotFound | Ausnahme, die anzeigt, dass der angeforderte Feature-Schlüssel in der internen Konfiguration des SDK nicht gefunden wurde. Dies bedeutet in der Regel, dass das Feature Flag in der Kameleoon-App nicht aktiviert ist (aber der Code, der die Funktion implementiert, bereits in der Anwendung bereitgestellt ist). |
KameleoonException.FeatureFlagEnvironmentDisabled | Ausnahme, die anzeigt, dass das Feature Flag für die aktuelle Umgebung des Besuchers (z. B. production, staging oder development) deaktiviert ist. |
getVariations()
Die Methode wird mit dem Hook useFeatureFlag erhalten.
Ruft eine Map von Variation-Objekten ab, die einem bestimmten Besucher über alle Feature Flags hinweg zugewiesen sind.
Diese Methode iteriert über alle verfügbaren Feature Flags und gibt die zugewiesene Variation für jedes Flag zurück, das mit dem angegebenen Besucher verknüpft ist. Sie nimmt visitorCode als obligatorisches Argument, während onlyActive und track optional sind.
- Wenn
onlyActive auf true gesetzt ist, gibt die Methode getVariations() Feature-Flag-Variationen zurück, vorausgesetzt, der Benutzer wird nicht der off-Variation zugeordnet.
- Der
track-Parameter steuert, ob die Methode die Variationszuweisungen verfolgt. Standardmäßig ist er auf true gesetzt. Wenn er auf false gesetzt ist, wird das Tracking deaktiviert.
Die zurückgegebene Map besteht aus Feature-Flag-Schlüsseln als Schlüsseln und ihren entsprechenden Variations als Werten. Wenn keine Variation für ein Feature Flag zugewiesen ist, gibt die Methode die Standard-Variation für dieses Flag zurück.
Eine ordnungsgemäße Fehlerbehandlung sollte implementiert werden, um potenzielle Ausnahmen zu verwalten.
Die Standardvariation bezieht sich auf die Variation, die einem Besucher zugewiesen wird, wenn er keinen vordefinierten Bereitstellungsregeln für ein Feature Flag entspricht. Mit anderen Worten, es ist die Fallback-Variation, die auf alle Benutzer angewendet wird, die nicht von bestimmten Regeln angesprochen werden. Sie wird als Variation im Abschnitt “Then, for everyone else…” in einer Verwaltungsoberfläche dargestellt.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVariations } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
// -- Get all feature flag variations with tracking
const variations = getVariations({
visitorCode,
});
// -- Get active feature flag variations with tracking
const variations = getVariations({
visitorCode,
onlyActive: true,
});
// -- Get active feature flag variations without tracking
const variations = getVariations({
visitorCode,
onlyActive: true,
track: false,
});
// -- An Example variations:
// Map {
// 'feature_key' => {
// key: 'variation_key',
// id: 123,
// experimentId: 456,
// variables: Map {
// 'variable_key' => {
// key: 'variable_key',
// type: VariableType.BOOLEAN,
// value: true,
// }
// },
// }
// }
}, [initialize, visitorCode, getVariations, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVariations } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
// -- Get all feature flag variations with tracking
const variations = getVariations({
visitorCode,
});
// -- Get active feature flag variations with tracking
const variations = getVariations({
visitorCode,
onlyActive: true,
});
// -- Get active feature flag variations without tracking
const variations = getVariations({
visitorCode,
onlyActive: true,
track: false,
});
// -- An Example variations:
// Map {
// 'feature_key' => {
// key: 'variation_key',
// id: 123,
// experimentId: 456,
// variables: Map {
// 'variable_key' => {
// key: 'variable_key',
// type: VariableType.BOOLEAN,
// value: true,
// }
// },
// }
// }
}, [initialize, visitorCode, getVariations, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Ein Objekt vom Typ GetVariationsParamsType mit folgenden Eigenschaften:
| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. | |
| onlyActive (optional) | boolean | Ein optionaler Parameter, der angibt, ob Variationen für aktive (true) oder alle (false) Feature Flags zurückgegeben werden sollen. | false |
| track (optional) | boolean | Ein optionaler Parameter zum Aktivieren oder Deaktivieren des Trackings der Feature-Auswertung. | true |
Return value
| Typ | Beschreibung |
|---|
Map<string, Variation> | Map, die die zugewiesenen Variation-Objekte der Feature Flags unter Verwendung der Schlüssel der entsprechenden Features enthält. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat. |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
isFeatureFlagActive()
- 📨 Sendet Tracking-Daten an Kameleoon (abhängig vom
track-Parameter)
- 🎯 Events:
EventType.Evaluation
Die Methode isFeatureFlagActive(), die mit dem Hook useFeatureFlag verwendet wird, bestimmt, ob ein durch visitorCode identifizierter Besucher den angegebenen featureKey aktiv hat. Diese Methode überprüft die Targeting-Bedingungen, identifiziert die Variation für den Besucher und speichert diese Information im Speicher. Zusätzlich sendet der Hook eine Tracking-Anfrage.
Es gibt auch eine Überladung für diese Methode, die einen track-Parameter enthält, mit dem Sie das Tracking der Feature-Auswertung deaktivieren können.
Der Besucher muss angesprochen werden, damit das Feature Flag aktiv ist
Kameleoon verwendet Tracking, um Sitzungen und Besucher zu zählen, wenn Sie bestimmte Methoden aufrufen, wie z. B. isFeatureFlagActive(), getVariation() oder getVariations().Verwenden Sie den Standardwert true für den track-Parameter, wenn Sie Besucher einer Variation aussetzen und sie zählen müssen. Setzen Sie den track-Parameter nur dann auf false, wenn Sie diese Methoden aufrufen, bevor Sie Besucher aussetzen.Wenn Sie beispielsweise getVariations() aufrufen, um alle Variationen abzurufen, bevor Sie Besucher aussetzen, setzen Sie den track-Parameter auf false. Diese Einstellung verhindert, dass Kameleoon eine Sitzung vorzeitig zählt. Sie können dann später das Tracking auslösen, wenn Sie den Besucher explizit aussetzen.Kameleoon sendet Tracking-Daten standardmäßig jede Sekunde. Sie können dieses Intervall mithilfe der Konfigurationsoption für das Tracking-Intervall auf bis zu fünf Sekunden konfigurieren. Kameleoon gruppiert Tracking-Ereignisse zu einer einzelnen Sitzung, solange das Intervall zwischen Ereignissen weniger als 30 Minuten beträgt. Wenn zwischen Tracking-Ereignissen mehr als 30 Minuten vergehen, zählt Kameleoon die Ereignisse als separate Sitzungen. Ein Besuch erscheint in Ihren Berichten 30 Minuten nach dem letzten aufgezeichneten Ereignis in der Sitzung.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const { isFeatureFlagActive } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
const featureKey = 'my_feature_key';
// -- Add CustomData with index `0` containing visitor id to check the targeting
addData(visitorCode, new CustomData(0, 'visitor_id'));
// -- Get the status of feature flag
const isActive = isFeatureFlagActive(visitorCode, featureKey);
// -- Check if the feature flag is active for visitor without tracking
const isActive = isFeatureFlagActive({ visitorCode, featureKey: 'my_feature', track: false});
}, [initialize, visitorCode, isFeatureFlagActive, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
useFeatureFlag,
useVisitorCode,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const { isFeatureFlagActive } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code using `getVisitorCode` function.
const visitorCode = getVisitorCode();
const featureKey = 'my_feature_key';
// -- Add CustomData with index `0` containing visitor id to check targeting.
addData(visitorCode, new CustomData(0, 'visitor_id'));
// -- Get the feature flag's status.
const isActive = isFeatureFlagActive(visitorCode, featureKey);
// -- Check if the feature flag is active for visitors without tracking.
const isActive = isFeatureFlagActive({ visitorCode, featureKey: 'my_feature', track: false});
}, [initialize, visitorCode, isFeatureFlagActive, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Die Methode isFeatureFlagActive() wertet die ausgelieferte Variante aus, nicht den Master-Flag-Status. Wenn Sie Regeln ausschließen, verwendet die Methode den Then, for everyone else serve Standardstatus. Wenn Sie für diesen Standardstatus Off auswählen, gibt die Methode immer false zurück, auch wenn das Master-Feature-Flag On ist.
Arguments
Für diese Methode sind zwei Überladungen verfügbar:
- Überladung mit zwei Parametern:
Diese Überladung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte verwenden Sie die neue Überladung mit einem Objektparameter.
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| featureKey (required) | string | ein eindeutiger Schlüssel für das Feature Flag |
- Überladung mit Objektparameter vom Typ
IsFeatureFlagActiveParamsType:
| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten | - |
| featureKey (required) | string | ein eindeutiger Schlüssel für das Feature Flag | - |
| track (optional) | boolean | ein boolescher Indikator, der angibt, ob die Feature-Auswertung verfolgt werden soll | true |
Return value
| Typ | Beschreibung |
|---|
boolean | Indikator, ob das Feature Flag mit featureKey für den Besucher mit visitorCode aktiv ist. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.FeatureFlagConfigurationNotFound | Kein Feature Flag wurde für den angegebenen featureKey gefunden |
KameleoonException.DataInconsistency | Eine zugewiesene Variation wurde gefunden, aber es gibt kein Feature Flag mit entsprechendem featureKey |
setForcedVariation()
Die Methode ermöglicht es Ihnen, programmatisch einem Benutzer eine bestimmte Variation zuzuweisen und den Standard-Auswertungsprozess zu umgehen. Dies ist besonders wertvoll für kontrollierte Experimente, bei denen die übliche Auswertungslogik nicht erforderlich ist oder übersprungen werden muss. Es kann auch in Szenarien wie Debugging oder benutzerdefiniertem Testen hilfreich sein.
Wenn eine forced-Variation festgelegt wird, überschreibt sie die Echtzeit-Auswertungslogik von Kameleoon. Prozesse wie Segmentierung, Targeting-Bedingungen und algorithmische Berechnungen werden übersprungen. Um Segmentierung und Targeting-Bedingungen während eines Experiments beizubehalten, setzen Sie stattdessen forceTargeting=false.
Simulated-Variationen haben in der Ausführungsreihenfolge immer Vorrang. Wenn die Berechnung einer simulated-Variation ausgelöst wird, wird sie vollständig verarbeitet und zuerst abgeschlossen.
Eine forced-Variation wird genauso behandelt wie eine ausgewertete Variation. Sie wird in der Analytik verfolgt und im Benutzerkontext wie jede standardmäßige ausgewertete Variation gespeichert, um die Konsistenz der Berichterstattung zu gewährleisten.
Die Methode kann unter bestimmten Bedingungen Ausnahmen auslösen (z. B. ungültige Parameter, Benutzerkontext oder interne Probleme). Eine ordnungsgemäße Ausnahmebehandlung ist entscheidend, um sicherzustellen, dass Ihre Anwendung stabil und widerstandsfähig bleibt.
Es ist wichtig, forced-Variationen von simulated-Variationen zu unterscheiden:
- Forced variations: sind spezifisch für ein einzelnes Experiment.
- Simulated variations: wirken sich auf das gesamte feature flag-Ergebnis aus.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { setForcedVariation } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Forcing the variation "on" in the feature flag "featureKey1" for the visitor
setForcedVariation({
visitorCode: visitorCode,
experimentId: 9516,
variationKey: 'on',
forceTargeting: false,
});
// -- Resetting the forced variation for the "featureKey1" feature flag for the visitor
setForcedVariation({
visitorCode: visitorCode,
experimentId: 9516,
variationKey: null,
});
}, [initialize, visitorCode, setForcedVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { setForcedVariation } = useFeatureFlag();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Forcing the variation "on" for the "featureKey1" feature flag for the visitor
setForcedVariation({
visitorCode: visitorCode,
experimentId: 9516,
variationKey: 'on',
forceTargeting: false,
});
// -- Resetting the forced variation for the "featureKey1" feature flag for the visitor
setForcedVariation({
visitorCode: visitorCode,
experimentId: 9516,
variationKey: null,
});
}, [initialize, visitorCode, setForcedVariation, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Ein Objekt vom Typ SetForcedVariationParametersType mit folgenden Eigenschaften:
| Name | Typ | Beschreibung | Standard | |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. | | |
| experimentId (required) | number | Experiment Id, die während des Auswertungsprozesses gezielt und ausgewählt wird. | | |
| variationKey (required) | `string | null` | Variation Key, der einer Variation entspricht, die als zurückgegebener Wert für das Experiment forciert werden soll. Wenn der Wert null ist, wird die forcierte Variation zurückgesetzt. | |
| forceTargeting (optional) | boolean | Gibt an, ob das Targeting für das Experiment forciert und übersprungen werden soll (true) oder wie im Standard-Auswertungsprozess angewendet werden soll (false). | true | |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
KameleoonException.Initialization | Gibt an, dass das SDK noch nicht vollständig initialisiert ist. |
KameleoonException.FeatureFlagExperimentNotFound | Ausnahme, die anzeigt, dass die angeforderte Experiment-ID in der internen Konfiguration des SDK nicht gefunden wurde. Dies ist in der Regel normal und bedeutet, dass das der Regel entsprechende Experiment auf der Kameleoon-Seite noch nicht aktiviert wurde. |
KameleoonException.FeatureFlagVariationNotFound | Ausnahme, die anzeigt, dass der angeforderte Variationsschlüssel (id) in der internen Konfiguration des SDK nicht gefunden wurde. Dies ist in der Regel normal und bedeutet, dass das der Variation entsprechende Experiment auf der Kameleoon-Seite noch nicht aktiviert wurde. |
KameleoonException.StorageRead | Speicherdaten konnten nicht gelesen werden. |
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden. |
In den meisten Fällen muss nur der grundlegende Fehler, KameleoonException, behandelt werden, wie im Beispiel gezeigt. Wenn jedoch verschiedene Arten von Fehlern eine Reaktion erfordern, behandeln Sie jeden separat basierend auf spezifischen Anforderungen. Darüber hinaus können für erhöhte Zuverlässigkeit allgemeine Sprachfehler durch Einschließen von Error behandelt werden.
evaluateAudiences()
- 📨 Sendet Tracking-Daten an Kameleoon
Diese Methode wertet Besucher gegen alle verfügbaren Audiences Explorer-Segmente aus und verfolgt diejenigen, die übereinstimmen.
evaluateAudiences() sollte aufgerufen werden, nachdem alle relevanten Besucherdaten festgelegt oder aktualisiert wurden, und kurz bevor eine Feature-Variation abgerufen oder ein Feature Flag überprüft wird. Dieser Ansatz stellt sicher, dass der Besucher gegen die aktuellsten verfügbaren Daten ausgewertet wird, was eine genaue Zielgruppenzuweisung basierend auf allen Kriterien ermöglicht.
Nach dem Aufrufen dieser Methode können Sie eine detaillierte Analyse der Segmentleistung im Audiences Explorer durchführen.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { evaluateAudiences } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
evaluateAudiences(visitorCode);
}, [initialize, visitorCode, evaluateAudiences, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { evaluateAudiences } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
evaluateAudiences(visitorCode);
}, [initialize, visitorCode, evaluateAudiences, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat. |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
In den meisten Fällen muss nur der grundlegende Fehler, KameleoonException, behandelt werden, wie im Beispiel gezeigt. Wenn jedoch verschiedene Arten von Fehlern eine Reaktion erfordern, behandeln Sie jeden separat basierend auf spezifischen Anforderungen. Darüber hinaus können für erhöhte Zuverlässigkeit allgemeine Sprachfehler durch Einschließen von Error behandelt werden.
getDataFile()
Um alle Feature Flags auszuwerten, verwenden Sie getVariations(). Diese Methode ist effizienter, als DataFile aufzurufen und mit getVariation() durch die Flags zu iterieren.
Gibt die aktuelle SDK-Konfiguration als DataFile-Objekt zurück.
import { useEffect, useCallback } from 'react';
import {
useFeatureFlag,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getDataFile } = useFeatureFlag();
useEffect(() => {
const dataFile = getDataFile();
}, [getDataFile]);
}
import { useEffect, useCallback } from 'react';
import {
useFeatureFlag,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getDataFile } = useFeatureFlag();
useEffect(() => {
const dataFile = getDataFile();
}, [getDataFile]);
}
Return value
| Typ | Beschreibung |
|---|
DataFile | Das DataFile, das die SDK-Konfiguration enthält |
Visitor data
Dieser Abschnitt bietet die Methoden, die Sie zur Verwaltung von Besucherdaten verwenden.
getVisitorCode()
Die Methode getVisitorCode, die aus dem Hook useVisitorCode gesammelt wird, erhält einen Visitor Code aus dem Browser-Cookie. Wenn der Visitor Code noch nicht existiert, generiert die Funktion einen zufälligen Visitor Code (oder verwendet den Wert defaultVisitorCode, falls Sie einen angegeben haben) und setzt den neuen Visitor Code in einem Cookie.
Die Methode getVisitorCode() ermöglicht es Ihnen, simulated-Variationen für einen Besucher festzulegen. Wenn Cookies (von einer request oder einem document) den Schlüssel kameleoonSimulationFFData enthalten, wird der Standard-Auswertungsprozess umgangen. Stattdessen gibt die Methode direkt eine Variation basierend auf den bereitgestellten Daten zurück.Sie können Simulationen auf zwei Arten anwenden:
- Automatisch (empfohlen): Wenn Sie Web Experimentation von Kameleoon oder das SDK im Hybrid-Modus verwenden, wird das Cookie automatisch erstellt, wenn Sie die Anzeige einer Variante mithilfe des Simulation Panel simulieren.
- Manuell: Setzen Sie das Cookie
kameleoonSimulationFFData manuell.
Es ist wichtig, simulated-Variationen von forced-Variationen zu unterscheiden:
- Simulated variations: wirken sich auf das gesamte feature flag-Ergebnis aus.
- Forced variations: sind spezifisch für ein einzelnes Experiment.
⚙️ Manuelle EinrichtungBitte stellen Sie sicher, dass das Cookie kameleoonSimulationFFData diesem Format folgt:
kameleoonSimulationFFData={"featureKey":{"expId":10,"varId":20}}: Simuliert die Variation mit varId des Experiments expId für den angegebenen featureKey.
kameleoonSimulationFFData={"featureKey":{"expId":0}}: Simuliert die Standardvariation (definiert im Abschnitt Then, for everyone else in Production, serve) für den angegebenen featureKey.
⚠️ Um eine ordnungsgemäße Funktionalität zu gewährleisten, muss der Cookie-Wert als URI-Komponente mit einer Methode wie encodeURIComponent codiert werden.
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Pass, save, and retrieve the default visitorCode.
const visitorCode = getVisitorCode('default_visitor_code');
}, [initialize, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Pass, save, and retrieve the default visitorCode.
const visitorCode = getVisitorCode('default_visitor_code');
}, [initialize, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| defaultVisitorCode (optional) | string | Visitor Code, der verwendet wird, falls in den Cookies kein Visitor Code vorhanden ist |
Wenn Sie keinen defaultVisitorCode angeben und kein Visitor Code in einem Cookie gespeichert ist, wird der Visitor Code zufällig generiert.
Return value
| Typ | Beschreibung |
|---|
string | Resultierender Visitor Code. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Die Visitor Code-Länge wurde überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
addData()
Die Funktion addData, die mit dem Hook useData verwendet wird, sammelt Targeting-Daten zur Speicherung, damit andere Hooks bestimmen können, ob der aktuelle Besucher angesprochen wird.
- Die Funktion
addData() gibt keinen Wert zurück und interagiert nicht selbstständig mit den Kameleoon-Backend-Servern. Stattdessen werden alle deklarierten Daten zur späteren Übertragung über die Methode flush gespeichert. Dieser Ansatz hilft, die Anzahl der Serveraufrufe zu reduzieren, da die Daten in der Regel zu einem einzigen Serveraufruf zusammengefasst werden, der durch die Ausführung von flush ausgelöst wird.
Die Methode trackConversion sendet auch alle zuvor zugeordneten Daten aus, genau wie flush. Dasselbe gilt für die Methoden getFeatureFlagVariationKey und getFeatureVariable, wenn eine Experimentierregel ausgelöst wird.
-
userAgent-Daten werden nicht wie andere Daten im Speicher gespeichert und mit jeder Tracking-Anfrage zur Bot-Filterung gesendet.
-
Überprüfen Sie die Liste der unterstützten Bedingungen, um zu erfahren, welche Datentypen für das Targeting verwendet werden können
Jeder Besucher kann für die meisten Datentypen nur eine Instanz zugeordneter Daten haben. CustomData ist jedoch eine Ausnahme. Besucher können eine Instanz zugeordneter CustomData pro customDataIndex haben.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
Browser,
BrowserType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create Kameleoon Data Types
const customData = new CustomData(0, 'my_data');
const browserData = new Browser(BrowserType.Chrome);
// -- Add a single data item (tracked by default)
addData('my_visitor_code', browserData);
// -- Add multiple data items (tracked by default)
addData('my_visitor_code', browserData, customData);
// -- Add multiple data items from array (tracked by default)
const dataArr = [browserData, customData];
addData('my_visitor_code', ...dataArr);
// -- Add multiple data items stored locally for targeting only (not sent to the Kameleoon Data API)
addData({visitorCode: 'my_visitor_code', track: false, data: dataArr});
}, [initialize, visitorCode, addData, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
Browser,
BrowserType,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create Kameleoon Data Types
const customData = new CustomData(0, 'my_data');
const browserData = new Browser(BrowserType.Chrome);
// -- Add a single data item (tracked by default)
addData('my_visitor_code', browserData);
// -- Add multiple data items (tracked by default)
addData('my_visitor_code', browserData, customData);
// -- Add multiple data items from array (tracked by default)
const dataArr = [browserData, customData];
addData('my_visitor_code', ...dataArr);
// -- Add multiple data items stored locally for targeting only (not sent to the Kameleoon Data API)
addData({visitorCode: 'my_visitor_code', track: false, data: dataArr});
}, [initialize, visitorCode, addData, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung | Standardwert |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen nicht überschreiten. | |
| track (optional) | boolean | Gibt an, ob die hinzugefügten Daten für das Tracking geeignet sind. Wenn auf false gesetzt, werden die Daten lokal gespeichert und nur zur Targeting-Auswertung verwendet; sie werden nicht an die Kameleoon Data API gesendet. | true |
| kameleoonData (optional) | KameleoonDataType[] | Anzahl von Instanzen eines beliebigen Typs von KameleoonData, kann ausschließlich in einem Array oder als sequenzielle Argumente hinzugefügt werden | |
-
kameleoonData ist ein variadisches Argument, es kann als ein oder mehrere Argumente übergeben werden (siehe Beispiel)
-
Der Index oder die ID der Custom Data finden Sie in Ihrem Kameleoon-Konto. Es ist wichtig zu beachten, dass dieser Index bei
0 beginnt, was bedeutet, dass den ersten Custom Data, die Sie für eine bestimmte Site erstellen, 0 als ID zugewiesen wird, nicht 1.
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden |
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
Siehe die Referenz Data types für weitere Details zur Verwaltung verschiedener Datentypen.
flush()
SDK Version 9
SDK Version 10
Die Methode flush, die mit useData gesammelt wird, nimmt die mit dem Besucher verknüpften Kameleoon-Daten und sendet die Daten-Tracking-Anfrage zusammen mit allen Daten, die zuvor mit addData hinzugefügt wurden.Wenn Sie keinen visitorCode angeben, flusht das SDK alle seine gespeicherten Daten an die entfernten Kameleoon-Server. Wenn zuvor fehlgeschlagene Tracking-Anfragen während des Offline-Modus lokal gespeichert wurden, versucht das SDK, die gespeicherten Anfragen vor der Ausführung der letzten Anfrage zu senden.Der Parameter isUniqueIdentifier kann in einigen Grenzszenarien nützlich sein, z. B. wenn Sie nicht auf den anonymen visitorCode zugreifen können, der dem Besucher ursprünglich zugewiesen wurde, aber Zugriff auf eine interne ID haben, die mit dem anonymen Besucher über Sitzungszusammenführungsfunktionen verbunden ist.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData, flush } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create instance of CustomData
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
// -- Flush added custom data for visitor
flush(visitorCode);
// -- Instantly flush added custom data for visitor (fire-and-forget)
flushInstant(visitorCode);
// -- Instantly flush added custom data for visitor and wait for completion
await flushInstant(visitorCode);
// -- Flush data for all the visitors
flush();
// -- Instantly flush data for all the visitors (fire-and-forget)
flushInstant();
// -- Instantly flush data for all the visitors and wait for complention
await flushInstant();
// -- Flush data with unique visitor identifier flag
const internalUserId = 'my_user_id';
flush(internalUserId, true);
}, [initialize, visitorCode, addData, flush, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData, flush } = useData();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create instance of CustomData
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
// -- Flush added custom data for visitor
flush(visitorCode);
// -- Flush data for all the visitors
flush();
// -- Flush data with unique visitor identifier flag
const internalUserId = 'my_user_id';
flush(internalUserId, true);
}, [initialize, visitorCode, addData, flush, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (optional) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten; falls nicht übergeben, werden alle Daten geflusht (an die entfernten Kameleoon-Server gesendet) | - |
| isUniqueIdentifier (optional) | boolean | ein optionaler Parameter, um anzugeben, ob der visitorCode eine eindeutige Kennung ist | false |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
flush() nimmt die mit dem Besucher verknüpften Kameleoon-Daten und plant das Senden der Daten mit der nächsten Tracking-Anfrage. Der Zeitpunkt der nächsten Tracking-Anfrage wird durch den Parameter trackingInterval der SDK-Konfiguration definiert. Besucherdaten können mit den Methoden addData und getRemoteVisitorData hinzugefügt werden.Wenn Sie keinen visitorCode angeben, flusht das SDK alle seine gespeicherten Daten an die entfernten Kameleoon-Server. Wenn zuvor fehlgeschlagene Tracking-Anfragen während des Offline-Modus lokal gespeichert wurden, versucht das SDK, die gespeicherten Anfragen vor der Ausführung der letzten Anfrage zu senden.Wenn Sie Tracking-Anfragen sofort senden müssen, verwenden Sie flushInstant() — die asynchrone Version von flush, die Promise<void> zurückgibt. Sie können await verwenden, wenn Sie Lieferungsgarantien benötigen (z. B. vor Seitennavigation/Entladung), oder es ohne await als Fire-and-Forget-Anfrage aufrufen:
await flushInstant(visitorCode) sendet Tracking-Anfragen sofort für einen bestimmten Besucher und wartet auf den Abschluss
await flushInstant() sendet Tracking-Anfragen sofort für alle Besucher und wartet auf den Abschluss
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData, flush } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create instance of CustomData
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
// -- Flush added custom data for visitor
flush(visitorCode);
// -- Instantly flush added custom data for visitor
flush({ visitorCode, instant: true });
// -- Flush data for all the visitors
flush();
// -- Instantly flush data for all the visitors
flush({ instant: true });
}, [initialize, visitorCode, addData, flush, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useData,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { addData, flush } = useData();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Create instance of CustomData
const customData = new CustomData(0, 'my_data');
addData(visitorCode, customData);
// -- Flush added custom data for visitor
flush(visitorCode);
// -- Instantly flush added custom data for visitor
flush({ visitorCode, instant: true });
// -- Flush data for all the visitors
flush();
// -- Instantly flush data for all the visitors
flush({ instant: true });
}, [initialize, visitorCode, addData, flush, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (optional) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen nicht überschreiten; falls nicht übergeben, werden alle Daten geflusht (an die entfernten Kameleoon-Server gesendet). | - |
Oder ein Objekt vom Typ FlushParamsType, das Folgendes enthält:| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (optional) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen nicht überschreiten; falls nicht übergeben, werden alle Daten geflusht (an die entfernten Kameleoon-Server gesendet). | - |
| instant (optional) | boolean | Boolesche Markierung, die angibt, ob die Daten sofort gesendet werden sollen (true) oder gemäß dem geplanten Tracking-Intervall (false). | - |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
getRemoteData()
Die asynchrone Methode getRemoteData, die mit dem Hook useData gesammelt wird, gibt Daten zurück, die für einen angegebenen Site Code auf einem entfernten Kameleoon-Server gespeichert sind.
Sie können diese Funktion beispielsweise verwenden, um Benutzereinstellungen, historische Daten oder andere Daten abzurufen, die für die Logik Ihrer Anwendung relevant sind. Durch das Speichern dieser Daten auf unseren hoch skalierbaren Servern mit unserer [Data API] können Sie große Datenmengen effizient verwalten und für jeden Ihrer Besucher oder Benutzer abrufen.
import { useEffect, useCallback } from 'react';
import { useData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getRemoteData } = useData();
const getData = useCallback(async (): Promise<void> => {
// -- Get remote data
const jsonData = await getRemoteData('my_data_key');
const data = JSON.parse(jsonData);
}, [getRemoteData]);
useEffect(() => {
getData();
}, [getData]);
}
import { useEffect, useCallback } from 'react';
import { useData } from '@kameleoon/react-sdk';
function MyComponent() {
const { getRemoteData } = useData();
const getData = useCallback(async () => {
// -- Get remote data
const jsonData = await getRemoteData('my_data_key');
const data = JSON.parse(jsonData);
}, [getRemoteData]);
useEffect(() => {
getData();
}, [getData]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| key (required) | string | eindeutiger Schlüssel, mit dem die abzurufenden Daten verknüpft sind |
Return value
| Typ | Beschreibung |
|---|
JSONType | Promise mit für einen bestimmten Schlüssel abgerufenen Daten. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.RemoteData | Daten konnten nicht vom Kameleoon-Server abgerufen werden |
getRemoteVisitorData()
SDK Version 9
SDK Version 10
getRemoteVisitorData() ist eine asynchrone Methode zum Abrufen von Kameleoon Visits Data für den visitorCode aus der Kameleoon Data API. Die Methode fügt die Daten dem Speicher hinzu, damit andere Methoden sie bei Targeting-Entscheidungen verwenden können.Mit dieser Methode erhaltene Daten spielen eine wichtige Rolle, wenn Sie Folgendes möchten:
- Daten verwenden, die von anderen Geräten gesammelt wurden.
- auf den Verlauf eines Benutzers zugreifen, z. B. zuvor besuchte Seiten bei vergangenen Besuchen.
- Daten verwenden, die nur clientseitig zugänglich sind, wie Datalayer-Variablen und Goals, die nur am Frontend konvertieren.
Lesen Sie diesen Artikel für ein besseres Verständnis möglicher Anwendungsfälle.Standardmäßig ruft getRemoteVisitorData() automatisch die zuletzt gespeicherten Custom Data mit scope=Visitor ab und hängt sie an den Besucher an, ohne dass die Methode addData() aufgerufen werden muss. Dies ist besonders nützlich für die Synchronisierung von Custom Data zwischen mehreren Geräten. Der Parameter isUniqueIdentifier kann in Grenzszenarien nützlich sein, z. B. wenn Sie nicht auf den anonymen visitorCode zugreifen können, der dem Besucher ursprünglich zugewiesen wurde, aber Zugriff auf eine interne ID haben, die mit dem anonymen Besucher über Sitzungszusammenführungsfunktionen verbunden ist.
import { useEffect, useCallback } from 'react';
import {
useData,
KameleoonDataType,
VisitorDataFiltersType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getRemoteVisitorData } = useData();
const getData = useCallback(async (): Promise<void> => {
// -- Get remote visitor data and add it to storage.
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
});
// -- Get remote visitor data without adding it to storage.
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
});
// -- Get remote visitor data without adding it to storage,
// and customizing filters for retrieving visits data.
const filters: VisitorDataFiltersType = {
currentVisit: true,
previousVisitAmount: 10,
customData: true,
geolocation: true,
conversions: true,
};
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
filters,
});
}, [getRemoteVisitorData]);
useEffect(() => {
getData();
}, [getData]);
}
import { useEffect, useCallback } from 'react';
import { useData } from '@kameleoon/react-sdk';
function MyComponent() {
const { getRemoteVisitorData } = useData();
const getData = useCallback(async () => {
// -- Get remote visitor data and add it to storage.
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
});
// -- Get remote visitor data without adding it to storage.
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
});
// -- Get remote visitor data without adding it to storage,
// and customizing filters for retrieving visits data.
const filters = {
currentVisit: true,
previousVisitAmount: 10,
customData: true,
geolocation: true,
conversions: true,
};
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
filters,
});
}, [getRemoteVisitorData]);
useEffect(() => {
getData();
}, [getData]);
}
Arguments
Ein Objekt vom Typ RemoteVisitorDataParamsType, das Folgendes enthält:| Name | Typ | Beschreibung | Standardwert |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten | - |
| shouldAddData (optional) | boolean | boolesche Markierung, die angibt, ob die abgerufenen Custom Data wie bei der Methode addData im Speicher abgelegt werden sollen | true |
| filters (optional) | VisitorDataFiltersType | Filter, um anzugeben, welche Daten aus Besuchen abgerufen werden sollen; standardmäßig werden nur customData aus dem aktuellen und dem letzten vorherigen Besuch abgerufen | { previousVisitAmount: 1, currentVisit: true customData: true }, andere Filterparameter sind auf false gesetzt |
| isUniqueIdentifier (optional) | boolean | optionaler Parameter, der bei true angibt, dass der visitorCode eine eindeutige Kennung ist | false |
Return value
| Typ | Beschreibung |
|---|
KameleoonDataType[] | Promise mit Liste der abgerufenen Kameleoon Data |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.RemoteData | Daten konnten nicht vom Kameleoon-Server abgerufen werden |
KameleoonException.VisitAmount | Die Besuchsanzahl muss eine Zahl zwischen 1 und 25 sein |
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor initialize für den kameleoonClient abgeschlossen wurde |
Using parameters in getRemoteVisitorData()
Die Methode getRemoteVisitorData() bietet Flexibilität, indem sie es Ihnen ermöglicht, verschiedene Parameter beim Abrufen von Daten zu Besuchern zu definieren. Egal, ob Sie nach Zielen, Experimenten oder Variationen targeten, der gleiche Ansatz gilt für alle Datentypen.Angenommen, Sie möchten beispielsweise Daten zu Besuchern abrufen, die ein Ziel “Order transaction” abgeschlossen haben. Sie können Parameter innerhalb der Methode getRemoteVisitorData() angeben, um Ihr Targeting zu verfeinern. Wenn Sie beispielsweise nur Benutzer ansprechen möchten, die in ihren letzten fünf Besuchen das Ziel konvertiert haben, können Sie den Parameter previousVisitAmount auf 5 und conversions auf true setzen.Die in diesem Beispiel gezeigte Flexibilität ist nicht auf Zieldaten beschränkt. Sie können Parameter innerhalb der Methode getRemoteVisitorData() verwenden, um Daten zu einer Vielzahl von Besucherverhalten abzurufen.Hier ist die Liste der verfügbaren VisitorDataFiltersType-Filter:| Name | Typ | Beschreibung | Standard |
|---|
| previousVisitAmount (optional) | number | Anzahl der vorherigen Besuche, aus denen Daten abgerufen werden sollen. Zahl zwischen 1 und 25 | 1 |
| currentVisit (optional) | boolean | Wenn true, werden aktuelle Besuchsdaten abgerufen | true |
| customData (optional) | boolean | Wenn true, werden Custom Data abgerufen. | true |
| pageViews (optional) | boolean | Wenn true, werden Seitendaten abgerufen. | false |
| geolocation (optional) | boolean | Wenn true, werden Geolocation-Daten abgerufen. | false |
| device (optional) | boolean | Wenn true, werden Gerätedaten abgerufen. | false |
| browser (optional) | boolean | Wenn true, werden Browser-Daten abgerufen. | false |
| operatingSystem (optional) | boolean | Wenn true, werden Betriebssystemdaten abgerufen. | false |
| conversions (optional) | boolean | Wenn true, werden Konversionsdaten abgerufen. | false |
| experiments (optional) | boolean | Wenn true, werden Experimentdaten abgerufen. | false |
| kcs (optional) | boolean | Wenn true, wird Kameleoon Conversion Score (KCS) abgerufen. Erfordert das AI Predictive Targeting-Add-on | false |
getRemoteVisitorData() ist eine asynchrone Methode zum Abrufen von Kameleoon Visits Data für den visitorCode aus der Kameleoon Data API. Die Methode fügt die Daten dem Speicher hinzu, damit andere Methoden sie bei Targeting-Entscheidungen verwenden können.Mit dieser Methode erhaltene Daten spielen eine wichtige Rolle, wenn Sie Folgendes möchten:
- Daten verwenden, die von anderen Geräten gesammelt wurden.
- auf den Verlauf eines Benutzers zugreifen, z. B. zuvor besuchte Seiten bei vergangenen Besuchen.
- Daten verwenden, die nur clientseitig zugänglich sind, wie Datalayer-Variablen und Goals, die nur am Frontend konvertieren.
Lesen Sie diesen Artikel für ein besseres Verständnis möglicher Anwendungsfälle.Standardmäßig ruft getRemoteVisitorData() automatisch die zuletzt gespeicherten Custom Data mit scope=Visitor ab und hängt sie an den Besucher an, ohne dass die Methode addData() aufgerufen werden muss. Dies ist besonders nützlich für die Synchronisierung von Custom Data zwischen mehreren Geräten. import { useEffect, useCallback } from 'react';
import {
useData,
KameleoonDataType,
VisitorDataFiltersType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getRemoteVisitorData } = useData();
const getData = useCallback(async (): Promise<void> => {
// -- Get remote visitor data and add it to storage.
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
});
// -- Get remote visitor data without adding it to storage.
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
});
// -- Get remote visitor data without adding it to storage,
// and customizing filters for retrieving visits data.
const filters: VisitorDataFiltersType = {
currentVisit: true,
previousVisitAmount: 10,
customData: true,
geolocation: true,
conversions: true,
};
const kameleoonDataList: KameleoonDataType[] = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
filters,
});
}, [getRemoteVisitorData]);
useEffect(() => {
getData();
}, [getData]);
}
import { useEffect, useCallback } from 'react';
import { useData } from '@kameleoon/react-sdk';
function MyComponent() {
const { getRemoteVisitorData } = useData();
const getData = useCallback(async () => {
// -- Get remote visitor data and add it to storage.
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
});
// -- Get remote visitor data without adding it to storage.
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
});
// -- Get remote visitor data without adding it to storage,
// and customizing filters for retrieving visits data
const filters = {
currentVisit: true,
previousVisitAmount: 10,
customData: true,
geolocation: true,
conversions: true,
};
const kameleoonDataList = await getRemoteVisitorData({
visitorCode: 'my_visitor_code',
shouldAddData: false,
filters,
});
}, [getRemoteVisitorData]);
useEffect(() => {
getData();
}, [getData]);
}
Arguments
Ein Objekt vom Typ RemoteVisitorDataParamsType, das Folgendes enthält:| Name | Typ | Beschreibung | Standardwert |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten | - |
| shouldAddData (optional) | boolean | boolesche Markierung, die angibt, ob die abgerufenen Custom Data wie bei der Methode addData im Speicher abgelegt werden sollen | true |
| filters (optional) | VisitorDataFiltersType | Filter, um anzugeben, welche Daten aus Besuchen abgerufen werden sollen; standardmäßig werden nur customData aus dem aktuellen und dem letzten vorherigen Besuch abgerufen | { previousVisitAmount: 1, currentVisit: true customData: true }, andere Filterparameter sind auf false gesetzt |
Return value
| Typ | Beschreibung |
|---|
KameleoonDataType[] | Promise mit Liste der abgerufenen Kameleoon Data |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.RemoteData | Daten konnten nicht vom Kameleoon-Server abgerufen werden |
KameleoonException.VisitAmount | Die Besuchsanzahl muss eine Zahl zwischen 1 und 25 sein |
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor initialize für den kameleoonClient abgeschlossen wurde |
Using parameters in getRemoteVisitorData()
Die Methode getRemoteVisitorData() bietet Flexibilität, indem sie es Ihnen ermöglicht, verschiedene Parameter beim Abrufen von Daten zu Besuchern zu definieren. Egal, ob Sie nach Zielen, Experimenten oder Variationen targeten, der gleiche Ansatz gilt für alle Datentypen.Angenommen, Sie möchten beispielsweise Daten zu Besuchern abrufen, die ein Ziel “Order transaction” abgeschlossen haben. Sie können Parameter innerhalb der Methode getRemoteVisitorData() angeben, um Ihr Targeting zu verfeinern. Wenn Sie beispielsweise nur Benutzer ansprechen möchten, die in ihren letzten fünf Besuchen das Ziel konvertiert haben, können Sie den Parameter previousVisitAmount auf 5 und conversions auf true setzen.Die in diesem Beispiel gezeigte Flexibilität ist nicht auf Zieldaten beschränkt. Sie können Parameter innerhalb der Methode getRemoteVisitorData() verwenden, um Daten zu einer Vielzahl von Besucherverhalten abzurufen.Hier ist die Liste der verfügbaren VisitorDataFiltersType-Filter:| Name | Typ | Beschreibung | Standard |
|---|
| previousVisitAmount (optional) | number | Anzahl der vorherigen Besuche, aus denen Daten abgerufen werden sollen. Zahl zwischen 1 und 25 | 1 |
| currentVisit (optional) | boolean | Wenn true, werden aktuelle Besuchsdaten abgerufen | true |
| customData (optional) | boolean | Wenn true, werden Custom Data abgerufen. | true |
| pageViews (optional) | boolean | Wenn true, werden Seitendaten abgerufen. | false |
| geolocation (optional) | boolean | Wenn true, werden Geolocation-Daten abgerufen. | false |
| device (optional) | boolean | Wenn true, werden Gerätedaten abgerufen. | false |
| browser (optional) | boolean | Wenn true, werden Browser-Daten abgerufen. | false |
| operatingSystem (optional) | boolean | Wenn true, werden Betriebssystemdaten abgerufen. | false |
| conversions (optional) | boolean | Wenn true, werden Konversionsdaten abgerufen. | false |
| experiments (optional) | boolean | Wenn true, werden Experimentdaten abgerufen. | false |
| kcs (optional) | boolean | Wenn true, wird Kameleoon Conversion Score (KCS) abgerufen. Erfordert das AI Predictive Targeting-Add-on | false |
| visitorCode (optional) | boolean | Wenn true, ruft Kameleoon den visitorCode aus dem letzten Besuch ab und verwendet ihn für den aktuellen Besuch. Dies ist erforderlich, wenn Sie sicherstellen möchten, dass der durch seinen visitorCode identifizierte Besucher über Besuche hinweg für geräteübergreifende Experimentation immer dieselbe Variation erhält. | true |
| personalization (optional) | boolean | Wenn true, werden Personalisierungsdaten abgerufen. Dies ist für die Personalisierungsbedingung erforderlich | false |
| cbs (optional) | boolean | Wenn true, werden Contextual Bandit-Score-Daten abgerufen. | false |
getVisitorWarehouseData()
Die asynchrone Methode getVisitorWarehouseAudience, die mit dem Hook useData gesammelt wird, ruft alle dem Besucher in Ihrem Data Warehouse zugeordneten Zielgruppendaten unter Verwendung des angegebenen visitorCode und warehouseKey ab. Der warehouseKey ist in der Regel Ihre interne Benutzer-ID. Der Parameter customDataIndex entspricht den Kameleoon-Custom Data, die Kameleoon zum Targeting Ihrer Besucher verwendet. Weitere Details finden Sie in der Warehouse-Targeting-Dokumentation.
import { useEffect, useCallback } from 'react';
import { useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { getVisitorWarehouseAudience } = useData();
const getData = useCallback(async (): Promise<void> => {
// -- Get visitor warehouse audience data using `warehouseKey`
// and add it to storage.
const customData: CustomData = await getVisitorWarehouseAudience({
visitorCode: 'my_visitor',
customDataIndex: 10,
warehouseKey: 'my_key',
});
// -- Get visitor warehouse audience data using `visitorCode`
// and add it to storage.
const customData: CustomData = await getVisitorWarehouseAudience({
visitorCode: 'my_visitor',
customDataIndex: 10,
});
}, [getRemoteData]);
useEffect(() => {
getData();
}, [getData]);
}
import { useEffect, useCallback } from 'react';
import { useData } from '@kameleoon/react-sdk';
function MyComponent() {
const { getVisitorWarehouseAudience } = useData();
const getData = useCallback(async () => {
// -- Get visitor warehouse audience data using `warehouseKey`
// and add it to storage.
const customData = await getVisitorWarehouseAudience({
visitorCode: 'my_visitor',
customDataIndex: 10,
warehouseKey: 'my_key',
});
// -- Get visitor warehouse audience data using `visitorCode`
// and add it to storage.
const customData = await getVisitorWarehouseAudience({
visitorCode: 'my_visitor',
customDataIndex: 10,
});
}, [getRemoteData]);
useEffect(() => {
getData();
}, [getData]);
}
Arguments
Parameterobjekt bestehend aus:
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| customDataIndex (required) | number | Zahl, die den Index der Custom Data darstellt, die Sie zum Targeting Ihrer Warehouse Audiences verwenden möchten |
| warehouseKey (optional) | string | eindeutiger Schlüssel zur Identifizierung der Warehouse-Daten (in der Regel Ihre interne Benutzer-ID) |
Return value
| Typ | Beschreibung |
|---|
Promise<CustomData | null> | Promise, das CustomData mit den zugehörigen Warehouse-Daten oder null enthält, wenn keine Daten vorhanden waren |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.RemoteData | Daten konnten nicht vom Kameleoon-Server abgerufen werden |
setLegalConsent()
Die Methode setLegalConsent, die mit dem Hook useVisitorCode gesammelt wird, gibt an, ob der Besucher seine rechtliche Zustimmung zur Verwendung personenbezogener Daten gegeben hat. Das Setzen des Parameters legalConsent auf false begrenzt die Datentypen, die Sie in Tracking-Anfragen einbeziehen können. Dies hilft Ihnen, rechtliche und regulatorische Anforderungen einzuhalten und gleichzeitig Besucherdaten verantwortungsvoll zu verwalten. Weitere Informationen zu personenbezogenen Daten finden Sie in der Consent-Management-Richtlinie.
- Die Zustimmungsinformationen sind zwischen der Kameleoon-Engine (Anwendungsdatei engine.js) und dem React SDK synchronisiert. Diese Synchronisierung bedeutet, dass, sobald die Zustimmung entweder auf der Engine oder im SDK festgelegt wird, sie automatisch für beide festgelegt wird. Diese Funktion eliminiert die Notwendigkeit einer manuellen Zustimmungsbehandlung und stellt sicher, dass SDKs in Übereinstimmung mit den Benutzerpräferenzen arbeiten.
Wenn Sie Kameleoon im Hybrid-Modus verwenden, empfehlen wir, den Abschnitt zur Zustimmung in unserem Artikel zur Hybrid-Experimentation zu lesen
- Bei der Handhabung der rechtlichen Zustimmung ist es wichtig, die Methode
getVisitorCode zu verwenden. Zusätzlich akzeptiert getVisitorCode domain nicht als Argument. Übergeben Sie es stattdessen an die Funktion createClient.
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode, setLegalConsent } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
setLegalConsent(visitorCode, true);
}, [initialize, getVisitorCode, setLegalConsent]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode, setLegalConsent } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
setLegalConsent(visitorCode, true);
}, [initialize, getVisitorCode, setLegalConsent]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| consent (required) | boolean | ein boolescher Wert, der den Status der rechtlichen Zustimmung darstellt. true zeigt an, dass der Besucher seine rechtliche Zustimmung gegeben hat, false zeigt an, dass der Besucher nie eine rechtliche Zustimmung gegeben oder widerrufen hat |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Die Visitor Code-Länge hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
Consent revocation behavior
Wenn Sie setLegalConsent() mit consent=false aufrufen, löscht das SDK das kameleoonVisitorCode-Cookie nicht. Stattdessen hört es auf, das Ablaufdatum des Cookies zu verlängern, sodass das Cookie bestehen bleibt, bis es natürlich abläuft.
Wenn Ihre Compliance-Anforderungen die sofortige Entfernung der Cookie-Datei nach dem Opt-out verlangen, müssen Sie sie manuell mit den nativen Cookie-Verwaltungsmethoden Ihres Frameworks löschen. Das SDK entfernt die Datei nicht automatisch.
Goals and third-party analytics
Dieser Abschnitt bietet die Methoden, die Sie verwenden, um zu verfolgen, wann eine Besucheraktion eines Ihrer Ziele erreicht (eine Konversion).
trackConversion()
SDK Version 9
SDK Version 10
- _📨 Sendet Tracking-Daten an Kameleoon
Die Funktion trackConversion(), die mit dem Hook useData verwendet wird, erstellt und fügt dem Besucher Conversion-Daten mit den angegebenen Parametern hinzu und führt flush() aus.Verwenden Sie diese Methode, um eine Konversion für ein bestimmtes Ziel und einen Benutzer zu verfolgen. Diese Methode erfordert visitorCode und goalId. Darüber hinaus akzeptiert diese Methode auch ein optionales revenue-Argument. Der visitorCode ist in der Regel identisch mit dem, der beim Auslösen des Experiments verwendet wurde.Die Methode trackConversion() gibt keinen Wert zurück. Diese Methode ist nicht blockierend, da der Serveraufruf asynchron erfolgt.Wenn Sie einen visitorCode angeben und isUniqueIdentifier auf true setzen, verwendet die Methode trackConversion() ihn als eindeutige Besucherkennung, was für geräteübergreifende Experimentation nützlich ist, da das SDK die geflushten Daten mit dem Besucher verknüpft, der mit der angegebenen Kennung verbunden ist.Der Parameter isUniqueIdentifier kann auch in anderen Grenzszenarien nützlich sein, z. B. wenn Sie nicht auf den anonymen visitorCode zugreifen können, der dem Besucher ursprünglich zugewiesen wurde, aber Zugriff auf eine interne ID haben, die mit dem anonymen Besucher über Sitzungszusammenführungsfunktionen verbunden ist.
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode, useData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { trackConversion } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Track conversion
trackConversion({ visitorCode, revenue: 2000, goalId: 123 });
// -- Track conversion with unique visitor identifier flag
const internalUserId = 'my_user_id';
trackConversion({
visitorCode: internalUserId,
revenue: 20000,
goalId: 123,
isUniqueIdentifier: true,
});
}, [initialize, trackConversion, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode, useData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { trackConversion } = useData();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Track conversion
trackConversion({ visitorCode, revenue: 2000, goalId: 123 });
// -- Track conversion with unique visitor identifier flag
const internalUserId = 'my_user_id';
trackConversion({
visitorCode: internalUserId,
revenue: 20000,
goalId: 123,
isUniqueIdentifier: true,
});
}, [initialize, trackConversion, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Parameterobjekt bestehend aus:| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. | |
| goalId (required) | number | ID des Ziels. | |
| revenue (optional) | number | Umsatz der Konversion. | 0 |
| isUniqueIdentifier (optional) | boolean | Ein optionaler Parameter, um anzugeben, ob der visitorCode eine eindeutige Kennung ist. | false |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden. |
- 📨 Sendet Tracking-Daten an Kameleoon
Die Funktion trackConversion(), die mit dem Hook useData verwendet wird, erstellt und fügt dem Besucher Conversion-Daten mit den angegebenen Parametern hinzu und führt flush() aus.Verwenden Sie diese Methode, um eine Konversion für ein bestimmtes Ziel und einen Benutzer zu verfolgen. Diese Methode erfordert visitorCode und goalId. Darüber hinaus akzeptiert diese Methode auch optionale Argumente revenue, negative und metadata. Der visitorCode ist in der Regel identisch mit dem, der beim Auslösen des Experiments verwendet wurde.Die Methode trackConversion() gibt keinen Wert zurück. Diese Methode ist nicht blockierend, da der Serveraufruf asynchron erfolgt.import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { trackConversion } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Track conversion
trackConversion({
visitorCode,
revenue: 2000,
goalId: 123,
metadata: [new CustomData(0, 'value')],
negative: true,
});
}, [initialize, trackConversion, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useVisitorCode, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { trackConversion } = useData();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Track conversion
trackConversion({
visitorCode,
revenue: 2000,
goalId: 123,
metadata: [new CustomData(0, 'value')],
negative: true,
});
}, [initialize, trackConversion, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Parameterobjekt bestehend aus:| Name | Typ | Beschreibung | Standard |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. | |
| goalId (required) | number | ID des Ziels. | |
| negative (optional) | boolean | Definiert, ob der Umsatz positiv oder negativ ist. | false |
| revenue (optional) | number | Umsatz der Konversion. | 0 |
| metadata (optional) | CustomData[] | Metadaten der Konversion. Müssen vorab in der Kameleoon-App definiert werden. | undefined |
Metadatenwerte sind über Rohdatenexporte und die Ergebnisseite zugänglich.Wenn der Parameter metadata angegeben wird, verwendet Kameleoon diese angegebenen Werte für die aktuelle Konversion anstelle dessen, was zuvor mit der Methode addData() gesammelt wurde. Wenn der Parameter weggelassen wird, verwendet Kameleoon die zuletzt verfolgten Werte für diese CustomData vor der Konversion und innerhalb desselben Besuchs.Kameleoon berücksichtigt nur die Metadatenwerte, die explizit als Parameter an die Methode trackConversion() übergeben werden.Im folgenden Beispiel verknüpft Kameleoon die Konversion nur mit dem explizit als Parameter angegebenen Custom Data-Wert (hier: Index 5 mit dem Wert ‘Amex Credit Card’).addData(visitorCode, new CustomData(5, 'Credit Card'), new CustomData(9, 'Express Delivery'));
trackConversion({
visitorCode,
goalId: 1000,
metadata: [new CustomData(5, 'Amex Credit Card')]
});
addData(visitorCode, new CustomData(5, 'Credit Card'), new CustomData(9, 'Express Delivery'));
trackConversion({
visitorCode,
goalId: 1000,
metadata: [new CustomData(5, 'Amex Credit Card')]
});
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten. |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer. |
KameleoonException.StorageWrite | Speicherdaten konnten nicht aktualisiert werden. |
getEngineTrackingCode()
Kameleoon integriert sich mit mehreren Analyselösungen, darunter Mixpanel, Google Analytics 4 und Segment. Um serverseitige Experimente korrekt zu verfolgen, rufen Sie die Methode getEngineTrackingCode() auf, nachdem der Besucher ein Experiment ausgelöst hat. Das SDK gibt JavaScript-Warteschlangenbefehle für die Experimente zurück, die der Besucher in den letzten fünf Sekunden ausgelöst hat. Wenn Sie diesen Code in die Seite einfügen, verarbeitet Engine.js die Befehle und sendet die Expositionsereignisse über die aktive Analyseintegration.
Weitere Informationen zur Implementierung dieser Methode finden Sie unter Hybrid-Experimentation.
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getEngineTrackingCode, getVariation } =
useFeatureFlag();
const [engineCode, setEngineCode] = useState<string>('');
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Trigger feature experiment
// -- E.g., result `variationKey` id is `200` and implicit experiment id is `100`
getVariation({ visitorCode: 'visitor_code', featureKey: 'my_feature_key' });
// -- Get tracking code and set it to state
setEngineCode(getEngineTrackingCode('visitor_code'));
// -- Result engine code will look like this
// `
// window.kameleoonQueue = window.kameleoonQueue || [];
// window.kameleoonQueue.push(['Experiments.assignVariation', 100, 200, true]);
// window.kameleoonQueue.push(['Experiments.trigger', 100, true]);
// `
}, [initialize, getVariation, getEngineTrackingCode]);
useEffect(() => {
init();
}, [init]);
useEffect(() => {
if (!engineCode) {
return;
}
// -- Insert tracking code into the page
const script = document.createElement('script');
script.textContent = engineCode;
document.body.appendChild(script);
// -- Remove script from the page
return () => {
document.body.removeChild(script);
};
}, [engineCode]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getEngineTrackingCode, getVariation } =
useFeatureFlag();
const [engineCode, setEngineCode] = useState('');
const init = useCallback(async () => {
await initialize();
// -- Trigger feature experiment
// -- E.g., result `variationKey` id is `200` and implicit experiment id is `100`
getVariation({ visitorCode: 'visitor_code', featureKey: 'my_feature_key' });
// -- Get tracking code and set it to state
setEngineCode(getEngineTrackingCode('visitor_code'));
// -- Result engine code will look like this
// `
// window.kameleoonQueue = window.kameleoonQueue || [];
// window.kameleoonQueue.push(['Experiments.assignVariation', 100, 200, true]);
// window.kameleoonQueue.push(['Experiments.trigger', 100, true]);
// `
}, [initialize, getVariation, getEngineTrackingCode]);
useEffect(() => {
init();
}, [init]);
useEffect(() => {
if (!engineCode) {
return;
}
// -- Insert tracking code into the page
const script = document.createElement('script');
script.textContent = engineCode;
document.body.appendChild(script);
// -- Remove script from the page
return () => {
document.body.removeChild(script);
};
}, [engineCode]);
}
-
Um diese Funktion zu nutzen, implementieren Sie sowohl das React SDK als auch Kameleoon Engine.js. Da Engine.js in diesem Ablauf nur für das Tracking verwendet wird, können Sie den asynchronen Tag vor dem schließenden
</body>-Tag installieren.
-
Sie können den zurückgegebenen Tracking-Code direkt in ein HTML-
<script>-Tag einfügen.
<html lang="en">
<body>
<script>
const engineTrackingCode = `
window.kameleoonQueue = window.kameleoonQueue || [];
window.kameleoonQueue.push(['Experiments.assignVariation', 123456, 7890, true]);
window.kameleoonQueue.push(['Experiments.trigger', 123456, true]);
window.kameleoonQueue.push(['Experiments.assignVariation', 234567, 8901, true]);
window.kameleoonQueue.push(['Experiments.trigger', 234567, true]);
`;
const script = document.createElement('script');
script.textContent = engineTrackingCode;
document.body.appendChild(script);
</script>
</body>
</html>
In diesem Beispiel sind 123456 und 234567 Experiment-IDs, und 7890 und 8901 sind Variationen-IDs. In Ihrer Implementierung generiert das SDK diese Werte im zurückgegebenen Tracking-Code.
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | Eindeutige Kennung des Besuchers. |
Return value
| Typ | Beschreibung |
|---|
string | JavaScript-Code zum Einfügen in die Seite. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
Events
Dieser Abschnitt bietet die Methoden, die Sie zur Behandlung von Events verwenden.
onEvent()
Die Methode onEvent, die mit dem Hook useInitialize gesammelt wird, löst einen Callback aus, wenn ein bestimmtes Event ausgelöst wird. Die Callback-Funktion hat Zugriff auf die mit dem Event verknüpften Daten. Die SDK-Methoden in dieser Dokumentation geben an, welche Event-Typen sie auslösen können, falls vorhanden.import { useEffect, useCallback } from 'react';
import {
useInitialize,
EventType,
EvaluationEventDataType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize, onEvent } = useInitialize();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Define logic to execute on SDK event
onEvent(EventType.Evaluation, (eventData: EventDataType) => {
// -- My Logic
});
}, [initialize, onEvent]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, EventType } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize, onEvent } = useInitialize();
const init = useCallback(async () => {
await initialize();
// -- Define logic to execute on SDK event
.onEvent(EventType.Evaluation, (eventData) => {
// -- My Logic
});
}, [initialize, onEvent]);
useEffect(() => {
init();
}, [init]);
}
Sie können jedem EventType nur einen Callback zuweisen.
Events
Events werden in der EventType-Enum definiert. Je nach Event-Typ hat der Parameter eventData einen unterschiedlichen Typ.| Typ | Typ von eventData | Beschreibung |
|---|
EventType.Evaluation | EvaluationEventDataType | Wird ausgelöst, wenn das SDK eine Variation für ein Feature Flag auswertet. Es wird unabhängig vom Ergebnis der Variation ausgelöst |
EventType.ConfigurationUpdate | ConfigurationUpdateEventDataType | Wird ausgelöst, wenn das SDK ein Konfigurations-Update vom Server empfängt (bei Verwendung von Echtzeit-Streaming) |
Arguments
| Name | Typ | Beschreibung |
|---|
| event (required) | EventType | ein Event-Typ, dem die Callback-Aktion zugeordnet werden soll |
| callback (required) | (eventData: EventDataType<EventType>) => void | eine Callback-Funktion mit dem Parameter eventData, die bei einem Konfigurations-Update aufgerufen wird |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
Sending exposure events to external tools
Kameleoon bietet integrierte Integrationen mit verschiedenen Analyse- und CDP-Lösungen, wie Mixpanel, Google Analytics 4, Segment…. Um sicherzustellen, dass Sie Ihre serverseitigen Experimente verfolgen und analysieren können, bietet Kameleoon eine Methode getEngineTrackingCode(), die den JavaScript-Code zurückgibt, der in Ihre Seite eingefügt werden soll, um die Expositionsereignisse automatisch an die von Ihnen verwendete Analyselösung zu senden. Das SDK erstellt einen Tracking-Code für Ihre aktive Analyselösung basierend auf den Experimenten, die der Besucher in den letzten 5 Sekunden ausgelöst hat.
Weitere Informationen zur Hybrid-Experimentation finden Sie in dieser Dokumentation.Um von dieser Funktion zu profitieren, müssen Sie sowohl das React SDK als auch unseren Kameleoon-JavaScript-Tag implementieren. Wir empfehlen Ihnen, den [asynchronen Kameleoon-Tag] zu implementieren, den Sie vor Ihrem schließenden <body>-Tag in Ihrer HTML-Seite installieren können, da er nur zu Tracking-Zwecken verwendet wird.
Data types
Kameleoon-Datentypen sind Hilfsklassen, die zum Speichern von Daten im Speicher in vordefinierten Formen verwendet werden.
Während der Ausführung von flush sammelt das SDK alle Daten und sendet sie zusammen mit der Tracking-Anfrage.
Im SDK verfügbare Daten sind erst dann für das Targeting und Reporting in der Kameleoon-App verfügbar, wenn Sie die Daten hinzufügen. Beispielsweise durch Verwendung der Methode addData().
Weitere Informationen finden Sie unter use visit history to target users.
Wenn Sie den Hybrid-Modus verwenden, können Sie getRemoteVisitorData() aufrufen, um automatisch alle Daten zu füllen, die Kameleoon zuvor gesammelt hat.
Browser
Seit React SDK 10.11.0 wird Browser automatisch basierend auf der User-Agent-Zeichenfolge erkannt. Sie können ihn jedoch bei Bedarf manuell überschreiben.
Browser enthält Browser-Informationen.
Jeder Besucher kann nur einen Browser haben. Das Hinzufügen eines zweiten Browser überschreibt den ersten.
| Name | Typ | Beschreibung |
|---|
| browser (required) | BrowserType | vordefinierter Browser-Typ (Chrome, InternetExplorer, Firefox, Safari, Opera, Other) |
| version (optional) | number | Version des Browsers, Gleitkommazahl repräsentiert Haupt- und Nebenversion des Browsers |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
Browser,
BrowserType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new browser data to client
const browser = new Browser(BrowserType.Chrome, 86.1);
addData('my_visitor_code', browser);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
Browser,
BrowserType,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new browser data to client
const browser = new Browser(BrowserType.Chrome, 86.1);
addData('my_visitor_code', browser);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
UniqueIdentifier
Die Daten UniqueIdentifier werden als Markierung für die eindeutige Besucheridentifikation verwendet.
Wenn Sie UniqueIdentifier für einen Besucher hinzufügen, wird visitorCode als eindeutige Besucherkennung verwendet, was für geräteübergreifende Experimentation nützlich ist. Die Zuordnung eines UniqueIdentifier zu einem Besucher informiert das SDK darüber, dass der Besucher mit einem anderen Besucher verknüpft ist.
Der UniqueIdentifier kann auch in anderen Grenzszenarien nützlich sein, z. B. wenn Sie nicht auf den anonymen visitorCode zugreifen können, der dem Besucher ursprünglich zugewiesen wurde, aber Zugriff auf eine interne ID haben, die mit dem anonymen Besucher über Sitzungszusammenführungsfunktionen verbunden ist.
Jeder Besucher kann nur einen UniqueIdentifier haben. Das Hinzufügen eines weiteren UniqueIdentifier überschreibt den ersten.
| Name | Typ | Beschreibung |
|---|
| value (required) | boolean | Wert, der angibt, ob der Besucher einem anderen Besucher zugeordnet ist; das Bereitstellen von false impliziert, dass der Besucher keinem anderen Besucher zugeordnet ist |
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, UniqueIdentifier } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new unique identifier to a visitor
addData('my_visitor_code', new UniqueIdentifier(true));
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, UniqueIdentifier } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new unique identifier to a visitor
addData('my_visitor_code', new UniqueIdentifier(true));
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Conversion
Der hier gespeicherte Conversion-Datensatz kann verwendet werden, um Experiment- und Personalisierungsberichte nach jedem zugehörigen Ziel zu filtern.
- Jeder Besucher kann mehrere
Conversion-Objekte haben.
- Sie finden die
goalId in der Kameleoon-App.
ConversionParametersType conversionParameters - ein Objekt mit den unten beschriebenen Konversionsparametern
| Name | Typ | Beschreibung | Standard |
|---|
| goalId (required) | number | ID des Ziels. | |
| revenue (optional) | float | Umsatz der Konversion | 0 |
| negative (optional) | boolean | Definiert, ob der Umsatz positiv oder negativ ist. | false |
| metadata (optional) | CustomData[] | Metadaten der Konversion. | undefined |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
Conversion,
ConversionParametersType,
CustomData,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Defined conversion parameters
const conversionParameters: ConversionParametersType = {
goalId: 123,
revenue: 10000,
negative: true,
metadata: [new CustomData(0, 'value')],
};
// -- Add new conversion data to client
const conversion = new Conversion(conversionParameters);
addData('my_visitor_code', conversion);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, Conversion, CustomData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Defined conversion parameters
const conversionParameters = {
goalId: 123,
revenue: 10000,
negative: true,
metadata: [new CustomData(0, 'value')],
};
// -- Add new conversion data to client
const conversion = new Conversion(conversionParameters);
addData(visitorCode, conversion);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Cookie
Cookie enthält Informationen über das auf dem Gerät des Besuchers gespeicherte Cookie.
-
In der Regel versucht das React SDK, ein
localStorage-Cookie für die Bedingungen zu verwenden. Falls nicht möglich, kann das SDK Cookie-Daten als Alternative verwenden.
-
Jeder Besucher kann nur ein
Cookie haben. Das Hinzufügen eines zweiten Cookie überschreibt das erste.
| Name | Typ | Beschreibung |
|---|
| cookie (required) | CookieType[] | Eine Liste von CookieType-Objekten, die aus Cookie-Schlüsseln und -Werten bestehen |
import {
KameleoonClient,
CookieType,
Cookie,
useInitialize,
useData,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new cookie data to client
const cookieData: CookieType[] = [
{ key: 'key_1', value: 'value_1' },
{ key: 'key_2', value: 'value_2' },
];
const cookie = new Cookie(cookieData);
addData('my_visitor_code', cookie);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import {
KameleoonClient,
CookieType,
Cookie,
useInitialize,
useData,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new cookie data to client
const cookieData = [
{ key: 'key_1', value: 'value_1' },
{ key: 'key_2', value: 'value_2' },
];
const cookie = new Cookie(cookieData);
addData('my_visitor_code', cookie);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Methods
Cookie-Daten verfügen über eine statische Utility-Methode fromString, mit der Sie ein Cookie sofort erstellen können, indem Sie eine Zeichenfolge analysieren, die gültige Cookie-Daten enthält.
Die Methode akzeptiert eine string als Parameter und gibt eine initialisierte Cookie-Instanz zurück.
import { Cookie } from '@kameleoon/react-sdk';
const cookieString = 'key_1=value_1; key_2=value_2';
const cookie: Cookie = Cookie.fromString(cookieString);
// -- The result cookie will contain the following cookie array
// [
// { key: 'key_1', value: 'value_1' },
// { key: 'key_2', value: 'value_2' },
// ]
import { Cookie } from '@kameleoon/react-sdk';
const cookieString = 'key_1=value_1; key_2=value_2';
const cookie = Cookie.fromString(cookieString);
// -- The result cookie will contain the following cookie array
// [
// { key: 'key_1', value: 'value_1' },
// { key: 'key_2', value: 'value_2' },
// ]
GeolocationData
GeolocationData enthält die Geolocation-Details des Besuchers
Jeder Besucher kann nur ein GeolocationData haben. Das Hinzufügen eines zweiten GeolocationData überschreibt das erste.
Ein Objektparameter vom Typ GeolocationInfoType, der folgende Felder enthält:
| Name | Typ | Beschreibung |
|---|
| country (required) | string | Das Land des Besuchers |
| region (optional) | string | Die Region des Besuchers |
| city (optional) | string | Die Stadt des Besuchers |
| postalCode (optional) | string | Die Postleitzahl des Besuchers |
| coordinates (optional) | [number, number] | Tupel-Array von Koordinaten aus zwei Positionswerten (Längengrad und Breitengrad). Die Koordinatenzahl repräsentiert Dezimalgrad |
import {
KameleoonClient,
GeolocationData,
GeolocationInfoType,
useData,
useInitialize,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add geolocation data
const geolocationInfo: GeolocationInfoType = {
country: 'France',
region: 'Île-de-France',
city: 'Paris',
postalCode: '75008',
coordinates: [48.8738, 2.295],
};
const geolocationData = new GeolocationData(geolocationInfo);
addData('my_visitor_code', geolocationData);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import {
KameleoonClient,
GeolocationData,
useData,
useInitialize,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add geolocation data
const geolocationInfo = {
country: 'France',
region: 'Île-de-France',
city: 'Paris',
postalCode: '75008',
coordinates: [48.8738, 2.295],
};
const geolocationData = new GeolocationData(geolocationInfo);
addData('my_visitor_code', geolocationData);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
CustomData
Um Custom Data für zukünftige Besuche zu erhalten, überträgt das SDK CustomData mit einem Visitor-Scope während der nächsten Tracking-Anfrage. Sie können den Scope in den Dateneinstellungen im Custom Data-Dashboard konfigurieren.
CustomData ermöglicht es Ihnen, jedem Besucher problemlos einen beliebigen Datentyp zuzuordnen. Diese Daten können dann als Targeting-Bedingung in Segmenten oder als Filter oder Breakdown in Experimentberichten verwendet werden.
Weitere Informationen zu Custom Data finden Sie in diesem Artikel.
| Name | Typ | Beschreibung | Standard |
|---|
| index/name (required) | number/string | Index oder Name der Custom Data. Entweder index oder name muss angegeben werden, um die Daten zu identifizieren. | |
| overwrite (optional) | boolean | Markierung zur expliziten Steuerung, wie die Werte gespeichert werden und wie sie in Berichten erscheinen. Weitere Informationen | true |
| value (required) | string[] | Der Custom Data-Wert. Er muss in eine Zeichenfolge umgewandelt werden, um dem Typ string zu entsprechen. Hinweis: value ist variadisch. | |
-
Jeder Besucher darf nur einen
CustomData für jeden eindeutigen index haben. Das Hinzufügen eines weiteren CustomData mit demselben index ersetzt das vorhandene.
-
Der Custom Data-„Index” finden Sie im Custom Data-Dashboard unter der Spalte „INDEX”.
-
Um zu verhindern, dass das SDK Daten mit dem ausgewählten Index aus Datenschutzgründen an die Kameleoon-Server sendet, aktivieren Sie die Option: Use this data only locally for targeting purposes beim Erstellen von Custom Data.
-
Das Hinzufügen einer mit einem Namen erstellten
CustomData-Instanz, wenn die SDK-Instanz nicht initialisiert ist oder der Name nicht registriert ist, führt dazu, dass die Daten ignoriert werden.
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Defined conversion parameters
const dataItemOne = 'abc';
const dataItemTwo = JSON.stringify(100);
const dataItemThree = JSON.stringify({ a: 200, b: 300 });
const customDataIndex = 0;
// -- Create custom data using single parameter
const customData = new CustomData(customDataIndex, dataItemOne);
// -- Create custom data using overwrite flag
const customData = new CustomData(customDataIndex, false, dataItemOne);
// -- Create custom data using name instead of index
const customData = new CustomData('customDataName', dataItemOne);
// -- Create custom data using variadic number of parameters
const customData = new CustomData(
customDataIndex,
dataItemOne,
dataItemTwo,
);
// -- Create custom data using an array of values
const dataList = [dataItemOne, dataItemTwo, dataItemThree];
const customData = new CustomData(customDataIndex, ...dataList);
// -- Create custom data using overwrite flag
const customData = new CustomData(customDataIndex, false, ...dataList);
// -- Create custom data using name instead of index
const customData = new CustomData('customDataName', false, ...dataList);
// -- Add new custom data to client
addData('my_visitor_code', customData);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, CustomData } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Defined conversion parameters
const dataItemOne = 'abc';
const dataItemTwo = JSON.stringify(100);
const dataItemThree = JSON.stringify({ a: 200, b: 300 });
const customDataIndex = 0;
// -- Create custom data using single parameter
const customData = new CustomData(customDataIndex, dataItemOne);
// -- Create custom data using overwrite flag
const customData = new CustomData(customDataIndex, false, dataItemOne);
// -- Create custom data using name instead of index
const customData = new CustomData('customDataName', dataItemOne);
// -- Create custom data using variadic number of parameters
const customData = new CustomData(
customDataIndex,
dataItemOne,
dataItemTwo,
);
// -- Create custom data using an array of values
const dataList = [dataItemOne, dataItemTwo, dataItemThree];
const customData = new CustomData(customDataIndex, ...dataList);
// -- Create custom data using overwrite flag
const customData = new CustomData(customDataIndex, false, ...dataList);
// -- Create custom data using name instead of index
const customData = new CustomData('customDataName', false, ...dataList);
// -- Add new custom data to client
addData('my_visitor_code', customData);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Device
Seit React SDK 10.11.0 wird Device automatisch basierend auf der User-Agent-Zeichenfolge erkannt. Sie können es jedoch bei Bedarf manuell überschreiben.React Native: Die Unterstützung für diese Funktion ist derzeit experimentell und erfordert möglicherweise Anpassungen, um korrekt zu funktionieren. In React Native wird das Device automatisch basierend auf dem DPI von react-native.Dimensions erkannt.
Device enthält Informationen über Ihr Gerät.
Jeder Besucher kann nur ein Device haben. Das Hinzufügen eines zweiten Device überschreibt das erste.
| Name | Typ | Beschreibung |
|---|
| deviceType (required) | DeviceType | mögliche Typen für den Gerätetyp (PHONE, TABLET, DESKTOP) |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
Device,
DeviceType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new device data to client
const device = new Device(DeviceType.Desktop);
addData('my_visitor_code', device);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
Device,
DeviceType,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new device data to client
const device = new Device(DeviceType.Desktop);
addData('my_visitor_code', device);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
OperatingSystem
Seit React SDK 10.11.0 wird OperatingSystem automatisch basierend auf der User-Agent-Zeichenfolge erkannt. Sie können es jedoch bei Bedarf manuell überschreiben.React Native: Die Unterstützung für diese Funktion ist derzeit experimentell und erfordert möglicherweise Anpassungen, um korrekt zu funktionieren. In React Native wird das OperatingSystem automatisch basierend auf react-native.Platform erkannt.
OperatingSystem enthält die Informationen zum Betriebssystem des Besuchers.
Jeder Besucher kann nur ein OperatingSystem haben. Das Hinzufügen eines zweiten OperatingSystem überschreibt das vorherige.
| Name | Typ | Beschreibung |
|---|
| operatingSystem (required) | OperatingSystemType | mögliche Typen für den Gerätetyp: WINDOWS_PHONE, WINDOWS, ANDROID, LINUX, MAC, IOS |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
OperatingSystem,
OperatingSystemType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add operating system data
const operatingSystem = new OperatingSystem(OperatingSystemType.Windows);
addData('my_visitor_code', operatingSystem);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
OperatingSystem,
OperatingSystemType,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add operating system data
const operatingSystem = new OperatingSystem(OperatingSystemType.Windows);
addData('my_visitor_code', operatingSystem);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
PageView
Seit React SDK 10.11.0 wird PageView automatisch basierend auf window.location?.href und document.title erkannt. Sie können es jedoch bei Bedarf manuell überschreiben.React Native: Die Unterstützung für diese Funktion ist derzeit experimentell und erfordert möglicherweise Anpassungen, um korrekt zu funktionieren.
PageView enthält Informationen über Ihre Webseite.
Jeder Besucher kann ein PageView pro eindeutiger URL haben. Das Hinzufügen eines PageView mit derselben URL wie ein vorhandenes teilt dem SDK mit, dass der Besucher die Seite erneut besucht hat
PageViewParametersType pageViewParameters - ein Objekt mit unten beschriebenen Seitenaufrufparametern
| Name | Typ | Beschreibung |
|---|
| urlAddress (required) | string | URL-Adresse der zu verfolgenden Seite |
| title (required) | string | Titel der Webseite |
| referrer (optional) | number[] | ein optionaler Parameter, der eine Liste von Referrer-Indizes enthält, hat keinen Standardwert |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
PageView,
PageViewParametersType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Define page view parameters
const pageViewParameters: PageViewParametersType = {
urlAddress: 'www.example.com',
title: 'my example',
referrers: [123, 456],
};
// -- Add new page view data to client
const pageView = new PageView(pageViewParameters);
addData('my_visitor_code', pageView);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, PageView } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Define page view parameters
const pageViewParameters = {
urlAddress: 'www.example.com',
title: 'my example',
referrers: [123, 456],
};
// -- Add new page view data to client
const pageView = new PageView(pageViewParameters);
addData('my_visitor_code', pageView);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
UserAgent
Speichert Informationen über den User-Agent des Besuchers. Serverseitige Experimente sind anfälliger für Bot-Traffic als clientseitige Experimente. Um dies zu beheben, verwendet Kameleoon die IAB/ABC International Spiders and Bots List, um bekannte Bots und Spider zu identifizieren. Kameleoon verwendet auch das Feld UserAgent, um Bots und anderen unerwünschten Traffic herauszufiltern, der andernfalls Ihre Konversionsmetriken verfälschen könnte. Weitere Details finden Sie im Hilfeartikel zur Bot-Filterung.
Wenn Sie interne Bots verwenden, empfehlen wir, den Wert curl/8.0 des userAgent zu übergeben, um sie von unseren Analytiken auszuschließen.
Ein Besucher kann nur einen UserAgent haben. Das Hinzufügen eines zweiten UserAgent überschreibt den ersten.
| Name | Typ | Beschreibung |
|---|
| value (required) | string | Wert, der zum Vergleich verwendet wird |
Serverseitige Experimente sind anfälliger für Bot-Traffic als clientseitige Experimente. Um dies zu beheben, verwendet Kameleoon die IAB/ABC International Spiders and Bots List, um bekannte Bots und Spider zu identifizieren. Wir empfehlen, dass Sie den User-Agent übergeben, der von Kameleoon gefiltert werden soll, wenn Sie serverseitige Experimente für jeden Besucher Ihrer Website ausführen, um zu vermeiden, dass Bots in Ihren Analytiken gezählt werden.Wenn Sie interne Bots verwenden, empfehlen wir, den Wert curl/8.0 des userAgent zu übergeben, um sie von unseren Analytiken auszuschließen.
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, UserAgent } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new user agent data to client
const userAgent = new UserAgent('my_unique_value');
addData('my_visitor_code', userAgent);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useData, UserAgent } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new user agent data to client
const userAgent = new UserAgent('my_unique_value');
addData('my_visitor_code', userAgent);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
ApplicationVersion
ApplicationVersion repräsentiert die semantische Versionsnummer Ihrer Anwendung.
Ein Besucher kann nur einen ApplicationVersion haben. Das Hinzufügen einer zweiten Instanz überschreibt die erste.
| Name | Typ | Beschreibung |
|---|
| version (optional) | string | Die Version der mobilen Anwendung. Dieses Feld muss der semantischen Versionierung folgen. Akzeptierte Formate sind major, major.minor oder major.minor.patch. |
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
ApplicationVersion,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Add new application version data to client
const applicationVersion = new ApplicationVersion('1.2');
addData('my_visitor_code', applicationVersion);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useData,
ApplicationVersion,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { addData } = useData();
const init = useCallback(async () => {
await initialize();
// -- Add new application version data to client
const applicationVersion = new ApplicationVersion('1.2');
addData('my_visitor_code', applicationVersion);
}, [initialize, addData]);
useEffect(() => {
init();
}, [init]);
}
Returned Types
DataFile
Das DataFile enthält die SDK-Konfigurationsdetails.
Es kann bei Bedarf für Kunden mit zusätzlichen Informationen erweitert werden. Wenn Sie weitere Details benötigen, wenden Sie sich bitte an Ihren Customer Success Manager.
| Name | Typ | Beschreibung |
|---|
| featureFlags | Map<string, FeatureFlag> | Eine Map von FeatureFlag-Objekten, mit Feature-Flag-Schlüsseln als Schlüsseln. |
| dateModified | number | Der Zeitstempel (in Millisekunden), der angibt, wann das DataFile zuletzt geändert wurde. |
import { FeatureFlag } from '@kameleoon/javascript-sdk';
// Retrieves the map of feature flags from the DataFile.
// The map is keyed by feature flag identifiers, with each value being a FeatureFlag object.
const featureFlags: Map<string, FeatureFlag> = dataFile.featureFlags;
// Retrieves the last modification timestamp of the DataFile.
// The value is a number representing milliseconds since the Unix epoch.
const dateModified: number = dateFile.dateModified;
// Retrieves the map of feature flags from the DataFile.
// The map is keyed by feature flag identifiers, with each value being a FeatureFlag object.
const featureFlags = dataFile.featureFlags;
// Retrieves the last modification timestamp of the DataFile.
// The value is a number representing milliseconds since the Unix epoch.
const dateModified = dateFile.dateModified;
FeatureFlag
Der FeatureFlag repräsentiert eine Reihe von Eigenschaften, die ein Feature Flag selbst definieren — zum Beispiel seine Variations, Rules, Umgebungsstatus und andere zugehörige Details.
Er kann bei Bedarf für Kunden mit zusätzlichen Informationen erweitert werden. Wenn Sie weitere Details benötigen, wenden Sie sich bitte an Ihren Customer Success Manager.
| Name | Typ | Beschreibung |
|---|
| environmentEnabled | boolean | Gibt an, ob das Feature Flag in der aktuellen Umgebung aktiviert ist. |
| defaultVariationKey | string | Der Schlüssel der mit dem Feature Flag verknüpften Standardvariation. |
| variations | Map<string, Variation> | Eine Map von Variation-Objekten, mit Variationsschlüsseln als Schlüsseln. |
| rules | Rule[] | Eine Liste von Rule-Objekten |
import { Variation, Rule } from '@kameleoon/react-sdk';
// Check whether the feature flag is enabled in the current environment
const isEnvironmentEnabled: boolean = featureFlag.environmentEnabled;
// Retrieve the key of the default variation
const defaultVariationKey: string = featureFlag.defaultVariationKey;
// Retrieve all variations of the feature flag as a map (key = variation key, value = Variation object)
const variations: Map<string, Variation> = featureFlag.variations;
// Retrieve all targeting rules associated with the feature flag
const rules: Rule[] = featureFlag.rules;
// Check whether the feature flag is enabled in the current environment
const isEnvironmentEnabled = featureFlag.environmentEnabled;
// Retrieve the key of the default variation
const defaultVariationKey = featureFlag.defaultVariationKey;
// Retrieve all variations of the feature flag as a map (key = variation key, value = Variation object)
const variations = featureFlag.variations;
// Retrieve all targeting rules associated with the feature flag
const rules = featureFlag.rules;
Rule
Die Rule repräsentiert eine Reihe von Eigenschaften, die eine Regel selbst definieren — zum Beispiel ihre Variations.
Sie kann bei Bedarf für Kunden mit zusätzlichen Informationen erweitert werden. Wenn Sie weitere Details benötigen, wenden Sie sich bitte an Ihren Customer Success Manager.
| Name | Typ | Beschreibung |
|---|
| variations | Map<string, Variation> | Eine Map von Variation-Objekten, mit Variationsschlüsseln als Schlüsseln. |
import { Variation } from '@kameleoon/react-sdk';
// Retrieve all variations of the rule as a map (key = variation key, value = Variation object)
const variations: Map<string, Variation> = rule.variations;
// Retrieve all variations of the rule as a map (key = variation key, value = Variation object)
const variations = rule.variations;
Variation
Variation enthält Informationen über die dem Besucher zugewiesene Variation (oder die Standardvariation, wenn keine spezifische Zuweisung existiert).
| Name | Typ | Beschreibung |
|---|
| name | string | Name der Variation. |
| key | string | Schlüssel der Variation. |
| id | number or null | ID der Variation oder null, wenn der Besucher auf der Standardvariation gelandet ist. |
| experimentId | number or null | ID des Experiments oder null, wenn der Besucher auf der Standardvariation gelandet ist. |
| variables | Map<string, Variable> | Map der Variablen für die Variation, wobei der Schlüssel der Variablenschlüssel und der Wert das Variablenobjekt ist. |
- Stellen Sie sicher, dass Ihr Code den Fall behandelt, in dem
id oder experimentId null sein kann, was eine Standardvariation anzeigt.
- Die
variables-Map kann leer sein, wenn keine Variablen mit der Variation verknüpft sind.
// Retrieving the variation name
const variationName = variation.name;
// Retrieving the variation key
const variationKey = variation.key;
// Retrieving the variation id
const variationId = variation.id;
// Retrieving the experiment id
const experimentId = variation.experimentId;
// Retrieving the variables map
const variables = variation.variables;
// Retrieving the variation name
const variationName = variation.name;
// Retrieving the variation key
const variationKey = variation.key;
// Retrieving the variation id
const variationId = variation.id;
// Retrieving the experiment id
const experimentId = variation.experimentId;
// Retrieving the variables map
const variables = variation.variables;
Variable
Variable enthält Informationen über eine mit der zugewiesenen Variation verknüpfte Variable.
| Name | Typ | Beschreibung |
|---|
| key | string | Der eindeutige Schlüssel zur Identifizierung der Variable. |
| type | string | Der Typ der Variable. Mögliche Werte: BOOLEAN, NUMBER, STRING, JSON, JS, CSS. |
| value | any | Der Wert der Variable, der von einem der folgenden Typen sein kann: boolean, number, String, Record<string, any>, any[]. |
// Retrieving the variables map
const variables = variation.variables;
// Variable type can be retrieved for further processing
const type = variables.get('isDiscount')?.type || '';
// Retrieving the variable value by key
const isDiscount = variables.get('isDiscount')?.value || false;
// Variable value can be of different types
const title = variables.get('title')?.value || '';
// Retrieving the variables map
const variables = variation.variables;
// Variable type can be retrieved for further processing
const type = variables.get('isDiscount')?.type || '';
// Retrieving the variable value by key
const isDiscount = variables.get('isDiscount')?.value || false;
// Variable value can be of different types
const title = variables.get('title')?.value || '';
Deprecated methods
Diese Methoden sind veraltet und werden im nächsten Major-Update entfernt.
getFeatureFlagVariationKey()
- 📨 Sendet Tracking-Daten an Kameleoon
- 🎯 Events:
EventType.Evaluation
Die Methode getFeatureFlagVariationKey(), die mit dem Hook useFeatureFlag verwendet wird, ruft den Variationsschlüssel für einen Besucher ab, der durch seinen visitorCode identifiziert wird. Dieser Prozess umfasst die Überprüfung der Targeting-Kriterien, die Identifizierung der dem Besucher zugewiesenen geeigneten Variation, das Speichern dieser Informationen und das Senden einer Tracking-Anfrage.
Wenn ein Benutzer noch nie einem Feature Flag zugeordnet war, gibt das SDK zufällig einen Variationsschlüssel gemäß den Regeln dieses Feature Flags zurück. Wenn der Benutzer bereits mit dem Feature Flag verknüpft ist, identifiziert das SDK den zuvor zugewiesenen Variationsschlüssel. Wenn der Benutzer keine der angegebenen Regeln erfüllt, gibt das SDK den Standardwert zurück, der in den Bereitstellungsregeln des Feature Flags von Kameleoon definiert ist. Es ist wichtig zu beachten, dass der Standardwert nicht immer ein Variationsschlüssel sein muss; es kann auch ein boolescher Wert oder ein anderer Datentyp sein, je nachdem, wie das Feature Flag konfiguriert ist.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getFeatureFlagVariationKey } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code using `getVisitorCode` function.
const visitorCode = getVisitorCode();
const featureKey = 'my_feature_key';
// -- Get the variationKey for the visitor under `visitorCode` in the feature flag.
const variationKey = getFeatureFlagVariationKey(visitorCode, featureKey);
}, [initialize, visitorCode, getFeatureFlagVariationKey, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getFeatureFlagVariationKey } = useFeatureFlag();
const { getVisitorCode } = useVisitorCode();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code using `getVisitorCode` function
const visitorCode = getVisitorCode();
const featureKey = 'my_feature_key';
// -- Get the variationKey for the visitor under `visitorCode` in the found feature flag
const variationKey = getFeatureFlagVariationKey(visitorCode, featureKey);
}, [initialize, visitorCode, getFeatureFlagVariationKey, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| featureKey (required) | string | ein eindeutiger Schlüssel für das Feature Flag |
Return value
| Typ | Beschreibung |
|---|
string | eine Zeichenfolge, die den Variablenschlüssel für die zugewiesene Feature-Flag-Variation für den angegebenen Besucher enthält. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor initialize für den kameleoonClient abgeschlossen wurde |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.FeatureFlagConfigurationNotFound | Kein Feature Flag wurde für den angegebenen featureKey gefunden |
KameleoonException.FeatureFlagEnvironmentDisabled | Das Feature Flag ist für die aktuelle Umgebung deaktiviert |
getVisitorFeatureFlags()
- 🚫 Sendet keine Tracking-Daten an Kameleoon
- 🎯 Events:
EventType.Evaluation (für jedes Feature Flag)
Die Methode getVisitorFeatureFlags, die mit dem Hook useFeatureFlag verwendet wird, gibt eine Liste aktiver Feature Flags zurück, die den mit dem visitorCode verknüpften Besucher ansprechen (der Besucher muss eine der zugewiesenen Variationen haben).
Diese Methode sammelt nur die Feature Flags, die derzeit für den Besucher aktiv sind. Daher enthält sie keine Feature Flags, für die der Besucher der „off”-Variation (Standard oder Kontrolle) zugewiesen ist. Wenn Sie alle Feature Flags des Besuchers abrufen müssen, verwenden Sie stattdessen getFeatureFlags.Zum Beispiel:// -- `getVisitorFeatureFlags` doesn't trigger feature experiments;
// it only returns feature flags where visitors didn't get the `off` variation.
getVisitorFeatureFlags('my_visitor').forEach(({ key }) => {
// -- `getFeatureFlagVariationKey` triggers a feature experiment,
// as `off` is already filtered out - visitors will never take part
// in an experiment where the `off` variation was allocated.
getFeatureFlagVariationKey('my_visitor', key);
});
Für Fälle, in denen Sie alle Feature Flags des Besuchers benötigen, verwenden Sie stattdessen getFeatureFlags:// -- Both `off` and other variations are processed as expected
getFeatureFlags('my_visitor').forEach(({ key }) => {
getFeatureFlagVariationKey('my_visitor', key);
});
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getVisitorFeatureFlags } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get active feature flags for visitor
const featureFlags = getVisitorFeatureFlags(visitorCode);
}, [initialize, visitorCode, getVisitorFeatureFlags, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getVisitorFeatureFlags } = useFeatureFlag();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get active feature flags for visitor
const featureFlags = getVisitorFeatureFlags(visitorCode);
}, [initialize, visitorCode, getVisitorFeatureFlags, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
Return value
| Typ | Beschreibung |
|---|
FeatureFlagType[] | Liste der Feature Flags, jedes Feature-Flag-Element enthält id und key. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.StorageRead | Fehler beim Lesen der Speicherdaten |
getActiveFeatureFlags()
- 🚫 Sendet keine Tracking-Daten an Kameleoon
- 🎯 Events:
EventType.Evaluation (für jedes Feature Flag)
Die Methode getActiveFeatureFlags, die mit dem Hook useFeatureFlag gesammelt wird, gibt eine Map zurück, in der der Schlüssel der Feature-Schlüssel und der Wert detaillierte Informationen über die Variation des Besuchers und seine Variablen ist
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getActiveFeatureFlags } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get active feature flags for visitor
// with detailed variation and variables data
const activeFeatures = getActiveFeatureFlags(visitorCode);
// -- Result example:
// Map {
// 'feature-key-one' => {
// id: 100,
// key: 'variation-key-one',
// experimentId: 200,
// variables: [
// { key: 'variable_bool', type: VariableType.Boolean, value: true },
// ]
// },
// 'feature-key-two' => {
// id: null, // -> `null` because it is default variation
// key: 'default-variation-key',
// experimentId: null, // -> `null` because it is default variation
// variables: []
// }
// }
}, [initialize, visitorCode, getVisitorFeatureFlags, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
init();
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getActiveFeatureFlags } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get active feature flags for visitor
// with detailed variation and variables data
const activeFeatures = getActiveFeatureFlags(visitorCode);
// -- Result example:
// Map {
// 'feature-key-one' => {
// id: 100,
// key: 'variation-key-one',
// experimentId: 200,
// variables: [
// { key: 'variable_bool', type: VariableType.Boolean, value: true },
// ]
// },
// 'feature-key-two' => {
// id: null, // -> `null` because it is default variation
// key: 'default-variation-key',
// experimentId: null, // -> `null` because it is default variation
// variables: []
// }
// }
}, [initialize, visitorCode, getVisitorFeatureFlags, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
init();
Diese Methode sammelt nur die aktiven Feature Flags des Besuchers. Das bedeutet, dass das Ergebnis alle Feature Flags ausschließt, denen der Besucher der off-Variation (Standard oder Kontrolle) zugewiesen ist. Wenn Sie alle Feature Flags des Besuchers benötigen, um darüber zu iterieren, verwenden Sie stattdessen getFeatureFlags.Weitere Details finden Sie im CAUTION-Abschnitt der Methode getVisitorFeatureFlags.
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
Return value
| Typ | Beschreibung |
|---|
Map<string, KameleoonVariationType> | eine Map von Feature Flags, in der der Schlüssel der Feature-Schlüssel und der Wert detaillierte Informationen über die Variation des Besuchers und seine Variablen ist |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge von 255 Zeichen überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.StorageRead | Fehler beim Lesen der Speicherdaten |
KameleoonException.NumberParse | Der Number-Wert konnte nicht analysiert werden |
KameleoonException.JSONParse | Der JSON-Wert konnte nicht analysiert werden |
getFeatureFlagVariable()
- 📨 Sendet Tracking-Daten an Kameleoon
- 🎯 Events:
EventType.Evaluation
Die Methode getFeatureFlagVariable, die mit dem Hook useFeatureFlag gesammelt wird, gibt eine Variable für den Besucher unter visitorCode im gefundenen Feature Flag zurück; dies umfasst die Targeting-Überprüfung, das Finden der entsprechenden Variation, die dem Besucher ausgesetzt ist, und das Speichern im Speicher zusammen mit dem Senden einer Tracking-Anfrage.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useFeatureFlag,
VariableType,
JSONType,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getFeatureFlagVariable } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get feature variable
const result = getFeatureFlagVariable({
visitorCode,
featureKey: 'my_feature_key',
variableKey: 'my_variable_key',
});
// -- Infer the type of variable by its `type`
switch (result.type) {
case VariableType.BOOLEAN:
const myBool: boolean = result.value;
break;
case VariableType.NUMBER:
const myNum: number = result.value;
break;
case VariableType.JSON:
const myJson: JSONType = result.value;
break;
case VariableType.STRING:
case VariableType.JS:
case VariableType.CSS:
const myStr: string = result.value;
break;
default:
break;
}
}, [initialize, getFeatureFlagVariable, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useVisitorCode,
useFeatureFlag,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getFeatureFlagVariable } = useFeatureFlag();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get feature variable
const variableResult = getFeatureFlagVariable({
visitorCode,
featureKey: 'my_feature_key',
variableKey: 'my_variable_key',
});
const { type, value } = variableResult;
}, [initialize, getFeatureFlagVariable, visitorCode, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
Parameterobjekt vom Typ GetFeatureFlagVariableParamsType, das folgende Felder enthält:
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| featureKey (required) | string | ein eindeutiger Schlüssel für das Feature Flag |
| variableKey (required) | string | Schlüssel der zu findenden Variable für ein Feature Flag mit dem angegebenen featureKey, kann auf der Kameleoon-Plattform gefunden werden |
Return value
| Typ | Beschreibung |
|---|
FeatureFlagVariableType | ein Variablenobjekt, das die Felder type und value enthält. Sie können das Feld type mit dem Enum VariableType vergleichen. Wenn der type beispielsweise VariableType.BOOLEAN ist, ist value ein boolean-Typ. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor initialize für den kameleoonClient abgeschlossen wurde |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.FeatureFlagConfigurationNotFound | Kein Feature Flag wurde für den angegebenen featureKey gefunden |
KameleoonException.FeatureFlagVariableNotFound | Keine Feature-Variable wurde für die angegebenen visitorCode und variableKey gefunden |
KameleoonException.FeatureFlagEnvironmentDisabled | Das Feature Flag ist für die aktuelle Umgebung deaktiviert |
KameleoonException.JSONParse | Der JSON-Wert konnte nicht analysiert werden |
KameleoonException.NumberParse | Der Number-Wert konnte nicht analysiert werden |
getFeatureFlagVariables()
- 📨 Sendet Tracking-Daten an Kameleoon
- 🎯 Events:
EventType.Evaluation (für jedes Feature Flag)
Die Methode getFeatureFlagVariables, die mit dem Hook useFeatureFlag gesammelt wird, gibt eine Liste von Variablen für den Besucher unter visitorCode im gefundenen Feature Flag zurück; dies umfasst die Targeting-Überprüfung, das Finden der entsprechenden Variation, die dem Besucher ausgesetzt ist, und das Speichern im Speicher zusammen mit dem Senden einer Tracking-Anfrage.
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getFeatureFlagVariables } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode();
// -- Get a list of variables for the visitor under `visitorCode` in the feature flag
const variables = getFeatureFlagVariables(visitorCode, 'my_feature_key');
}, [initialize, getFeatureFlagVariables, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import {
useInitialize,
useFeatureFlag,
useVisitorCode,
} from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getVisitorCode } = useVisitorCode();
const { getFeatureFlagVariables } = useFeatureFlag();
const init = useCallback(async () => {
await initialize();
// -- Get visitor code
const visitorCode = getVisitorCode('www.example.com');
// -- Get a list of variables for the visitor under `visitorCode` in the feature flag
const variables = getFeatureFlagVariables(visitorCode, 'my_feature_key');
}, [initialize, getFeatureFlagVariables, getVisitorCode]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| visitorCode (required) | string | eindeutige Besucher-Identifikationszeichenfolge, darf 255 Zeichen Länge nicht überschreiten |
| featureKey (required) | string | ein eindeutiger Schlüssel für das Feature Flag |
Return value
| Typ | Beschreibung |
|---|
FeatureVariableResultType[] | eine Liste von Variablenobjekten, die die Felder key, type und value enthalten. Sie können das Feld type mit dem Enum VariableType vergleichen. Wenn der type beispielsweise VariableType.BOOLEAN ist, ist value ein boolean-Typ. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
KameleoonException.VisitorCodeMaxLength | Der Visitor Code hat die maximale Länge (255 Zeichen) überschritten |
KameleoonException.VisitorCodeEmpty | Der Visitor Code ist leer |
KameleoonException.FeatureFlagConfigurationNotFound | Kein Feature Flag wurde für den angegebenen featureKey gefunden |
KameleoonException.FeatureFlagVariationNotFound | Keine Feature-Variation wurde für die angegebenen visitorCode und variableKey gefunden |
KameleoonException.FeatureFlagEnvironmentDisabled | Das Feature Flag ist für die aktuelle Umgebung deaktiviert |
KameleoonException.JSONParse | Der JSON-Wert konnte nicht analysiert werden |
KameleoonException.NumberParse | Der Number-Wert konnte nicht analysiert werden |
onConfigurationUpdate()
Verwenden Sie stattdessen die Methode onEvent mit EventType.ConfigurationUpdate.
Die Methode onConfigurationUpdate, die mit dem Hook useInitialize gesammelt wird, löst einen Callback bei einem Konfigurations-Update des Clients aus.
Dieser Hook funktioniert nur für Server-Sent Events zur Echtzeit-Aktualisierung
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize, onConfigurationUpdate } = useInitialize();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Define logic to execute on client configuration update
onConfigurationUpdate(() => {
// -- My Logic
});
}, [initialize, onConfigurationUpdate]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize, onConfigurationUpdate } = useInitialize();
const init = useCallback(async () => {
await initialize();
// -- Define logic to execute on client configuration update
onConfigurationUpdate(() => {
// -- My Logic
});
}, [initialize, onConfigurationUpdate]);
useEffect(() => {
init();
}, [init]);
}
Arguments
| Name | Typ | Beschreibung |
|---|
| callback (required) | () => void | Callback-Funktion ohne Parameter, die bei einem Konfigurations-Update aufgerufen wird |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |
getFeatureFlags()
🚫 Sendet keine Tracking-Daten an Kameleoon
Die Methode getFeatureFlags, die mit dem Hook useFeatureFlag gesammelt wird, gibt eine Liste von in der Client-Konfiguration gespeicherten Feature Flags zurück.
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent(): JSX.Element {
const { initialize } = useInitialize();
const { getFeatureFlags } = useFeatureFlag();
const init = useCallback(async (): Promise<void> => {
await initialize();
// -- Get list of all feature flags
const featureFlags = getFeatureFlags();
}, [initialize, getFeatureFlags]);
useEffect(() => {
init();
}, [init]);
}
import { useEffect, useCallback } from 'react';
import { useInitialize, useFeatureFlag } from '@kameleoon/react-sdk';
function MyComponent() {
const { initialize } = useInitialize();
const { getFeatureFlags } = useFeatureFlag();
const init = useCallback(async () => {
await initialize();
// -- Get list of all feature flags
const featureFlags = getFeatureFlags();
}, [initialize, getFeatureFlags]);
useEffect(() => {
init();
}, [init]);
}
Return value
| Typ | Beschreibung |
|---|
FeatureFlagType[] | Liste von Feature Flags, jedes Feature-Flag-Element enthält id und key. |
Exceptions thrown
| Typ | Beschreibung |
|---|
KameleoonException.Initialization | Die Methode wurde ausgeführt, bevor der kameleoonClient seinen initialize-Aufruf abgeschlossen hat |