> For the complete documentation index, see [llms.txt](https://academy.gopersonal.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.gopersonal.ai/developers/google-analytics/apps.md).

# Apps

Para el trackeo de GA4 de personalizaciones y search es necesario que la app incluya el sdk de **react-native-firebase**.

`import analytics from '@react-native-firebase/analytics';`

### Recomendaciones

Para medir correctamente las recomendaciones, se deben enviar eventos en dos momentos clave: cuando el cliente visualiza el widget y cuando interactúa con él.

**1. Visualización del widget**

Cuando el cliente ve el widget, se debe enviar el evento **`view_item_list`**, incluyendo:

* Nombre de la personalización
* Ítems recomendados

`await analytics().logEvent(event, params)`

Donde:

event: **`view_item_list`**

```
{
   "item_list_name": `Gopersonal - ${contentName}`,
   items: [
      {
        "item_list_name": `Gopersonal - ${contentName}`,
        "item_id: item.id,
        item_sku: item.sku || '',
        item_sku_list: item.sku_list || [],
        item_parent_id: item.parent_id || '',
        item_name: item.name || '',
        price: item.price,
        item_category: item.category || '',
        item_brand: item.brand || '',
        index: parseInt(index) + 1,
        quantity: 1"
      },
      ...
   ] 
}
```

**2. Click en un ítem del widget**

Cuando el cliente hace click en un ítem, se debe enviar el evento **`select_item`**, incluyendo:

* Nombre de la personalización
* Ítem seleccionado
* Posición dentro del listado

`await analytics().logEvent(event, params)`

Donde:

event: **`select_item`**

```
{
   "item_list_name": `Gopersonal - ${contentName}`,
   items: [
      {
        "item_list_name": `Gopersonal - ${contentName}`,
        "item_id: item.id,
        item_sku: item.sku || '',
        item_sku_list: item.sku_list || [],
        item_parent_id: item.parent_id || '',
        item_name: item.name || '',
        price: item.price,
        item_category: item.category || '',
        item_brand: item.brand || '',
        index: parseInt(index) + 1,
        quantity: 1"
      }
   ] 
}
```

**OBS**: Para el evento `select_item` tb se envia items como array con un solo item.

{% hint style="warning" %}
**IMPORTANTE:**

Estos eventos son estandares de Ecommerce. Igualmente, pueden existir implementaciones custom que hacen que se deban enviar en otro formato. En estos casos revisar como se envían los eventos view\_item\_list y select\_item (por ejemplo al elegir una categoría y al seleccionar un item ahí)
{% endhint %}

### Otras personalizaciones

Para otras personalizaciones usar:

`await analytics().logEvent(event, params)` definiendo con el cliente que es lo que necesita validar en GA4. Existen eventos estandares como **`view_promotion`** y **`select_promotion`** que suelen ser utilizados.

### Search

Para el seguimiento de búsquedas, se deben enviar eventos en tres momentos clave: cuando el usuario realiza una búsqueda, cuando se muestran los resultados y cuando interactúa con ellos.

**1. Búsqueda realizada**

Cuando el usuario ejecuta una búsqueda, se debe enviar el evento **`search`**, incluyendo:

* `search_term`: término buscado
* `search_results_count`: cantidad de resultados obtenidos
* `search_type`: tipo de búsqueda
* `search_id`: identificador de la búsqueda
* `occasion_search`: indicador de búsqueda por ocasión (si aplica)

Usar `await analytics().logEvent(event, params)`

event: **`search`**

```
{
          search_term: query,
          event_category: 'gopersonal_search',
          search_type: search_type,
          results_count: resultsCount,
          search_id: search_id,
          occasion_search: occasion_search,
        }
```

**2. Visualización de resultados**

Cuando se muestran los resultados de búsqueda, se debe enviar el evento **`view_item_list`**, incluyendo:

* `item_list_name`: `'Gopersonal - Search Results'`
* `items`: listado de productos mostrados (formateados para GA4)

Usar `await analytics().logEvent(event, params)`

event: **`view_item_list`**

<pre><code><strong>{
</strong><strong>      item_list_name: 'Gopersonal - Search Results',
</strong>      items: products.map((product, index) => ({
              item_id: product.id,
              item_name: product.name,
              price: product.price,
              item_category: product.category,
              item_brand: product.brand,
              item_list_name: 'Gopersonal - Search Results',
              index: index + 1,
<strong>           ))
</strong>}
</code></pre>

**3. Click en un resultado**

Cuando el usuario hace click en un producto desde los resultados de búsqueda, se debe enviar el evento **`select_item`**, incluyendo:

* `item_list_name`: `'Gopersonal - Search Results'`
* `items`: producto seleccionado (formateado para GA4)

Usar `await analytics().logEvent(event, params)`

event: **`select_item`**

```typescript
{

item_list_name: 'Gopersonal - Search Results',
          items: [{
            item_id: product.id,
            item_name: product.name,
            price: product.price,
            item_category: product.category,
            item_brand: product.brand,
            item_list_name: 'Gopersonal - Search Results'
          }],
}
```

{% hint style="warning" %}
**IMPORTANTE:**

Estos eventos son estandares de Ecommerce. Igualmente, pueden existir implementaciones custom que hacen que se deban enviar en otro formato. En estos casos revisar como se envían los eventos view\_item\_list y select\_item (por ejemplo al elegir una categoría y al seleccionar un item ahí)
{% endhint %}
