# Apps

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

`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:&#x20;

event: **`view_item_list`**&#x20;

```
{
   "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:&#x20;

event: **`select_item`**&#x20;

```
{
   "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.&#x20;

{% hint style="warning" %}
**IMPORTANTE:**&#x20;

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í)  &#x20;
{% endhint %}

### Otras personalizaciones

Para otras personalizaciones usar:&#x20;

&#x20;`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)`&#x20;

event: **`search`**&#x20;

```
{
          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)`&#x20;

event: **`view_item_list`**&#x20;

<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)`&#x20;

event: **`select_item`**&#x20;

```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:**&#x20;

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í)  &#x20;
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://academy.gopersonal.ai/developers/google-analytics/apps.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
