Rastreo de e-commerce
Los SDK de Joryio incluyen rastreo de e-commerce integrado para la interacción con productos, la actividad de los carritos y las transacciones de compra. El rastreador funciona igual en todas las plataformas: los mismos métodos, los mismos nombres de evento estándar y la misma semántica de propiedades; solo cambia la sintaxis del lenguaje.
Elige tu plataforma en cualquiera de los ejemplos de código de abajo; la elección se sincroniza en toda la página. Para instalación y configuración, consulta las guías de plataforma: SDK web, SDK de iOS, SDK de Android, SDK de React Native. React Native no tiene un rastreador dedicado: su pestaña muestra las llamadas Joryio.track() equivalentes (consulta React Native más abajo).
Convención de nombres de ID
Joryio usa una convención clara para los identificadores:
| Tu ID | Descripción | Ejemplo |
|---|---|---|
productId | Tu identificador de producto (SKU o ID de producto de tu plataforma de e-commerce). | "SKU-12345" |
orderId | Tu identificador de pedido (número de pedido de tu plataforma). | "ORD-2024-001" |
userId | Tu identificador de usuario (enviado a identify()). | "user-123" |
Usa tus propios identificadores con naturalidad: no necesitas prefijos especiales.
Inicializar el rastreador de e-commerce
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Obtén el rastreador de e-commerce desde la instancia de tu SDK
// (joryio es la instancia creada con `new JoryioSDK({ sdkKey: ... })`)
const ecommerce = joryio.ecommerce({
currency: 'USD' // Moneda predeterminada para todos los eventos
});
// Obtén el rastreador de e-commerce con la moneda predeterminada
let ecommerce = Joryio.shared.ecommerce(config: EcommerceConfig(currency: "USD"))
import io.joryio.sdk.ecommerce.*
// Obtén el rastreador de e-commerce con la moneda predeterminada
val ecommerce = Joryio.getInstance().ecommerce(EcommerceConfig(currency = "USD"))
// El SDK de React Native no tiene un rastreador de e-commerce dedicado
// ni configuración de moneda a nivel de rastreador. Envía los mismos eventos
// estándar con Joryio.track() e incluye `currency` como propiedad en cada
// evento monetario.
import Joryio from '@joryio/react-native-sdk';
Rastrear vistas y búsquedas de producto
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Cuando el usuario ve una página de producto
ecommerce.viewProduct({
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
category: 'Clothing/T-Shirts',
brand: 'Acme Apparel',
imageUrl: 'https://example.com/images/blue-tshirt.jpg',
url: 'https://example.com/products/blue-tshirt'
});
// Cuando el usuario ve una página de categoría
ecommerce.viewCategory('tshirts', 'T-Shirts');
// Cuando el usuario realiza una búsqueda
ecommerce.search('blue shirts', 42); // consulta, número de resultados
// Registra la vista de producto
let product = EcommerceProduct(
productId: "SKU-12345",
name: "Classic Blue T-Shirt",
price: 29.99,
category: "Clothing",
brand: "Acme Apparel",
variant: "Size M",
sku: "BTS-001-M"
)
ecommerce.viewProduct(product)
// Registra la vista de categoría
ecommerce.viewCategory(categoryId: "cat_123", categoryName: "T-Shirts", properties: [
"sort_by": "popularity"
])
// Registra la búsqueda de producto
ecommerce.search(query: "blue shirts", resultCount: 42)
// Registra la vista de producto
val product = EcommerceProduct(
productId = "SKU-12345",
name = "Classic Blue T-Shirt",
price = 29.99,
category = "Clothing",
brand = "Acme Apparel",
variant = "Size M",
sku = "BTS-001-M"
)
ecommerce.viewProduct(product)
// Registra la vista de categoría
ecommerce.viewCategory(
categoryId = "cat_123",
categoryName = "T-Shirts",
properties = mapOf("sort_by" to "popularity")
)
// Registra la búsqueda de producto
ecommerce.search(query = "blue shirts", resultCount = 42)
// Cuando el usuario ve una página de producto
Joryio.track('Product Viewed', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
category: 'Clothing/T-Shirts',
brand: 'Acme Apparel',
image_url: 'https://example.com/images/blue-tshirt.jpg',
url: 'https://example.com/products/blue-tshirt',
currency: 'USD',
});
// Cuando el usuario ve una página de categoría
Joryio.track('Product List Viewed', {
category_id: 'tshirts',
category_name: 'T-Shirts',
});
// Cuando el usuario realiza una búsqueda
Joryio.track('Products Searched', {
query: 'blue shirts',
result_count: 42,
});
Rastrear actividad de carrito
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Añade un artículo al carrito
ecommerce.addToCart({
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
quantity: 1,
variantId: 'var-medium',
sku: 'BTS-001-M'
}, 59.98); // Opcional: valor actual del carrito
// Elimina un artículo del carrito
ecommerce.removeFromCart({
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99
}, 1); // cantidad que se eliminará
// Actualiza todo el carrito
ecommerce.updateCart([
{ productId: 'SKU-12345', name: 'Blue T-Shirt', price: 29.99, quantity: 2 },
{ productId: 'SKU-67890', name: 'Black Jeans', price: 49.99, quantity: 1 }
], 109.97); // matriz de artículos, valor total del carrito
// Añade un artículo al carrito
let cartItem = EcommerceCartItem(
productId: "SKU-12345",
name: "Classic Blue T-Shirt",
price: 29.99,
quantity: 2,
category: "Clothing"
)
ecommerce.addToCart(item: cartItem, cartValue: 59.98)
// Elimina del carrito
ecommerce.removeFromCart(product: product, quantity: 1)
// Actualiza el carrito
ecommerce.updateCart(items: [cartItem1, cartItem2], cartValue: 89.97)
// Añade un artículo al carrito
val cartItem = EcommerceCartItem(
productId = "SKU-12345",
name = "Classic Blue T-Shirt",
price = 29.99,
quantity = 2,
category = "Clothing"
)
ecommerce.addToCart(item = cartItem, cartValue = 59.98)
// Elimina del carrito
ecommerce.removeFromCart(product = product, quantity = 1)
// Actualiza el carrito
ecommerce.updateCart(items = listOf(cartItem1, cartItem2), cartValue = 89.97)
// Añade un artículo al carrito
Joryio.track('Product Added', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
quantity: 1,
variant_id: 'var-medium',
sku: 'BTS-001-M',
item_total: 29.99, // precio × cantidad
cart_value: 59.98,
currency: 'USD',
});
// Elimina un artículo del carrito
Joryio.track('Product Removed', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
quantity: 1,
currency: 'USD',
});
// Actualiza todo el carrito
Joryio.track('Cart Updated', {
items: [
{ product_id: 'SKU-12345', name: 'Blue T-Shirt', price: 29.99, quantity: 2 },
{ product_id: 'SKU-67890', name: 'Black Jeans', price: 49.99, quantity: 1 },
],
item_count: 3,
cart_value: 109.97,
currency: 'USD',
});
Rastrear el flujo de checkout
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Cuando el usuario inicia el checkout
ecommerce.startCheckout([
{ productId: 'SKU-12345', name: 'Blue T-Shirt', price: 29.99, quantity: 2 },
{ productId: 'SKU-67890', name: 'Black Jeans', price: 49.99, quantity: 1 }
], 109.97); // artículos, valor del carrito
// Cuando el usuario añade información de pago
ecommerce.addPaymentInfo('credit_card');
// Inicia el checkout
ecommerce.startCheckout(items: cartItems, cartValue: 59.98)
// Añade información de pago
ecommerce.addPaymentInfo(paymentMethod: "credit_card", properties: [
"card_type": "visa"
])
// Inicia el checkout
ecommerce.startCheckout(items = cartItems, cartValue = 59.98)
// Añade información de pago
ecommerce.addPaymentInfo(paymentMethod = "credit_card", properties = mapOf(
"card_type" to "visa"
))
// Cuando el usuario inicia el checkout
Joryio.track('Checkout Started', {
items: [
{ product_id: 'SKU-12345', name: 'Blue T-Shirt', price: 29.99, quantity: 2 },
{ product_id: 'SKU-67890', name: 'Black Jeans', price: 49.99, quantity: 1 },
],
item_count: 3,
value: 109.97,
currency: 'USD',
});
// Cuando el usuario añade información de pago
Joryio.track('Payment Info Entered', {
payment_method: 'credit_card',
});
Rastrear compras
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Cuando se completa el pedido
ecommerce.purchase({
orderId: 'ORD-2024-001',
items: [
{
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
quantity: 2,
category: 'Clothing',
brand: 'Acme'
},
{
productId: 'SKU-67890',
name: 'Black Jeans',
price: 49.99,
quantity: 1
}
],
value: 109.97,
currency: 'USD',
shipping: 5.99,
tax: 8.80,
discount: 10.00,
coupon: 'SAVE10'
});
// Completa la compra
let order = EcommerceOrder(
orderId: "ORD-2024-001",
items: cartItems,
value: 59.98,
currency: "USD",
shipping: 5.99,
tax: 4.80,
discount: 10.00,
coupon: "SAVE10"
)
ecommerce.purchase(order: order)
// Completa la compra
val order = EcommerceOrder(
orderId = "ORD-2024-001",
items = cartItems,
value = 59.98,
currency = "USD",
shipping = 5.99,
tax = 4.80,
discount = 10.00,
coupon = "SAVE10"
)
ecommerce.purchase(order)
// Cuando se completa el pedido
Joryio.track('Order Completed', {
order_id: 'ORD-2024-001',
items: [
{
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
quantity: 2,
category: 'Clothing',
brand: 'Acme',
},
{
product_id: 'SKU-67890',
name: 'Black Jeans',
price: 49.99,
quantity: 1,
},
],
item_count: 3,
value: 109.97,
currency: 'USD',
shipping: 5.99,
tax: 8.80,
discount: 10.00,
coupon: 'SAVE10',
});
El método purchase() exige que envíes los artículos del pedido explícitamente. El SDK no guarda el estado del carrito del lado cliente ni obtiene artículos automáticamente del carrito rastreado o del servidor. Así se garantiza la precisión, ya que la página o pantalla de confirmación conoce los artículos exactos que se compraron.
Rastrear cambios de estado de pedido
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Pedido enviado
ecommerce.orderFulfilled('ORD-2024-001', '1Z999AA10123456784', 'UPS');
// Pedido entregado
ecommerce.orderDelivered('ORD-2024-001');
// Pedido cancelado
ecommerce.orderCancelled('ORD-2024-001', 'Customer requested');
// Pedido reembolsado
ecommerce.orderRefunded('ORD-2024-001', 29.99, 'Product defective');
// Pedido completado (enviado)
ecommerce.orderFulfilled(orderId: "ORD-2024-001", trackingNumber: "1Z999AA10123456784", carrier: "UPS")
// Pedido entregado
ecommerce.orderDelivered(orderId: "ORD-2024-001")
// Pedido cancelado
ecommerce.orderCancelled(orderId: "ORD-2024-001", reason: "Customer requested cancellation")
// Pedido reembolsado
ecommerce.orderRefunded(orderId: "ORD-2024-001", refundAmount: 29.99, reason: "Product defective")
// Pedido completado (enviado)
ecommerce.orderFulfilled(orderId = "ORD-2024-001", trackingNumber = "1Z999AA10123456784", carrier = "UPS")
// Pedido entregado
ecommerce.orderDelivered(orderId = "ORD-2024-001")
// Pedido cancelado
ecommerce.orderCancelled(orderId = "ORD-2024-001", reason = "Customer requested cancellation")
// Pedido reembolsado
ecommerce.orderRefunded(orderId = "ORD-2024-001", refundAmount = 29.99, reason = "Product defective")
// Pedido enviado
Joryio.track('Order Fulfilled', {
order_id: 'ORD-2024-001',
tracking_number: '1Z999AA10123456784',
carrier: 'UPS',
});
// Pedido entregado
Joryio.track('Order Delivered', { order_id: 'ORD-2024-001' });
// Pedido cancelado
Joryio.track('Order Cancelled', {
order_id: 'ORD-2024-001',
reason: 'Customer requested',
});
// Pedido reembolsado
Joryio.track('Order Refunded', {
order_id: 'ORD-2024-001',
refund_amount: 29.99,
reason: 'Product defective',
});
Rastrear lista de deseos y compartidos
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Añade a la lista de deseos
ecommerce.addToWishlist({
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99
});
// Comparte el producto
ecommerce.shareProduct({
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt'
}, 'facebook'); // método para compartir
// Lista de deseos
ecommerce.addToWishlist(product: product)
ecommerce.removeFromWishlist(product: product)
// Comparte el producto
ecommerce.shareProduct(product: product, shareMethod: "twitter")
// Lista de deseos
ecommerce.addToWishlist(product)
ecommerce.removeFromWishlist(product)
// Comparte el producto
ecommerce.shareProduct(product, shareMethod = "twitter")
// Añade a la lista de deseos
Joryio.track('Product Added to Wishlist', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
currency: 'USD',
});
// Elimina de la lista de deseos
Joryio.track('Product Removed from Wishlist', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
});
// Comparte el producto
Joryio.track('Product Shared', {
product_id: 'SKU-12345',
name: 'Classic Blue T-Shirt',
share_method: 'facebook',
});
Rastrear cupones
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Cupón aplicado
ecommerce.applyCoupon('SAVE10', 10.00, 'percentage');
// Cupón eliminado
ecommerce.removeCoupon('SAVE10');
// Cupón
ecommerce.applyCoupon(couponCode: "SAVE10", discountAmount: 10.00, discountType: "percentage")
ecommerce.removeCoupon(couponCode: "SAVE10")
// Cupón
ecommerce.applyCoupon(couponCode = "SAVE10", discountAmount = 10.00, discountType = "percentage")
ecommerce.removeCoupon(couponCode = "SAVE10")
// Cupón aplicado
Joryio.track('Coupon Applied', {
coupon_code: 'SAVE10',
discount_amount: 10.00,
discount_type: 'percentage',
});
// Cupón eliminado
Joryio.track('Coupon Removed', { coupon_code: 'SAVE10' });
Rastrear reseñas
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Reseña de producto enviada
ecommerce.submitReview('SKU-12345', 5, 'Great quality shirt!');
// Reseña
ecommerce.submitReview(productId: "SKU-12345", rating: 5, reviewText: "Great product!")
// Reseña
ecommerce.submitReview(productId = "SKU-12345", rating = 5, reviewText = "Great product!")
// Reseña de producto enviada
Joryio.track('Product Reviewed', {
product_id: 'SKU-12345',
rating: 5,
review_text: 'Great quality shirt!',
});
Eventos estándar de e-commerce
El rastreador de e-commerce envía los mismos eventos estándar en todas las plataformas:
| Nombre de evento | Descripción |
|---|---|
Product Viewed | El usuario ve una página de producto. |
Product List Viewed | El usuario ve una página de categoría. |
Products Searched | El usuario busca productos. |
Product Added | Se añadió un artículo al carrito. |
Product Removed | Se eliminó un artículo del carrito. |
Cart Updated | Cambió el contenido del carrito. |
Checkout Started | El usuario inicia checkout. |
Payment Info Entered | El usuario añade un método de pago. |
Order Completed | Pedido completado. |
Order Fulfilled | Pedido enviado. |
Order Delivered | Pedido entregado. |
Order Cancelled | Pedido cancelado. |
Order Refunded | Pedido reembolsado. |
Product Added to Wishlist | Producto añadido a la lista de deseos. |
Product Removed from Wishlist | Producto eliminado de la lista de deseos. |
Product Shared | Producto compartido. |
Coupon Applied | Cupón aplicado. |
Coupon Removed | Cupón eliminado. |
Product Reviewed | Reseña de producto enviada. |
React Native
El SDK de React Native no incluye un rastreador de e-commerce dedicado. Las apps de React Native envían los mismos eventos estándar mediante Joryio.track(), usando los mismos nombres de evento y nombres de propiedad en tránsito que emiten los rastreadores de los otros SDK (los rastreadores convierten sus entradas camelCase en propiedades de evento snake_case en tránsito). La pestaña React Native de cada sección anterior muestra la llamada Joryio.track() equivalente para cada método del rastreador.
Siguientes pasos
- SDK web: instalación, configuración y referencia completa de API.
- SDK de iOS: integra el SDK de iOS.
- SDK de Android: integra el SDK de Android.
- SDK de React Native: integra el SDK de React Native.
- Eventos personalizados: rastrea eventos personalizados.
- API de e-commerce: integración de e-commerce del lado servidor.