Cette page a été traduite automatiquement et peut contenir des inexactitudes. Pour signaler une erreur de traduction, utilisez le module de commentaires en bas de la table des matières, à droite de la page.
Enregistrer des événements eCommerce
Découvrez comment enregistrer des événements eCommerce recommandés via le SDK Android de Braze à l’aide de classes d’événements typées et de Braze.logEcommerceEvent. Pour les schémas de propriétés d’événements, les fonctionnalités de la plateforme et la validation à l’ingestion, consultez Événements recommandés et Validation des événements et résolution des problèmes.

Remarque
Pour les SDK wrapper non répertoriés, utilisez la méthode native Android correspondante à la place.
Le SDK Android 42.3.0+ fournit des classes d’événements eCommerce typées avec validation côté client au moment de la construction et sérialisation automatique en snake_case lorsque vous appelez Braze.logEcommerceEvent.
| Classe Android |
Nom de l’événement |
Notes |
ProductViewedEvent |
ecommerce.product_viewed |
Aplatit les champs du produit au niveau supérieur de properties (pas de tableau products). Cette classe ne prend pas en charge la propriété type de niveau supérieur pour les déclencheurs de catalogue. Si vous avez besoin de type, utilisez logCustomEvent ou la REST API. |
CartUpdatedEvent |
ecommerce.cart_updated |
Utilisez CartUpdatedAction (ADD, REMOVE, REPLACE) pour la propriété action. |
CheckoutStartedEvent |
ecommerce.checkout_started |
|
OrderPlacedEvent |
ecommerce.order_placed |
Prend en charge les paramètres facultatifs cartId, totalDiscounts et discounts. |

