Guide d'Intégration du SDK React Native
Cette page explique comment implémenter le SDK+ Rokt Ecommerce React Native. Le SDK+ transmet les données utilisateur et transactionnelles à Rokt sur les écrans configurés afin que Rokt puisse afficher des expériences pertinentes, telles que des offres sur les écrans de confirmation.
Utilisez les sélecteurs Target et Language ci-dessus pour choisir votre plateforme de déploiement et les exemples de code natif que vous souhaitez suivre.
Vous écrirez quelques lignes de code natif lorsque vous initialiserez le SDK+ à l'Étape 2. Toutes les autres étapes utilisent JavaScript via le package react-native-mparticle.
1. Add the Rokt SDK+ to Your React Native App#
1Install the React Native package#
Ajoutez le SDK+ React Native comme dépendance à votre application :
npm install react-native-mparticle --save
2Import the package into your app#
Importez le package dans le code de votre application React Native et obtenez une instance du SDK :
import MParticle from 'react-native-mparticle';
Continuez à configurer le SDK+ sur votre projet natif. Utilisez le bouton Target ci-dessus pour basculer entre iOS et Android.
L'étape d'installation NPM ci-dessus intègre automatiquement le framework React et le framework iOS de base. Le SDK+ Rokt pour iOS est ajouté en tant que dépendance pod dans votre ios/Podfile.
3Add the Rokt SDK pod to your Podfile#
Ajoutez le pod SDK+ Rokt à votre ios/Podfile :
pod 'RoktSDKPlus', '~> 9.2'
Parce que le SDK iOS de Rokt contient du code Swift, vous devez soit conserver le lien statique par défaut de React Native avec une exception pre_install, soit passer votre projet aux frameworks. Choisissez le chemin qui correspond à votre projet :
4Configure your Podfile#
Ajoutez le bloc pre_install suivant à votre ios/Podfile :
pre_install do |installer|
installer.pod_targets.each do |pod|
if pod.name == 'RoktSDKPlus' || pod.name == 'mParticle-Apple-SDK' || pod.name == 'mParticle-Rokt' || pod.name == 'Rokt-Widget'
def pod.build_type
Pod::BuildType.new(:linkage => :dynamic, :packaging => :framework)
end
end
end
end
5Install pods#
Exécutez pod install pour appliquer les modifications :
bundle exec pod install
4Configure your Podfile#
Si votre ios/Podfile a une ligne de configuration Flipper, commentez-la :
# :flipper_configuration => flipper_config,
5Install pods#
Exécutez pod install avec USE_FRAMEWORKS pour appliquer les modifications. Choisissez static ou dynamic en fonction de votre projet :
USE_FRAMEWORKS=static bundle exec pod install
# or
USE_FRAMEWORKS=dynamic bundle exec pod install
2. Initialize the Rokt SDK+#
Initialisez le SDK+ Rokt sur le côté natif. Le SDK+ doit être initialisé avant tout autre appel d'API SDK+. Utilisez le bouton Target ci-dessus pour basculer entre iOS et Android.
Insérez le snippet d'initialisation dans votre fichier AppDelegate. Remplacez your-key et your-secret par les valeurs fournies par votre gestionnaire de compte Rokt.
Appelez registerPaymentExtension après MParticle.sharedInstance().start(with:) et avant selectShoppableAds. Cela est requis pour les placements de Shoppable Ads sur iOS.
import mParticle_Apple_SDK
import RoktPaymentExtension
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Initialize the SDK
let options = MParticleOptions(key: "your-key",
secret: "your-secret")
// Specify the data environment with environment:
// Set it to .development if you are still testing your integration.
// Set it to .production if your integration is ready for production data.
// The default is .autoDetect which attempts to detect the environment automatically
options.environment = .development
MParticle.sharedInstance().start(with: options)
// Register after MParticle.sharedInstance().start(), before selectShoppableAds
if let paymentExt = RoktPaymentExtension(
applePayMerchantId: "merchant.com.yourapp.rokt"
) {
MParticle.sharedInstance().rokt.registerPaymentExtension(paymentExt)
}
return true
}
Lors de l'insertion du snippet d'initialisation, vous verrez des champs personnalisables pour :
1Entering your Rokt key and secret#
Définissez your-key et your-secret dans MParticleOptions(key:secret:) aux valeurs fournies par votre gestionnaire de compte Rokt.
2Setting your data environment#
Définissez options.environment sur .development lors des tests pour diriger les données vers l'environnement de Développement, et .production pour envoyer l'activité client en direct vers la Production.
3Registering the payment extension#
Enregistrez RoktPaymentExtension après MParticle.sharedInstance().start(with:) et avant selectShoppableAds pour activer les paiements Shoppable Ads (y compris Apple Pay). Remplacez merchant.com.yourapp.rokt par votre identifiant marchand Apple Pay. Requis pour tous les placements de Shoppable Ads sur iOS. La clé publiable Stripe est configurée dans vos paramètres mParticle Rokt kit (tableau de bord mParticle) — vous ne passez que l'identifiant marchand Apple Pay dans le code. RoktPaymentExtension est un type Swift ; si votre AppDelegate est en Objective-C, faites cela à partir d'un petit fichier Swift.
Pour identifier l'utilisateur et définir des attributs utilisateur supplémentaires, voir Étape 3 : Identifier l'utilisateur ci-dessous. Si vous n'avez pas l'email de l'utilisateur lors de l'initialisation, vous pouvez identifier l'utilisateur plus tard — voir Gestion des erreurs pour savoir comment gérer les erreurs d'identité.
3. Identify the User#
Le script d'initialisation SDK+ identifie l'utilisateur actuel en utilisant les identifiants que vous avez fournis dans l'objet identifyRequest du script. Après l'initialisation du SDK, vous devez garder l'identité de l'utilisateur synchronisée chaque fois qu'il se connecte, se déconnecte ou fournit un identifiant (par exemple, lors du paiement) en utilisant la méthode appropriée comme décrit ci-dessous.
Identifiants utilisateur pris en chargeLien direct vers Identifiants utilisateur pris en charge
Afficher les identifiants utilisateur pris en charge
| Champ | Type | Description |
|---|---|---|
email | chaîne | Transmettez l'adresse e-mail brute et non hachée du client. |
mobile | chaîne | Transmettez le numéro de téléphone du client au format E.164. |
customerid | chaîne | Transmettez votre identifiant client/compte interne. Envoyez-le sur chaque écran pour les utilisateurs connectés. |
other | chaîne | Transmettez un e-mail haché en SHA-256. Utilisez uniquement lorsque l'e-mail brut ne peut pas être fourni — ne transmettez pas à la fois email et other. (Chemin Android uniquement.) |
other2 | chaîne | Transmettez un numéro de mobile haché en SHA-256. Utilisez uniquement lorsque le numéro de mobile brut ne peut pas être fourni — ne transmettez pas à la fois mobile et other2. (Chemin Android uniquement.) |
emailSha256 | chaîne | Transmettez un e-mail haché en SHA-256. Utilisez uniquement lorsque l'e-mail brut ne peut pas être fourni — ne transmettez pas à la fois email et emailSha256. (Chemin iOS uniquement.) |
mobileSha256 | chaîne | Transmettez un numéro de mobile haché en SHA-256. Utilisez uniquement lorsque le numéro de mobile brut ne peut pas être fourni — ne transmettez pas à la fois mobile et mobileSha256. (Chemin iOS uniquement.) |
Pour identifier l'utilisateur :
1Create an IdentityRequest object#
Créez un objet IdentityRequest pour contenir les identifiants de l'utilisateur. Vous devez intégrer l'adresse e-mail brute et non hachée de l'utilisateur dans le champ email.
2Set additional attributes via the identity callback#
Pour définir des attributs utilisateur supplémentaires, utilisez le rappel d'identité. Si le identifyRequest réussit, tous les attributs utilisateur que vous définissez à l'intérieur du rappel sont attribués à l'utilisateur identifié.
3Send the request using the method that matches the user's action#
Transmettez le identifyRequest (et éventuellement le identityCallback) à la méthode qui correspond à l'action de l'utilisateur :
MParticle.Identity.login: appelez lorsque l'utilisateur se connecte ou crée un compte.MParticle.Identity.identify: appelez lorsque vous obtenez l'e-mail de l'utilisateur en cours de session sans transition de connexion (par exemple, un invité entre son e-mail lors du paiement).MParticle.Identity.logout: appelez lorsque l'utilisateur se déconnecte.
Appeler ces méthodes fait passer l'enregistrement SDK de l'état actuel de l'utilisateur. Les méthodes login et logout enregistrent également automatiquement un événement correspondant pour améliorer l'attribution de Rokt.
Par exemple, pour identifier un utilisateur nommé Jane Smith avec l'adresse e-mail j.smith@example.com, le numéro de mobile +13125551515, et l'ID client cust_10482 :
// 1. Create the identifyRequest object
const request = new MParticle.IdentityRequest();
// Preferred: pass the customer's raw, unhashed email.
// If you can only provide a SHA-256-hashed email, remove .email and use other instead — do not pass both.
request.email = 'j.smith@example.com';
request.other = 'SHA-256 hashed email'; // only if raw email unavailable
// If you can only provide a SHA-256-hashed mobile number, use other2 instead of mobile — do not pass both.
// (Called 'other2' on Android and 'mobileSha256' on iOS; both use this same field.)
request.other2 = 'SHA-256 hashed mobile number'; // only if raw mobile unavailable
request.mobile = '+13125551515';
request.customerId = 'cust_10482';
// 2. User attributes are set using the identity callback
const identityCallback = (error, userId) => {
if (error) {
console.debug(error);
} else {
const user = new MParticle.User(userId);
user.setUserAttribute('firstname', 'Jane');
user.setUserAttribute('lastname', 'Smith');
}
};
// 3. Call one of the following methods that best matches the user's action:
MParticle.Identity.login(request, identityCallback); // Call when the user logs in or creates an account
MParticle.Identity.identify(request, identityCallback); // Call when you obtain the user's email mid-session, but not during a login
MParticle.Identity.logout({}); // Call when the user logs out
4. Set User Attributes#
Définissez les attributs utilisateur progressivement au fur et à mesure que l'utilisateur navigue dans votre application, pas seulement lors du paiement. Plus vous définissez d'attributs, mieux Rokt peut résoudre le client et proposer des offres pertinentes.
import MParticle from 'react-native-mparticle';
// Retrieve the current user. This will only succeed if you have identified the user during SDK+ initialization or by calling the identify method.
MParticle.Identity.getCurrentUser((currentUser) => {
if (currentUser) {
// Once you have the current user, you can set user attributes with:
currentUser.setUserAttribute('custom-attribute-name', 'custom-attribute-value');
// Note: all user attributes (including list attributes and tags) must have distinct names.
// Rokt recommends setting as many of the following user attributes as possible:
currentUser.setUserAttribute('firstname', 'John');
currentUser.setUserAttribute('lastname', 'Doe');
// Phone numbers can be formatted either as '1234567890', or '+1 (234) 567-8901'
currentUser.setUserAttribute('mobile', '3125551515');
currentUser.setUserAttribute('age', '33');
currentUser.setUserAttribute('gender', 'M');
currentUser.setUserAttribute('billingcity', 'Brooklyn');
currentUser.setUserAttribute('billingstate', 'NY');
currentUser.setUserAttribute('billingzipcode', '123456');
currentUser.setUserAttribute('dob', 'yyyymmdd');
currentUser.setUserAttribute('title', 'Mr');
currentUser.setUserAttribute('language', 'en');
currentUser.setUserAttribute('predictedltv', '136.23');
// You can create a user attribute to contain a list of values
currentUser.setUserAttributeArray('favorite-genres', ['documentary', 'comedy', 'romance', 'drama']);
// To remove a user attribute, call removeUserAttribute and pass in the attribute name.
currentUser.removeUserAttribute('attribute-to-remove');
}
});
Attributs utilisateurLien direct vers Attributs utilisateur
Définissez autant que possible des éléments suivants que vous pouvez collecter :
Afficher tous les attributs utilisateur
| Champ | Type | Description |
|---|---|---|
firstname | chaîne | Prénom du client. Utilisé pour la personnalisation. |
lastname | chaîne | Nom de famille du client. Utilisé pour la personnalisation. |
mobile | chaîne | Numéro de téléphone formaté comme 1112345678 ou +1 (222) 345-6789. Utilisé pour la résolution d'identité et la pertinence. |
age | entier | Âge du client. Alternative à dob. Utilisé pour l'éligibilité et la pertinence. |
dob | chaîne | Date de naissance, yyyymmdd. Alternative à age. Utilisé pour l'éligibilité et la pertinence. |
gender | chaîne | Sexe du client. Par exemple, M, F, Male, ou Female. Utilisé pour la pertinence. |
title | chaîne | Titre de civilité. Par exemple, Mr, Mrs, Ms. Utilisé pour la personnalisation. |
language | chaîne | Code de langue ISO 639-1 associé à l'achat. Utilisé pour la pertinence. |
billingcity | chaîne | Ville de facturation. Utilisé pour la pertinence. |
billingstate | chaîne | État / province / région de facturation. Utilisé pour la pertinence et l'éligibilité. |
billingzipcode | chaîne | Code postal complet (la préférence aux États-Unis est ZIP+4). Utilisé pour la résolution d'identité et la pertinence. |
billingaddress1 | chaîne | Adresse de facturation ligne 1. Utilisé pour la résolution d'identité et la pertinence. |
billingaddress2 | chaîne | Adresse de facturation ligne 2. Utilisé pour la résolution d'identité. |
country | chaîne | Code de pays ISO 3166-1 alpha-2 (par exemple US, GB, AU). Utilisé pour l'éligibilité et la pertinence. |
birthyear | entier | Année de naissance du client (par exemple 1990). Utilisé pour l'éligibilité et la pertinence. |
newcustomer | booléen | Indique si c'est un premier achat. Utilisé pour la pertinence. |
customertype | chaîne | Indique si l'utilisateur est authentifié (guest / logged_in). Utilisé pour la pertinence. |
loyaltytier | chaîne | Niveau du programme de fidélité du partenaire. Utilisé pour la pertinence et l'éligibilité. |
loyaltyid | chaîne | ID de membre du programme de fidélité. Utilisé pour la résolution d'identité. |
predictedltv | décimal | Valeur totale à vie prédite, généralement à partir d'un modèle ML partenaire. Utilisé pour la pertinence. |
subscriptionstatus | string | État de l'abonnement si applicable (active, trial, churned, paused, none). Utilisé pour la pertinence et l'éligibilité. |
customersegment | string | Segmentation interne du partenaire (par exemple, vip, at_risk, new, reactivated). Utilisé pour la pertinence. |
acquisitionchannel | string | Canal par lequel le client a été acquis. Utilisé pour la pertinence. |
Tous les attributs utilisateur (y compris les attributs de liste) doivent avoir des noms distincts.
5. Track Funnel Events#
Suivez les vues d'écran, les événements commerciaux et les événements personnalisés pour que Rokt puisse comprendre où se trouve chaque client dans son parcours.
Appelez MParticle.logScreenEvent() avec le nom de l'écran (par exemple, "homepage", "product_detail_page"). Incluez tous les attributs personnalisés supplémentaires dans l'objet info.
import MParticle from 'react-native-mparticle';
MParticle.logScreenEvent('homepage', {
'custom-attribute': 'custom-value',
});
Les événements commerciaux contiennent des détails au niveau du produit pour le parcours de l'utilisateur. Déclenchez un événement commercial distinct pour chaque action de produit effectuée par le client.
Investir dans une couverture complète des événements commerciaux est l'une des actions les plus rentables que vous puissiez entreprendre lors de votre intégration. Chaque événement informe Rokt de l'endroit où se trouve le client dans son parcours : une vue de produit signale une exploration, un ajout au panier signale une considération, un début de paiement signale une intention d'achat, et un achat complété confirme la conversion. Avec un signal plus riche, Rokt peut personnaliser les offres plus efficacement, mesurer la performance des placements avec précision, et attribuer les conversions aux bons points de contact. Réaliser ce travail lors de votre intégration initiale évite également une révision ultérieure. Le signal se renforce au fil du temps : chaque événement reçu par Rokt ajoute un contexte utilisé pour affiner la personnalisation, améliorer la précision de l'attribution, et mieux résoudre et segmenter votre base de clients lors de visites futures.
Les événements commerciaux sont enregistrés avec MParticle.CommerceEvent.createProductActionEvent, en utilisant un type d'action de produit qui identifie l'action du client (visualisation d'un produit, ajout au panier, début de paiement, achat complété, etc.).
Afficher tous les types d'actions de produit
| Action du client | Type d'action de produit |
|---|---|
| Page de détail du produit vue | MParticle.ProductActionType.ViewDetail |
| Produit cliqué | MParticle.ProductActionType.Click |
| Article ajouté au panier | MParticle.ProductActionType.AddToCart |
| Article retiré du panier | MParticle.ProductActionType.RemoveFromCart |
| Article ajouté à la liste de souhaits | MParticle.ProductActionType.AddToWishlist |
| Article retiré de la liste de souhaits | MParticle.ProductActionType.RemoveFromWishlist |
| Flux de paiement initié | MParticle.ProductActionType.Checkout |
| Option de paiement sélectionnée | MParticle.ProductActionType.CheckoutOption |
| Commande confirmée | MParticle.ProductActionType.Purchase |
| Commande remboursée | MParticle.ProductActionType.Refund |
Le suivi d'un événement commercial se déroule en trois phases :
1Define the product#
Créez un MParticle.Product avec le nom du produit, le SKU, le prix et la quantité. Définissez des champs supplémentaires comme category, brand, et position directement sur l'instance.
const product = new MParticle.Product(
'Double Room - Econ Rate',
'econ-1',
100.00,
4
);
product.category = 'room';
product.brand = 'lodge-o-rama';
product.variant = 'standard';
2Summarize the transaction#
Créez un MParticle.TransactionAttributes pour les événements Purchase, Checkout, et CheckoutOption. Incluez les coupons de livraison et de commande lorsque c'est applicable — les coupons de commande appartiennent ici, pas sur les produits individuels.
const transactionAttributes = new MParticle.TransactionAttributes('ORDER-12345')
.setRevenue(149.99)
.setTax(12.50)
.setShipping(5.99)
.setCouponCode('SUMMER20');
3Log the commerce event#
Construisez un événement commercial avec MParticle.CommerceEvent.createProductActionEvent, en passant le type d'action de produit, votre ou vos produits, et (le cas échéant) le transactionAttributes. Ensuite, appelez MParticle.logCommerceEvent. Choisissez l'action du client que vous souhaitez enregistrer :
Enregistrez une vue de page de liste de produits (ou de catégorie) comme une impression de produit. Passez chaque produit visible en un seul appel, et définissez le nom de l'impression sur le nom de la liste / catégorie (Rokt utilise cela comme listname).
| Champ | Type | Requis | Description |
|---|---|---|---|
Name | string | oui | Nom de la liste ou de la catégorie (par exemple "Mens Running Shoes"). Devient listname. |
Products | array | oui | Objets produits de MParticle.Product. Définir position pour le rang indexé à partir de 1 de chaque article. |
currency | string | oui | Code de devise ISO 4217 (passé comme customAttribute au niveau de l'événement). |
import MParticle from 'react-native-mparticle';
const product = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
product.position = 1; // 1-indexed rank in the list
const impression = new MParticle.Impression('Mens Running Shoes', [product]);
const commerceEvent = MParticle.CommerceEvent.createImpressionEvent([impression]);
commerceEvent.currency = 'USD';
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsqu'un client ouvre une page de détail de produit.
| Champ | Type | Requis | Description |
|---|---|---|---|
productsku | string | oui | SKU du produit. |
productname | string | oui | Nom d'affichage. |
itemprice | decimal | oui | Prix unitaire au moment de la vue. |
currency | string | oui | Code de devise ISO 4217. |
listname | string | non | Définir si l'utilisateur est arrivé depuis un PLP. |
import MParticle from 'react-native-mparticle';
const product = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.ViewDetail,
[product],
);
commerceEvent.currency = 'USD';
commerceEvent.customAttributes = { 'listname': 'PLP-Running' };
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsqu'un client ajoute un article au panier.
| Champ | Type | Requis | Description |
|---|---|---|---|
productsku | string | oui | SKU du produit. |
quantity | integer | oui | Unités ajoutées. |
itemprice | decimal | oui | Prix unitaire au moment de l'ajout. |
currency | string | oui | Code de devise ISO 4217. |
couponCode | string | non | Coupon au niveau de la commande, si appliqué au moment de l'ajout. |
import MParticle from 'react-native-mparticle';
const product = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.AddToCart,
[product],
);
commerceEvent.currency = 'USD';
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsqu'un client retire un article du panier.
| Champ | Type | Requis | Description |
|---|---|---|---|
productsku | string | oui | SKU du produit. |
quantity | integer | oui | Unités retirées. |
currency | string | oui | Code de devise ISO 4217. |
import MParticle from 'react-native-mparticle';
const product = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.RemoveFromCart,
[product],
);
commerceEvent.currency = 'USD';
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsque le client arrive sur la page du panier. Étant donné que les vues de page du panier n'ont pas de ProductActionType natif, utilisez MParticle.Event avec le nom de l'événement "view_cart" et le type d'événement Other. Passez le contenu complet du panier comme attributs personnalisés.
| Champ | Type | Requis | Description |
|---|---|---|---|
event_name | string | oui | Toujours "view_cart". |
event_type | EventType | oui | Utilisez MParticle.EventType.Other. |
cartitems | string | oui | Tableau JSON sérialisé d'objets de ligne de panier. Utilisé pour la pertinence. |
cartitemcount | integer | oui | Nombre de lignes de panier. |
totalprice | decimal | oui | Total du panier. |
currency | string | oui | Code de devise ISO 4217. |
couponcode | string | non | Promo au niveau de la commande, si appliquée. |
Chaque entrée dans le tableau cartitems a la forme suivante :
| Field | Type | Description |
|---|---|---|
cartitemid | string | Stable partner-side cart-line identifier. Usually equals productsku when there is one line per SKU; use a unique value if you allow multiple lines for the same SKU (e.g. gift-wrap variants). |
productsku | string | Product SKU / stock identifier. |
productname | string | Product display name. |
productcategory | string | Product category / taxonomy leaf. |
productbrand | string | Product brand. |
productvariant | string | Variant identifier (size, color, etc.). |
itemprice | decimal | Per-unit price at event time. |
unitprice | decimal | Per-unit list price pre-discount. Omit if equal to itemprice. |
quantity | integer | Units in this line. |
currency | string | ISO 4217 code. Omit if matches the top-level currency. |
couponcode | string | Coupon applied to this line (if any). Order-level promos belong in transactionAttributes.Coupon. |
productposition | integer | 1-indexed rank of the product within a list or search results. |
import MParticle from 'react-native-mparticle';
const cartitems = [
{ cartitemid: 'SKU-001', productsku: 'SKU-001', productname: 'Trail Runner v3', itemprice: 129.95, quantity: 1 },
{ cartitemid: 'SKU-002', productsku: 'SKU-002', productname: 'Cushion Insole', itemprice: 19.95, quantity: 2 },
];
const event = new MParticle.Event()
.setName('view_cart')
.setType(MParticle.EventType.Other)
.setInfo({
cartitemcount: 3,
totalprice: 169.85,
currency: 'USD',
couponcode: 'SUMMER20',
cartitems: JSON.stringify(cartitems),
});
MParticle.logMPEvent(event);
Enregistrez lorsque le client entre dans le processus de paiement. Envoyez tous les produits du panier et un résumé de la transaction couvrant le total du panier et tout coupon au niveau de la commande.
| Champ | Type | Requis | Description |
|---|---|---|---|
cartitems | array | oui | Contenu complet du panier. |
totalprice | decimal | oui | Total du panier avant taxes/livraison. |
cartitemcount | integer | oui | Nombre de lignes du panier. |
currency | string | oui | Code de devise ISO 4217. |
couponCode | string | non | Promo au niveau de la commande, si appliquée. |
import MParticle from 'react-native-mparticle';
const product1 = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const product2 = new MParticle.Product('Cushion Insole', 'SKU-002', 19.95, 2);
const transactionAttributes = new MParticle.TransactionAttributes('YOUR_CHECKOUT_ID')
.setRevenue(169.85)
.setCouponCode('SUMMER20');
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.Checkout,
[product1, product2],
transactionAttributes,
);
commerceEvent.currency = 'USD';
commerceEvent.customAttributes = { cartitemcount: 3 };
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsque le client termine l'étape d'expédition. Définissez checkoutOption à "shipping" et passez la sélection d'expédition en tant qu'attributs personnalisés.
| Champ | Type | Requis | Description |
|---|---|---|---|
cartitems | array | oui | Contenu complet du panier. |
option | string | oui | Toujours "shipping" pour cet événement. |
shippingmethod | string | oui | standard / express / next_day. |
zipcode | string | oui | Code postal / ZIP d'expédition. |
country | string | oui | Code pays ISO 3166-1 alpha-2. |
totalprice | decimal | oui | Total du panier. |
currency | string | oui | Code de devise ISO 4217. |
import MParticle from 'react-native-mparticle';
const product1 = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const product2 = new MParticle.Product('Cushion Insole', 'SKU-002', 19.95, 2);
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.CheckoutOption,
[product1, product2],
);
commerceEvent.setCheckoutOptions('shipping');
commerceEvent.currency = 'USD';
commerceEvent.customAttributes = {
shippingmethod: 'express',
zipcode: '94103',
country: 'US',
totalprice: 169.85,
};
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsque le client termine l'étape de paiement. Définissez checkoutOption à "payment" et passez la méthode de paiement sélectionnée en tant qu'attributs personnalisés.
| Champ | Type | Requis | Description |
|---|---|---|---|
cartitems | array | oui | Contenu complet du panier. |
option | string | oui | Toujours "payment" pour cet événement. |
paymenttype | string | oui | credit_card / paypal / apple_pay / etc. |
payment_method | string | non | Méthode spécifique lorsque pertinent (par ex. marque de carte). |
paymentServiceProvider | string | non | Identifiant PSP (par ex. stripe). Doit être camelCase. |
ccbin | string | non | Premiers 6-8 chiffres de la carte, si une carte a été utilisée. |
totalprice | decimal | oui | Total du panier. |
currency | string | oui | Code de devise ISO 4217. |
import MParticle from 'react-native-mparticle';
const product1 = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const product2 = new MParticle.Product('Cushion Insole', 'SKU-002', 19.95, 2);
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.CheckoutOption,
[product1, product2],
);
commerceEvent.setCheckoutOptions('payment');
commerceEvent.currency = 'USD';
commerceEvent.customAttributes = {
paymenttype: 'credit_card',
payment_method: 'visa',
paymentServiceProvider: 'stripe',
ccbin: '424242',
totalprice: 169.85,
};
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsqu'une commande est confirmée. Envoyez le panier complet et un résumé de la transaction identifiant la commande, le revenu, la taxe, la livraison et tout coupon au niveau de la commande.
| Champ | Type | Requis | Description |
|---|---|---|---|
cartitems | array | oui | Contenu complet du panier au moment de la commande. |
transactionId | string | oui | Identifiant de commande / transaction. |
totalprice | decimal | oui | Total de la commande (Revenu). |
tax | decimal | oui | Taxe totale sur la commande. |
shipping | decimal | oui | Coût d'expédition. |
currency | string | oui | Code de devise ISO 4217. |
couponCode | string | non | Promotion au niveau de la commande, si appliquée. |
cartitemcount | integer | non | Nombre de lignes de panier. |
import MParticle from 'react-native-mparticle';
const product1 = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const product2 = new MParticle.Product('Cushion Insole', 'SKU-002', 19.95, 2);
const transactionAttributes = new MParticle.TransactionAttributes('ORDER-10482')
.setRevenue(169.85)
.setTax(14.20)
.setShipping(5.99)
.setCouponCode('SUMMER20');
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.Purchase,
[product1, product2],
transactionAttributes,
);
commerceEvent.currency = 'USD';
commerceEvent.customAttributes = { cartitemcount: 3 };
MParticle.logCommerceEvent(commerceEvent);
Enregistrez lorsqu'une commande (ou une ligne à l'intérieur) est remboursée. Envoyez uniquement les produits remboursés ainsi qu'un résumé de la transaction faisant référence à l'ID de commande original.
| Champ | Type | Requis | Description |
|---|---|---|---|
productsku | string | oui | SKU de la ou des lignes remboursées. |
quantity | integer | oui | Unités remboursées. |
transactionId | string | oui | ID de commande original contre lequel le remboursement est effectué. |
totalprice | decimal | oui | Montant remboursé. |
currency | string | oui | Code de devise ISO 4217. |
import MParticle from 'react-native-mparticle';
const refundedProduct = new MParticle.Product('Trail Runner v3', 'SKU-001', 129.95, 1);
const transactionAttributes = new MParticle.TransactionAttributes('ORDER-10482') // original order id
.setRevenue(129.95); // refunded amount
const commerceEvent = MParticle.CommerceEvent.createProductActionEvent(
MParticle.ProductActionType.Refund,
[refundedProduct],
transactionAttributes,
);
commerceEvent.currency = 'USD';
MParticle.logCommerceEvent(commerceEvent);
Suivez les événements personnalisés en utilisant MParticle.Event, en passant un nom d'événement, un type d'événement et des attributs personnalisés optionnels.
Afficher les types d'événements personnalisés
| Type | Utilisation pour |
|---|---|
MParticle.EventType.Navigation | Flux de navigation utilisateur et transitions d'écran au sein de votre application. |
MParticle.EventType.Location | Interactions et mouvements basés sur la localisation. |
MParticle.EventType.Search | Requêtes de recherche et actions liées à la recherche. |
MParticle.EventType.Transaction | Transactions financières et activités liées aux achats. |
MParticle.EventType.UserContent | Contenu généré par l'utilisateur comme des avis, commentaires ou publications. |
MParticle.EventType.UserPreference | Paramètres utilisateur, préférences et choix de personnalisation. |
MParticle.EventType.Social | Interactions sur les réseaux sociaux et activités de partage. |
MParticle.EventType.Other | Tout ce qui ne correspond pas aux catégories ci-dessus. |
import MParticle from 'react-native-mparticle';
const event = new MParticle.Event()
.setName('video_watched')
.setType(MParticle.EventType.Navigation)
.setInfo({ category: 'Destination Intro', title: 'Paris' });
MParticle.logMPEvent(event);
6. Show a Placement#
Appelez selectPlacements sur chaque écran de paiement et de confirmation où vous souhaitez que Rokt affiche du contenu. Incluez l'un des identifiants de page suivants pour spécifier le type d'écran et s'il s'agit d'un test ou d'une production:
stg.rokt.conf: A confirmation screen in a staging (or testing) environment.prod.rokt.conf: A confirmation screen in a production environment.stg.rokt.payments: A payments screen in a staging (or testing) environment.prod.rokt.payments: A payments screen in a production environment.
Appelez selectPlacements dès que l'écran se charge et une fois que tous les attributs pertinents sont disponibles. Passez au minimum email, firstname, lastname, billingzipcode, et confirmationref. Voir Attributs de placement pour la liste complète.
Pour les placements Pay+, incluez paymenttype et paymentServiceProvider dans l'appel selectPlacements sur chaque écran. paymentServiceProvider communique les méthodes de paiement disponibles sur l'écran de paiement; paymenttype communique la méthode avec laquelle l'utilisateur a payé.
Attributs de placementLien direct vers Attributs de placement
Passez ces attributs dans la carte attributes de selectPlacements. Fournissez toujours la valeur la plus récente — les attributs passés ici remplacent tout appel antérieur de setUserAttribute.
Afficher tous les attributs de placement
| Champ | Type | Description |
|---|---|---|
email | string | Email du client (non haché). Utilisé pour la résolution d'identité. |
firstname | string | Prénom du client. Utilisé pour la personnalisation. |
lastname | string | Nom de famille du client. Utilisé pour la personnalisation. |
mobile | string | Numéro de mobile du client au format E.164. Utilisé pour la résolution d'identité. |
confirmationref | string | Numéro de référence de commande / confirmation. Utilisé pour la pertinence et la déduplication. |
currency | string | Devise de la transaction (ISO 4217, par ex. USD, GBP, AUD). Utilisé pour la pertinence. |
country | string | Code pays ISO 3166-1 alpha-2. Utilisé pour l'éligibilité et la pertinence. |
language | string | Langue préférée du client (ISO 639-1). Utilisé pour la pertinence. |
totalprice | decimal | Valeur totale du panier incluant taxes et frais de livraison. Utilisé pour la pertinence. |
amount | string | Sous-total du panier avant taxes et frais de livraison. Distinct de totalprice. Utilisé pour la pertinence. |
couponCode | string | Code promo appliqué à la commande, le cas échéant. Utilisé pour la pertinence. |
newcustomer | boolean | Indique si c'est un premier achat. Utilisé pour la pertinence. |
customertype | string | guest ou logged_in. Utilisé pour la pertinence. |
value | decimal | Valeur cumulative des achats du client (par ex. "2340.00"). Utilisé pour la pertinence. |
subscriptionstatus | string | État de l'abonnement si applicable (active, trial, churned, paused, none). Utilisé pour la pertinence et l'éligibilité. |
customersegment | string | Segmentation interne du partenaire (par ex. vip, at_risk, new, reactivated). Utilisé pour la pertinence. |
paymenttype | string | Méthode de paiement sélectionnée (credit_card, paypal, apple_pay, etc.). Utilisé pour l'éligibilité Pay+. |
paymentServiceProvider | string | Liste des méthodes de paiement acceptées sur la page, séparées par des virgules (par ex. applepay,paypal,cardpayment). Les valeurs doivent être en minuscules sans espaces. Voir Fournisseur de services de paiement pour la liste complète des valeurs acceptées. Utilisé pour l'éligibilité Pay+. |
ccbin | string | BIN de carte de crédit (6-8 chiffres). Utilisé pour la pertinence. |
billingname | string | Nom de facturation. Utilisé pour la résolution d'identité. |
billingaddress1 | string | Adresse de facturation. Utilisé pour la résolution d'identité et la pertinence. |
billingaddress2 | string | Appartement / unité de facturation. Utilisé pour la résolution d'identité. |
billingcity | string | Ville de facturation. Utilisé pour la pertinence. |
billingstate | string | État ou province de facturation. Utilisé pour la pertinence. |
billingzipcode | string | Code postal de facturation. Utilisé pour la résolution d'identité et la pertinence. |
shippingmethod | string | Méthode d'expédition sélectionnée (standard, express, next_day). Utilisé pour la pertinence. |
shippingname | string | Nom d'expédition. Utilisé pour la pertinence. |
shippingaddress1 | string | Adresse d'expédition. Utilisé pour la pertinence. |
shippingcity | string | Ville d'expédition. Utilisé pour la pertinence. |
shippingstate | string | État ou province d'expédition. Utilisé pour la pertinence. |
shippingzipcode | string | Code postal d'expédition. Utilisé pour la pertinence. |
shippingcountry | string | Pays d'expédition (ISO 3166-1 alpha-2). Utilisé pour la pertinence. |
cartItems | array | Tableau structuré d'objets de ligne de panier. Utilisé pour la pertinence. |
adsexperience | string | Passez "shoppable" lorsque vous ciblez délibérément une expérience Shoppable Ads. |
Les placements en superposition s'affichent au-dessus de votre écran de confirmation dans un conteneur géré par Rokt, ne nécessitant aucun changement à la mise en page existante de votre application.
Pour insérer un placement en superposition, appelez selectPlacements une fois que l'écran de confirmation est chargé :
import MParticle from 'react-native-mparticle';
const attributes = {
// Identity
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'mobile': '+13125551515',
// Transaction
'confirmationref': '54321',
'currency': 'USD',
'country': 'US',
'language': 'en',
'totalprice': '149.99',
'couponCode': 'SUMMER20',
// Customer context
'newcustomer': 'false',
'customertype': 'logged_in',
'value': '2340.00',
'subscriptionstatus': 'active',
'customersegment': 'vip',
// Payment (include paymenttype and paymentServiceProvider for Pay+)
'paymenttype': 'credit_card',
'paymentServiceProvider': 'cardpayment',
'ccbin': '411112',
// Billing address
'billingaddress1': '123 Main St',
'billingcity': 'Brooklyn',
'billingstate': 'NY',
'billingzipcode': '11201',
// Shipping
'shippingmethod': 'express',
'shippingaddress1': '175 Varick St',
'shippingcity': 'New York',
'shippingstate': 'NY',
'shippingzipcode': '10014',
'shippingcountry': 'US',
};
const roktConfig = MParticle.Rokt.createRoktConfig('light');
MParticle.Rokt.selectPlacements(
'RoktExperience', // identifier
attributes, // attributes map
{}, // placeholders (empty for overlay)
roktConfig, // configuration
);
Les placements intégrés s'affichent en ligne à une position fixe dans votre application que vous contrôlez (par exemple, au-dessus des options de paiement sur un écran de panier). Both Thanks et Pay+ utilisent des placements intégrés, mais Pay+ doit utiliser des placements intégrés.
1Add RoktLayoutView to your view hierarchy#
Placez un RoktLayoutView dans votre écran à la position où vous souhaitez que le placement s'affiche. Associez-lui un ref afin de pouvoir résoudre son identifiant de nœud natif lors de l'appel de selectPlacements.
2Resolve the node handle and call selectPlacements#
Résolvez l'identifiant de nœud natif avec findNodeHandle, construisez vos attributs, et passez placeholders à selectPlacements. Déclenchez cela lorsque l'écran intégré est prêt à afficher des offres.
import React, { ComponentRef } from 'react';
import { findNodeHandle } from 'react-native';
import MParticle, { RoktLayoutView } from 'react-native-mparticle';
const placeholder1 = React.createRef<ComponentRef<typeof RoktLayoutView>>();
const showRoktLayout = () => {
const placeholders = {
RoktEmbedded1: findNodeHandle(placeholder1.current),
};
const attributes = {
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'billingzipcode': '90210',
'confirmationref': '54321',
};
MParticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
placeholders,
);
};
// Integrate the RoktLayoutView in the view hierarchy
<RoktLayoutView ref={placeholder1} placeholderName="RoktEmbedded1" />
Pour une approche déclarative utilisant le composant RoktLayoutView sans gérer manuellement les identifiants de nœud, voir Appendice B : composant RoktLayoutView.
Pour les placements Pay+, incluez paymenttype et paymentServiceProvider dans l'appel selectPlacements sur chaque écran. paymentServiceProvider communique les méthodes de paiement disponibles sur l'écran de paiement ; paymenttype communique la méthode avec laquelle l'utilisateur a payé.
Les placements interstitiels sont rendus entre les écrans de paiement et de confirmation, permettant aux clients d'acheter des produits supplémentaires. Les placements interstitiels sont utilisés par les publicités Shoppable Ads.
Les placements interstitiels sont pris en charge uniquement sur iOS dans le SDK React Native+. Le chemin Android de ce SDK+ ne prend pas en charge les placements interstitiels. Le code ci-dessous doit être invoqué uniquement sur le chemin iOS de votre application.
Pour activer les placements interstitiels sur iOS, assurez-vous d'abord que la configuration spécifique à iOS est complète :
- Configurez Apple Pay pour votre application iOS — créez un identifiant de marchand Apple Pay, configurez votre projet Xcode et générez un certificat de traitement des paiements en suivant Apple Pay — configuration iOS.
- Enregistrez
RoktPaymentExtensiondans votreAppDelegateReact Native iOS aprèsMParticle.sharedInstance().start()et avantselectShoppableAds. Le fragment d'enregistrement est inclus dans le code d'initialisation iOS à l'étape 2. Si aucune extension de paiement n'est enregistrée, les publicités Shoppable Ads peuvent déclencher un événementPlacementFailure.
Si vous utilisez Expo, incluez le kit Rokt dans votre plugin de configuration (par exemple iosKits: ["mParticle-Rokt"] dans app.json). Le plugin de configuration n'ajoute pas automatiquement l'enregistrement de l'extension de paiement — après expo prebuild, ajoutez-le au AppDelegate généré sur le même chemin de lancement que l'initialisation mParticle, et réappliquez-le si vous régénérez des projets natifs avec --clean.
Puis appelez selectShoppableAds depuis votre couche JavaScript React Native avec l'identifiant de l'écran de confirmation. La méthode retourne une promesse et rend l'expérience Shoppable Ads comme une superposition — aucun espace réservé intégré n'est requis. Sur iOS, le SDK+ le rend lorsqu'une offre éligible est disponible.
import { Platform } from 'react-native';
import MParticle from 'react-native-mparticle';
// Interstitial placements are iOS only — do not invoke on Android
if (Platform.OS === 'ios') {
const attributes = {
// Identity
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'mobile': '+13125551515',
// Transaction
'confirmationref': '54321',
'currency': 'USD',
'country': 'US',
'language': 'en',
'totalprice': '149.99',
'amount': '137.50',
// Customer context
'newcustomer': 'false',
'customertype': 'logged_in',
'value': '2340.00',
// Payment
'paymenttype': 'credit_card',
'paymentServiceProvider': 'cardpayment',
'ccbin': '411112',
// Billing address
'billingaddress1': '123 Main St',
'billingcity': 'Brooklyn',
'billingstate': 'NY',
'billingzipcode': '11201',
// Shipping (required for Shoppable Ads order fulfillment)
'shippingaddress1': '175 Varick St',
'shippingcity': 'New York',
'shippingstate': 'NY',
'shippingzipcode': '10014',
'shippingcountry': 'US',
};
const roktConfig = MParticle.Rokt.createRoktConfig('system');
// selectShoppableAds returns a Promise; listen for native Rokt events for purchase outcomes
MParticle.Rokt.selectShoppableAds(
'prod.rokt.conf', // use 'stg.rokt.conf' in test environments
attributes,
roktConfig,
).catch((error) => console.debug(error));
}
Abonnez-vous aux événements CartItemInstantPurchase et aux événements Shoppable Ads associés via l'API Events pour gérer les flux d'achat initiés depuis l'expérience interstitielle.
Fonctions optionnellesLien direct vers Fonctions optionnelles
| Fonction | Objectif |
|---|---|
MParticle.Rokt.close() | Fermeture automatique des placements de superposition. |
Configuration supplémentaireLien direct vers Configuration supplémentaire
Transmettez des paramètres optionnels tels que RoktConfig pour personnaliser l'interface utilisateur du placement (par exemple, mode sombre/clair, mise en cache).
import MParticle from 'react-native-mparticle';
const roktConfig = MParticle.Rokt.createRoktConfig(
'light',
MParticle.Rokt.createCacheConfig(1200, { 'email': 'j.smith@example.com', 'orderNumber': '123' }),
);
MParticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
{},
roktConfig,
);
Si vous souhaitez mettre à jour l'identifiant RoktExperience ou l'identifiant intégré RoktEmbedded1 avec une valeur différente, contactez votre gestionnaire de compte Rokt pour vous assurer que les placements Rokt sont configurés de manière cohérente.
Events APILien direct vers Events API
Le SDK+ fournit des événements de cycle de vie des emplacements via le mécanisme NativeEventEmitter.
import { NativeEventEmitter } from 'react-native';
import MParticle from 'react-native-mparticle';
const eventManagerEmitter = new NativeEventEmitter(MParticle.RoktEventManager);
eventManagerEmitter.addListener('RoktEvents', data => {
console.log(`event received ${JSON.stringify(data)}`);
});
Événements standardsLien direct vers Événements standards
Afficher tous les événements standards
| Événement | Description | Paramètres |
|---|---|---|
| ShowLoadingIndicator | Déclenché avant que le SDK+ n'appelle le backend Rokt. | |
| HideLoadingIndicator | Déclenché lorsque le SDK+ reçoit un succès ou un échec du backend Rokt. | |
| PlacementInteractive | Déclenché lorsqu'un emplacement a été rendu et est interactif. | placementId: String |
| PlacementReady | Déclenché lorsqu'un emplacement est prêt à être affiché mais n'a pas encore rendu de contenu. | placementId: String |
| OfferEngagement | Déclenché lorsque l'utilisateur interagit avec l'offre. | placementId: String |
| PositiveEngagement | Déclenché lorsque l'utilisateur interagit positivement avec l'offre. | placementId: String |
| FirstPositiveEngagement | Déclenché lorsque l'utilisateur interagit positivement avec l'offre pour la première fois. | placementId: String |
| OpenUrl | Déclenché lorsque l'utilisateur appuie sur une URL qui est configurée pour être envoyée à l'application partenaire. | placementId: String, url: String |
| PlacementClosed | Déclenché lorsqu'un emplacement est fermé par l'utilisateur. | placementId: String |
| PlacementCompleted | Déclenché lorsque la progression de l'offre atteint la fin et qu'il n'y a plus d'offres à afficher. Également déclenché lorsque le cache est atteint mais que le placement récupéré ne sera pas affiché car il a été précédemment rejeté. | placementId: String |
| PlacementFailure | Déclenché lorsqu'un placement n'a pas pu être affiché en raison d'une défaillance ou lorsqu'aucun placement n'est disponible à afficher. | placementId: String (optionnel) |
| CartItemInstantPurchase | Déclenché lorsque l'achat d'un article du catalogue est initié par l'utilisateur (iOS uniquement). | placementId: String, cartItemId: String, catalogItemId: String, currency: String, description: String, linkedProductId: String, totalPrice: number, quantity: number, unitPrice: number |
7. Appendix#
Annexe A : Configuration de l'applicationLien direct vers Annexe A : Configuration de l'application
Les applications peuvent passer des paramètres de configuration via RoktConfig pour que le SDK+ utilise la configuration personnalisée de votre application au lieu des paramètres par défaut du système.
Objet ColorModeLien direct vers Objet ColorMode
| Valeur | Description |
|---|---|
light | L'application est en mode clair |
dark | L'application est en mode sombre |
system | L'application utilise le mode couleur du système par défaut |
EdgeToEdgeDisplay (Android uniquement)Lien direct vers EdgeToEdgeDisplay (Android uniquement)
Ce booléen contrôle si le SDK+ Rokt s'affiche en mode bord à bord sur Android (par défaut true). Réglez sur false si votre application ne prend pas en charge l'affichage bord à bord.
import com.mparticle.rokt.RoktConfig
val roktConfig = RoktConfig.Builder()
.edgeToEdgeDisplay(true)
.build()
Objet CacheConfigLien direct vers Objet CacheConfig
| Paramètre | Description |
|---|---|
cacheDuration | Durée optionnelle en secondes pendant laquelle le SDK+ Rokt doit mettre en cache l'expérience. La valeur maximale autorisée est de 90 minutes ; la valeur par défaut est de 90 minutes si non fournie ou invalide. |
cacheAttributes | Attributs optionnels à utiliser comme clé de cache. Si null, tous les attributs envoyés dans selectPlacements seront utilisés comme clé de cache. |
import MParticle from 'react-native-mparticle';
// Cache the experience for 1200 seconds, using email and orderNumber as the cache key.
const roktConfig = MParticle.Rokt.createRoktConfig(
'light',
MParticle.Rokt.createCacheConfig(
1200,
{ 'email': 'j.smith@example.com', 'orderNumber': '123' }
),
);
MParticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
{},
roktConfig,
);
Annexe B : Composant RoktLayoutViewLien direct vers Annexe B : Composant RoktLayoutView
Pour les placements intégrés, le SDK+ React Native fournit le composant RoktLayoutView pour une approche déclarative de l'intégration des placements Rokt dans la hiérarchie de vues de votre application. RoktLayoutView prend en charge les types de placements intégrés sans avoir besoin de gérer manuellement les poignées de nœuds.
import React from 'react';
import { findNodeHandle, View } from 'react-native';
import MParticle, { RoktLayoutView } from 'react-native-mparticle';
const MyConfirmationScreen = () => {
const placeholder1 = React.createRef();
const handleSelectPlacements = () => {
const placeholders = {
RoktEmbedded1: findNodeHandle(placeholder1.current),
};
const attributes = {
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'billingzipcode': '90210',
'confirmationref': '54321',
};
MParticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
placeholders,
);
};
return (
<View>
{/* Your confirmation screen content */}
<RoktLayoutView ref={placeholder1} placeholderName="RoktEmbedded1" />
</View>
);
};
ParamètresLien direct vers Paramètres
| Paramètre | Type | Description |
|---|---|---|
ref | Ref | Référence React utilisée pour obtenir la poignée de nœud natif pour la carte de l'espace réservé. |
placeholderName | string | L'identifiant de la vue intégrée (par exemple, "RoktEmbedded1"), doit correspondre à la clé dans la carte des espaces réservés passée à selectPlacements. |
Appendice C : Gestion des erreursLien direct vers Appendice C : Gestion des erreurs
L'API IDSync est conçue pour être centrale dans l'état de votre application et est conçue pour être rapide et hautement disponible. De la même manière que votre application peut empêcher les utilisateurs de se connecter, de se déconnecter ou de modifier leur état sans connexion Internet — traitez ces API comme des opérations de contrôle pour maintenir un état utilisateur cohérent. Le SDK+ ne réessaiera pas automatiquement les appels API, mais fournit des API de rappel pour que vous puissiez le faire selon votre logique métier.
Si vous n'implémentez pas de gestion des erreurs, vous pourriez rencontrer des problèmes de cohérence des données à grande échelle.
import MParticle from 'react-native-mparticle';
const request = new MParticle.IdentityRequest();
request.email = 'j.smith@example.com';
MParticle.Identity.identify(request, (error, userId) => {
if (error) {
// Inspect error.code to determine the cause:
// - Network errors: retry the request
// - Throttle errors (429): retry with backoff
console.debug('Identity error:', error);
} else {
// Proceed with the identified user
const user = new MParticle.User(userId);
user.setUserAttribute('firstname', 'Jane');
}
});
Codes d'erreur iOSLien direct vers Codes d'erreur iOS
Sur iOS, l'énumération native MPIdentityErrorResponseCode définit les codes côté client suivants. Inspectez error.code dans le rappel natif onIdentifyComplete pour déterminer la cause :
MPIdentityErrorResponseCode | Description |
|---|---|
MPIdentityErrorResponseCodeRequestInProgress | Une requête HTTP IDSync n'a pas été effectuée car une est déjà en cours. |
MPIdentityErrorResponseCodeClientSideTimeout | La requête HTTP IDSync a échoué en raison d'un délai d'attente de connexion TCP. |
MPIdentityErrorResponseCodeClientNoConnection | La requête HTTP IDSync a échoué en raison d'un manque de couverture réseau. |
MPIdentityErrorResponseCodeSSLError | La requête HTTP IDSync a échoué en raison d'un problème de configuration SSL. |
MPIdentityErrorResponseCodeOptOut | La requête HTTP IDSync n'a pas été effectuée car le SDK+ est désactivé en raison d'un désabonnement. |
MPIdentityErrorResponseCodeUnknown | La requête HTTP IDSync a échoué en raison d'une erreur inconnue. |
En plus des codes côté client ci-dessus, error.code peut contenir un code de statut HTTP généré par le serveur :
| Valeur | Description |
|---|---|
| 400 | L'appel HTTP IDSync a échoué en raison d'un corps de requête invalide. Inspectez les détails de l'erreur pour plus d'informations. |
| 401 | L'appel HTTP IDSync a échoué en raison d'une erreur d'authentification. Vérifiez que votre clé API est correcte. |
| 403 | L'appel HTTP IDSync a échoué car cette opération n'est pas provisionnée pour votre compte. Contactez votre gestionnaire de compte Rokt pour l'activer. |
| 429 | L'appel HTTP IDSync a été limité et doit être réessayé avec un backoff exponentiel. Cela peut indiquer une "touche de raccourci" utilisateur ou une implémentation incorrecte entraînant un volume IDSync plus élevé que prévu. |
| 5xx | L'appel HTTP IDSync a échoué en raison d'un problème côté serveur Rokt. Contactez votre représentant de compte pour plus d'informations. |
Codes d'erreur AndroidLien direct vers Codes d'erreur Android
Sur Android, l'API IDSync renvoie toujours le code de statut HTTP et le corps de la réponse HTTP sous-jacente. Pour les échecs côté client (appareil hors ligne, délai d'attente, requête invalide), le SDK+ renvoie IdentityApi.UNKNOWN_ERROR. Pour le throttling (HTTP 429), il renvoie IdentityApi.THROTTLE_ERROR. Gérez les deux dans votre écouteur d'échec :
MParticle.getInstance()?.Identity()?.identify(identifyRequest)
?.addFailureListener { identityHttpResponse ->
if (identityHttpResponse?.httpCode == IdentityApi.UNKNOWN_ERROR) {
// Device is likely offline — retry the request
} else if (identityHttpResponse?.httpCode == IdentityApi.THROTTLE_ERROR) {
// Throttled (429) — retry with backoff
}
}
Appendice D : Transmission de l'ID de session du web vers le natifLien direct vers Appendice D : Transmission de l'ID de session du web vers le natif
Lorsque le parcours d'un utilisateur s'étend à la fois sur les plateformes web et natives, vous pouvez maintenir une session Rokt cohérente en transmettant l'ID de session du Web SDK+ au React Native SDK+. Cela est utile pour les flux hybrides où les utilisateurs effectuent une action dans une WebView (comme une page de paiement) et retournent à l'application native pour confirmation.
Obtention de l'ID de session depuis le Web SDK+Lien direct vers Obtention de l'ID de session depuis le Web SDK+
Après avoir appelé selectPlacements, l'ID de session est disponible dans le contexte de sélection :
const selection = await launcher.selectPlacements({
identifier: "checkout",
attributes: {
email: "user@example.com",
// ... other attributes
}
});
const sessionId = await selection.context.sessionId;
The session ID is a unique GUID assigned to the current user journey. It is useful for debugging and for correlating a user's activity across your web and native surfaces.
Transmission à l'application native via un lien profondLien direct vers Transmission à l'application native via un lien profond
Transmettez l'ID de session à votre application native en utilisant un lien profond :
const deepLink = `myapp://confirmation?sessionId=${encodeURIComponent(sessionId)}`;
window.location.href = deepLink;
Définition de l'ID de sessionLien direct vers Définition de l'ID de session
Extrayez l'ID de session du lien profond dans votre code de plateforme native et transmettez-le au SDK+ avant d'appeler selectPlacements. Gérez cela dans votre AppDelegate natif (iOS) ou Activity (Android) avant que la couche React Native ne se charge :
import { Linking } from 'react-native';
import MParticle from 'react-native-mparticle';
// Listen for incoming deep links
Linking.addEventListener('url', ({ url }) => {
const sessionId = new URL(url).searchParams.get('sessionId');
if (sessionId) {
void MParticle.Rokt.setSessionId(sessionId);
}
});
RemarquesLien direct vers Remarques
- Appelez
setSessionIdavantselectPlacementspour vous assurer que la session est utilisée. - Les chaînes vides sont ignorées et ne mettront pas à jour la session.
- Encodez toujours l'ID de session en URL lorsque vous le transmettez en tant que paramètre de requête.
8. Test Your Integration#
Pour confirmer que le SDK+ s'initialise et que les événements sont correctement enregistrés :
1Enable verbose SDK+ logging#
Activez la journalisation détaillée du SDK+ avant l'initialisation pour voir ce qui est envoyé.
// For iOS verbose logging, add to your Swift AppDelegate:
// MParticle.sharedInstance().logLevel = .verbose
// For Android verbose logging, add to your Application class before MParticle.start():
// MParticle.setLogLevel(MParticle.LogLevel.VERBOSE)
2Build and run against a development key#
Construisez et exécutez votre application avec l'environnement défini sur Development.
3Trigger selectPlacements#
Déclenchez selectPlacements sur l'écran où le placement doit être rendu et confirmez que le placement se charge.
4Verify events#
Vérifiez que les événements sont enregistrés et que l'appel identifyRequest réussit.
TroubleshootingLien direct vers Troubleshooting
Si le placement ne s'affiche pas ou si les événements n'apparaissent pas, vérifiez la console native (Xcode pour iOS, Logcat pour Android) pour les erreurs du SDK+ Rokt. Problèmes courants :
Erreurs d'initialisationLien direct vers Erreurs d'initialisation
- Confirmez que la clé et le secret dans votre initialisation native correspondent aux valeurs de votre gestionnaire de compte Rokt.
- Confirmez que l'appel du SDK+ natif
starts'exécute avant tout appelselectPlacementsou de journalisation d'événements. - Pour les publicités Shoppable sur iOS, confirmez que
RoktPaymentExtensionest enregistré aprèsstart()et avantselectShoppableAds.
Erreurs d'identitéLien direct vers Erreurs d'identité
Si le rappel d'identité se déclenche avec une erreur, consultez Gestion des erreurs pour les codes d'erreur et les conseils de nouvelle tentative. Sans gestion des erreurs, vous pourriez rencontrer des problèmes de cohérence des données à grande échelle.
Placement non affichéLien direct vers Placement non affiché
- Confirmez que le placement
identifier(par exempleRoktExperience) correspond à ce que votre gestionnaire de compte Rokt a configuré. - Pour les placements intégrés, confirmez que l'identifiant de la vue intégrée (par exemple
RoktEmbedded1) correspond àplaceholderNamesur le composantRoktLayoutView. - Vérifiez que la carte des attributs contient au moins
email,firstname,lastname,billingzipcode, etconfirmationref. - Pour les placements interstitiels, confirmez
Platform.OS === 'ios'avant d'appelerselectShoppableAds— les placements interstitiels ne sont pas pris en charge sur Android.