Important
ecommerce.order_cancelled et ecommerce.order_refunded ne sont pas disponibles en tant que classes typées du SDK Android. Enregistrez-les avec logCustomEvent ou la REST API.
Blocs de construction partagés
EcommerceProduct : éléments de ligne pour les événements de panier, de paiement et de commande.
- Requis :
productId, productName, variantId, price, quantity (Long non négatif)
- Facultatif :
imageUrl, productUrl, metadata
BrazeProperties : metadata au niveau de l’événement ou du produit. Les clés doivent être des chaînes de caractères non vides d’au maximum 255 caractères sans signe dollar ($) en début de chaîne.
Validation côté client
Les payloads invalides lèvent une IllegalArgumentException lorsque vous construisez la classe d’événement, de sorte que l’événement n’est jamais mis en file d’attente. Règles courantes :
| Champ ou règle |
Validation |
ID et noms de type chaîne (product_id, product_name, variant_id, cart_id, checkout_id, order_id, source, URL facultatives) |
Non vide, jusqu’à 255 caractères |
price, total_value, total_discounts |
Doit être supérieur ou égal à 0 |
currency |
Code ISO 4217 valide (nettoyé et converti en majuscules par le SDK) |
products (événements de panier, paiement, commande) |
Au moins un EcommerceProduct |
quantity (par produit) |
Entier non négatif |
Au moment de l’envoi, si les propriétés sérialisées dépassent la limite de taille du SDK, logEcommerceEvent enregistre une erreur et n’envoie pas l’événement.
Exemples de code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.ProductViewedEvent
val metadata = BrazeProperties()
.addProperty("sku", "SS-R-101")
.addProperty("category", "Apparel")
val productViewedEvent = ProductViewedEvent(
productId = "PROD101",
productName = "Silk Scarf",
variantId = "SCARF_RED_SILK",
price = 150.00,
currency = "EUR",
source = "https://braze-fashion.eu",
imageUrl = "https://braze-fashion.eu/images/scarf_red.jpg",
productUrl = "https://braze-fashion.eu/products/scarf",
metadata = metadata,
)
Braze.getInstance(context).logEcommerceEvent(productViewedEvent)
|
Définissez action à l’aide de CartUpdatedAction :
| Valeur |
Valeur transmise |
Description |
CartUpdatedAction.ADD |
add |
Augmenter la quantité ou ajouter une ligne. |
CartUpdatedAction.REMOVE |
remove |
Diminuer la quantité ; supprimer la ligne à 0. |
CartUpdatedAction.REPLACE |
replace |
Remplacer l’intégralité du panier (par défaut). |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| import com.braze.Braze
import com.braze.models.recommended.ecommerce.CartUpdatedAction
import com.braze.models.recommended.ecommerce.CartUpdatedEvent
import com.braze.models.recommended.ecommerce.EcommerceProduct
val product = EcommerceProduct(
productId = "SKU-RUN-4821",
productName = "Ultraboost Running Shoe",
variantId = "UB-BLK-11",
price = 189.99,
quantity = 1,
)
val cartUpdatedEvent = CartUpdatedEvent(
cartId = "cart_abc123",
currency = "USD",
source = "android",
totalValue = 189.99,
products = listOf(product),
action = CartUpdatedAction.ADD,
)
Braze.getInstance(context).logEcommerceEvent(cartUpdatedEvent)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.CheckoutStartedEvent
import com.braze.models.recommended.ecommerce.EcommerceProduct
val products = listOf(
EcommerceProduct(
productId = "SKU-RUN-4821",
productName = "Ultraboost Running Shoe",
variantId = "UB-BLK-11",
price = 189.99,
quantity = 1,
),
)
val checkoutStartedEvent = CheckoutStartedEvent(
checkoutId = "chk_88291",
currency = "USD",
source = "android",
totalValue = 234.96,
products = products,
cartId = "cart_abc123",
metadata = BrazeProperties().addProperty("checkout_url", "https://www.example.com/checkout/chk_88291"),
)
Braze.getInstance(context).logEcommerceEvent(checkoutStartedEvent)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.EcommerceProduct
import com.braze.models.recommended.ecommerce.OrderPlacedEvent
val products = listOf(
EcommerceProduct(
productId = "SKU-RUN-4821",
productName = "Ultraboost Running Shoe",
variantId = "UB-BLK-11",
price = 189.99,
quantity = 1,
),
)
val orderPlacedEvent = OrderPlacedEvent(
orderId = "ord_77821",
currency = "USD",
source = "android",
totalValue = 224.96,
products = products,
cartId = "cart_abc123",
totalDiscounts = 10.0,
discounts = listOf(
mapOf("code" to "SPRING10", "amount" to 10.0, "type" to "percentage"),
),
metadata = BrazeProperties().addProperty("order_status_url", "https://www.example.com/orders/ord_77821/status"),
)
Braze.getInstance(context).logEcommerceEvent(orderPlacedEvent)
|
Braze ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_cancelled.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import org.json.JSONArray
import org.json.JSONObject
val properties = BrazeProperties(
JSONObject()
.put("order_id", "ord_77821")
.put("total_value", 224.96)
.put("currency", "USD")
.put("cancel_reason", "customer_request")
.put("source", "android")
.put(
"products",
JSONArray().put(
JSONObject()
.put("product_id", "SKU-RUN-4821")
.put("product_name", "Ultraboost Running Shoe")
.put("variant_id", "UB-BLK-11")
.put("quantity", 1)
.put("price", 189.99),
),
),
)
Braze.getInstance(context).logCustomEvent("ecommerce.order_cancelled", properties)
|
Braze ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_refunded.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import org.json.JSONArray
import org.json.JSONObject
val properties = BrazeProperties(
JSONObject()
.put("order_id", "ord_77821")
.put("total_value", 189.99)
.put("currency", "USD")
.put("source", "android")
.put(
"products",
JSONArray().put(
JSONObject()
.put("product_id", "SKU-RUN-4821")
.put("product_name", "Ultraboost Running Shoe")
.put("variant_id", "UB-BLK-11")
.put("quantity", 1)
.put("price", 189.99),
),
),
)
Braze.getInstance(context).logCustomEvent("ecommerce.order_refunded", properties)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.ProductViewedEvent;
BrazeProperties metadata = new BrazeProperties()
.addProperty("sku", "SS-R-101")
.addProperty("category", "Apparel");
ProductViewedEvent productViewedEvent = new ProductViewedEvent(
/* productId */ "PROD101",
/* productName */ "Silk Scarf",
/* variantId */ "SCARF_RED_SILK",
/* price */ 150.00,
/* currency */ "EUR",
/* source */ "https://braze-fashion.eu",
/* imageUrl */ "https://braze-fashion.eu/images/scarf_red.jpg",
/* productUrl */ "https://braze-fashion.eu/products/scarf",
/* metadata */ metadata
);
Braze.getInstance(context).logEcommerceEvent(productViewedEvent);
|
Définissez action à l’aide de CartUpdatedAction :
| Valeur |
Valeur transmise |
Description |
CartUpdatedAction.ADD |
add |
Augmenter la quantité ou ajouter une ligne. |
CartUpdatedAction.REMOVE |
remove |
Diminuer la quantité ; supprimer la ligne à 0. |
CartUpdatedAction.REPLACE |
replace |
Remplacer l’intégralité du panier (par défaut). |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| import com.braze.Braze;
import com.braze.models.recommended.ecommerce.CartUpdatedAction;
import com.braze.models.recommended.ecommerce.CartUpdatedEvent;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import java.util.Collections;
EcommerceProduct product = new EcommerceProduct(
/* productId */ "SKU-RUN-4821",
/* productName */ "Ultraboost Running Shoe",
/* variantId */ "UB-BLK-11",
/* price */ 189.99,
/* quantity */ 1
);
CartUpdatedEvent cartUpdatedEvent = new CartUpdatedEvent(
/* cartId */ "cart_abc123",
/* currency */ "USD",
/* source */ "android",
/* totalValue */ 189.99,
/* products */ Collections.singletonList(product),
/* metadata */ null,
/* action */ CartUpdatedAction.ADD
);
Braze.getInstance(context).logEcommerceEvent(cartUpdatedEvent);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.CheckoutStartedEvent;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import java.util.Collections;
EcommerceProduct product = new EcommerceProduct(
/* productId */ "SKU-RUN-4821",
/* productName */ "Ultraboost Running Shoe",
/* variantId */ "UB-BLK-11",
/* price */ 189.99,
/* quantity */ 1
);
BrazeProperties metadata = new BrazeProperties()
.addProperty("checkout_url", "https://www.example.com/checkout/chk_88291");
CheckoutStartedEvent checkoutStartedEvent = new CheckoutStartedEvent(
/* checkoutId */ "chk_88291",
/* currency */ "USD",
/* source */ "android",
/* totalValue */ 234.96,
/* products */ Collections.singletonList(product),
/* cartId */ "cart_abc123",
/* metadata */ metadata
);
Braze.getInstance(context).logEcommerceEvent(checkoutStartedEvent);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import com.braze.models.recommended.ecommerce.OrderPlacedEvent;
import java.util.Collections;
EcommerceProduct product = new EcommerceProduct(
/* productId */ "SKU-RUN-4821",
/* productName */ "Ultraboost Running Shoe",
/* variantId */ "UB-BLK-11",
/* price */ 189.99,
/* quantity */ 1
);
BrazeProperties metadata = new BrazeProperties()
.addProperty("order_status_url", "https://www.example.com/orders/ord_77821/status");
OrderPlacedEvent orderPlacedEvent = new OrderPlacedEvent(
/* orderId */ "ord_77821",
/* currency */ "USD",
/* source */ "android",
/* totalValue */ 224.96,
/* products */ Collections.singletonList(product),
/* cartId */ "cart_abc123",
/* totalDiscounts */ 10.0,
/* discounts */ null,
/* metadata */ metadata
);
Braze.getInstance(context).logEcommerceEvent(orderPlacedEvent);
|
Braze ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_cancelled.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import org.json.JSONArray;
import org.json.JSONObject;
Braze.getInstance(context).logCustomEvent(
"ecommerce.order_cancelled",
new BrazeProperties(new JSONObject()
.put("order_id", "ord_77821")
.put("total_value", 224.96)
.put("currency", "USD")
.put("cancel_reason", "customer_request")
.put("source", "android")
.put("products", new JSONArray()
.put(new JSONObject()
.put("product_id", "SKU-RUN-4821")
.put("product_name", "Ultraboost Running Shoe")
.put("variant_id", "UB-BLK-11")
.put("quantity", 1)
.put("price", 189.99)))));
|
Braze ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_refunded.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import org.json.JSONArray;
import org.json.JSONObject;
Braze.getInstance(context).logCustomEvent(
"ecommerce.order_refunded",
new BrazeProperties(new JSONObject()
.put("order_id", "ord_77821")
.put("total_value", 189.99)
.put("currency", "USD")
.put("source", "android")
.put("products", new JSONArray()
.put(new JSONObject()
.put("product_id", "SKU-RUN-4821")
.put("product_name", "Ultraboost Running Shoe")
.put("variant_id", "UB-BLK-11")
.put("quantity", 1)
.put("price", 189.99)))));
|
Enregistrement manuel avec logCustomEvent
Pour enregistrer manuellement un événement recommandé, appelez logCustomEvent avec le nom exact de l’événement (par exemple, ecommerce.product_viewed) et un payload BrazeProperties ou JSONObject construit manuellement. Le SDK ne valide pas les schémas d’événements recommandés pour les appels manuels. Braze valide ces payloads lors de l’ingestion :
- Les payloads valides sont traités comme des événements recommandés avec un post-traitement complet.
- Les payloads invalides (champs requis manquants, types incorrects, propriétés de niveau supérieur supplémentaires) sont rejetés après l’ingestion. Les échecs apparaissent dans le journal de traitement SDK de l’espace de travail et dans l’e-mail récapitulatif des échecs.
Utilisez logEcommerceEvent autant que possible afin de détecter les données invalides avant qu’elles ne quittent l’application. Pour l’utilisation générale de logCustomEvent, consultez Enregistrer des événements personnalisés.