
## Overview
---

Everything your customers do in your mobile application is recorded in the system in real time, queued and automatically sent in batches to Synerise. Information such as the source of the visit, the URL address they have visited, and the chain of actions that followed are saved in Synerise as events and their parameters.

The scope of information gathered about events is wide. Synerise collects predefined event parameters which can be extended according to the preferences and needs of the Synerise customers.

The basic information about the tracked events includes:

- **Action name** – an indicator of the activity type, such as `screen.view`
- **Label** – human-readable information about the activity, such as the page title. Must be at least one character. 
  
  <div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

  This is a deprecated field. It's not saved in the database. so it can't be used in Decision Hub or Automation Hub.

  </div></div></div>

- **Time** – the time when the event occurred
- **Customer identification** – an identifier of the customer who performed the activity
- **Parameters** – additional parameters, depending on the type of the event


  <details class="accordion"><summary>Click here to see example of an event</summary><div class="accordion-content"><pre><code class="language-json">{ "action": "screen.view", "eventUUID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "unique": null, "createDate": 1659456038993, "label": "PromotionViewScreen", "params": { "ip": "xx.xx.xxx.xxx", "source": "MOBILE_APP", "clientId": 1111111111, "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "eventUUID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "businessProfileId": 1234, "eventCreateTime": "2022-08-02T16:00:38.993Z", "time": 1659456038993, "modifiedBy": { "businessProfileApiKey": null, "clientApiKey": null, "clientId": null, "userId": null }, "clientId": 5790194467, } }</code></pre></div></details>




<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Some events are predefined, meaning they have a fixed set of fields that must be sent. For example, a `product.view` event must include the product ID.

</div></div></div>


You can [enrich events with data from catalogs in Synerise](/docs/assets/events/adding-event-parameters#enriching-events-with-data-from-catalogs), for example, a product or service event where only an ID has been provided can be enriched with other details such as the description, image URL, and more.

## Queue and flushing

As a compromise between how quick events are sent and battery life, events are collected into batches and _queued_ for sending (_flushing_) after enough events are collected or too much time passes (_timeout_), according to SDK settings.

Since Android SDK 5.17.0 and iOS SDK 4.17.0, the default settings flush the queue immediately when a push event is added to it.

You can change the queue size, timeout, list of events which trigger flushing, and other event tracking settings as described in the ["Tracker" section of the "Settings" article](/developers/mobile-sdk/settings#tracker).

To flush the queue on demand, use the following methods:
| OS           | Method                                                                                                                           |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| Android      | [Tracker.flush()](/developers/mobile-sdk/method-reference/android/tracking#flush-events-from-tracker)                           |
| iOS          | [flushEvents(completionHandler: (() -> Void)?)](/developers/mobile-sdk/method-reference/ios/tracking#flush-events-from-tracker) |
| React Native | [flushEvents(onSuccess: () => void)](/developers/mobile-sdk/method-reference/react-native/tracking#flush-events-from-tracker)   |
| Flutter      | [Synerise.tracker.flush()](/developers/mobile-sdk/method-reference/flutter/tracking#flush-events-from-tracker)                  |

## Events tracked automatically
---

### Auto-Tracking


<div class="admonition admonition-warning"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Automatic tracking is available only for **Android SDK** and **iOS SDK**. Auto-tracking is not supported for applications built with **Jetpack Compose** and **SwiftUI**. These applications should use [declarative tracking](#declarative-tracking).

</div></div></div>


Auto-tracking allows you to monitor each type of the customer activity in your mobile application and it is enabled by default. Every interaction (such as click, view, swipe) with any element in the application can be sent as an event to Synerise together with a collection of details concerning the event, which are available in the overview on [the profile's card](/docs/crm/crm-profile). The frequency and the kind of the tracked events are customizable, as you can switch on tracking a particular types of interactions.

#### Configuration {id=auto-tracking-configuration}

Auto-tracking events is:
- Enabled by default for Android.
- Disabled by default for iOS.
  
Available modes for auto-tracking:
- `DISABLED` - Listeners are disabled (**default mode for iOS SDK**).
- `PLAIN` - Listeners are set to track screen-visits only.
- `FINE` - Listeners are attached to nearly everything that is clickable in your app, including screen visits that record the [visited screen event](#customer-visited-a-screen) (**default mode for Android SDK**).

You may configure auto-tracking with various options to customize your expected behavior and track events you want. See possible configuration options below:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-577">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-577-0" data-tab-group="tabgrp-577" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-577-1" data-tab-group="tabgrp-577">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-577-2" data-tab-group="tabgrp-577">Swift</button><button class="tab-button" data-tab-id="tabgrp-577-3" data-tab-group="tabgrp-577">Objective-C</button></div>

<div class="tab-panel" data-tab-id="tabgrp-577-0" data-tab-group="tabgrp-577" data-tab-active="true">

```Java
Synerise.settings.tracker.autoTracking.enabled = false; // 1
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-577-1" data-tab-group="tabgrp-577">

```Kotlin
Synerise.settings.tracker.autoTracking.enabled = false; // 1
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-577-2" data-tab-group="tabgrp-577">

```Swift
Synerise.settings.tracker.autoTracking.enabled = true // 1
Synerise.settings.tracker.autoTracking.mode = .fine // 2
Synerise.settings.tracker.autoTracking.excludedClasses = [SNRSampleViewController.self] // 3
Synerise.settings.tracker.autoTracking.excludedViewTags = [1, 2] // 4
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-577-3" data-tab-group="tabgrp-577">

```Objective-C
SNRSynerise.settings.tracker.autoTracking.enabled = YES; // 1
SNRSynerise.settings.tracker.autoTracking.mode = SNRTrackerAutoTrackModeFine; // 2
SNRSynerise.settings.tracker.autoTracking.excludedClasses = @[SNRSampleViewController.class]; // 3
SNRSynerise.settings.tracker.autoTracking.excludedViewTags = @[@1, @2]; // 4
```

</div>
</div>


1. It enables/disables auto-tracking.
2. It sets auto-tracking mode.
3. It is an array of classes that you want to exclude from auto-tracking. 
4. It is an array of tag numbers for views that you want to exclude from auto-tracking.

#### Events from Auto-Tracking


<div class="content-tabs" data-tab-group="tabgrp-600">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-600-0" data-tab-group="tabgrp-600" data-tab-active="true">Android</button><button class="tab-button" data-tab-id="tabgrp-600-1" data-tab-group="tabgrp-600">iOS</button></div>

<div class="tab-panel" data-tab-id="tabgrp-600-0" data-tab-group="tabgrp-600" data-tab-active="true">

| Action name             | Description                                                                        | Label                                                         | Additional information tracked                                                                                                                                                             |
|--------------------|-----------------------------------------------------------------------------------------|---------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| screen.view        | This event is generated when any screen of a mobile app is displayed by a mobile app user.                                                         | Activity, Fragment names  (for example, `ProductDetailsFragment`)        |                                                                                                                                                                                            |
| screen.interaction | This event is generated every time a mobile app user interacts with any element of the application UI. | `viewText` or the name of control type  (if not able to read a value) | Depending on the UI element type tracked, Synerise automatically reads and passes any values that are set depending on type, such as: time, date, position, progress, state, value, or if the element has been selected. |

</div>

<div class="tab-panel" data-tab-id="tabgrp-600-1" data-tab-group="tabgrp-600">

Depending on the UI element type tracked, Synerise automatically reads and passes any values that are set depending on type, such as: time, date, position, progress, state, value, or if the element has been selected.

| Action name        | Description                                                                                           | Activity class                                                                        | Label                                                                   |
|--------------------|-------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| screen.view        | This event is generated when any screen of a mobile app is displayed by a mobile app user. | `UIViewController`                                                                    | View controllers name (for example, MyApp.ProductDetailsViewController) |
| screen.interaction | This event is generated every time a mobile app user interacts with any element of the application UI. | `UIButton` <br> `UISwitch` <br> `UISegmentedControl` <br> `UISlider` <br>  `UIStepper` <br>  `UIDatePicker` | `viewText` or name of control type (if not able to read value)          |

</div>
</div>


### Events tracked internally

In addition to declarative event tracking and Auto-Tracking, many events are generated by the SDK and the Synerise infrastructure.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Read more about all [Synerise events](/docs/assets/events/event-reference/default-events)

</div></div></div>


#### Lifecycle events

Some events are automatically generated by the SDK or backend as a result of the profile's activity.

| Action name | Source | Description |
|--------------------|--------------------|------------------|
| client.applicationStarted | **SDK** | A user opened the mobile application. This event contains additional info such as operating system, device model, the sdk version etc. |
| client.applicationCrashed | **SDK** | Report about a mobile application crash, with additional data for troubleshooting. |
| click.errorReceiver | **SDK** | The event is called when the SDK cannot start an intent because there is no attached Activity (`ActivityNotFoundException`). |
| session.start | **BACKEND** | A user opened the mobile application and a session was opened. The session ends when 30 minutes pass since the last activity. |
| session.end | **BACKEND** | 30 minutes passed since the last activity and the session was closed. |

In the following example of a`client.applicationStarted` event, the highlighted data is added automatically:


<div class="highlight-code-block" data-hl-lines="6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26">
<pre><code class="language-json">{
  "action": "client.applicationStarted",
  "eventUUID": "9f9f81ce-fb3d-432d-8f88-a4ce20ac3c0d",
  "label": "AppStarted",
  "params": {
    "deviceType": "SMARTPHONE", // SMARTPHONE or TABLET
    "deviceId": "B36535BD-7C80-4D90-A941-26CD4DB7FA7C",
    "osLanguage": "pl", // Language set in operating system
    "appVersionCode": "8", // Build number of the mobile app
    "systemPushConsent": "enabled", // System consent for push notifications
    "source": "MOBILE_APP",
    "networkType": "WIFI", // WIFI or CELL
    "cellCountry": "--",
    "deviceModel": "iPhone13,1", // Model of a device
    "os": "ios", // iOS or Android
    "applicationType": "UNKNOWN",
    "deviceRooted": "false",
    "applicationName": "SDK Sample App Swift",
    "appVersion": "4.16.0", // Version of the mobile app
    "cellCarrier": "--",
    "origin": "APP_STARTED",
    "deviceManufacturer": "Apple", // Manufacturer of a device
    "sdkVersion": "4.16.0", // SDK version in the mobile app
    "sdkPreviousVersion": "4.15.0", // SDK version previously installed in the mobile app
    "sdkPluginVersion": "1.2.0", // SDK plugin version in the mobile app (in hybrid apps, for example built with Flutter)
    "osVersion": "17.3.1", // OS version of a device
    "deviceId": "B36535BD-7C80-4D90-A941-26CD4DB7FA7C",
    "deviceResolution": "1080x2338", // Resolution of device screen
    (...)
  }
}</code></pre>
</div>


#### Profile events

Some events are automatically generated as a result of an action or interaction with the profile such as registration, authorizations, and more.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Check details of [profile's events](/docs/assets/events/event-reference/profiles).

</div></div></div>


| Action name | Source | Description |
|--------------------|--------------------|-----------------------------------------------------------------------------------------|
| client.anonymousLogin | **BACKEND** | An anonymous profile generated a new authentication token. |
| client.simpleAuthLogin | **BACKEND** | A user logged in with [Simple Profile Authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication) |
| client.register | **BACKEND** | A profile was registered successfully. This event is only generated for Registration-as-a-Service. |
| client.tryToLogInToInactiveAccount | **BACKEND** | A profile tried to log in to an inactive account. |
| client.login | **BACKEND** | A user logged in mobile application. This event is only generated for OAuth and Synerise Authentication (aka RaaS). |
| client.logout | **BACKEND** | A user logged out from the mobile application. By default, this event is generated only when you use Synerise Authentication (aka RaaS). |
| client.merge | **BACKEND** | Two or more profiles were merged into one. |
| profile.updated | **BACKEND** | A profile was updated. |

#### Push Notifications events

Some events are automatically generated as a result of an action or interaction of the profile with push notifications.


<div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

To ensure correct tracking of push notification events, you must [configure push notifications](/developers/mobile-sdk/configuring-push-notifications) first.

</div></div></div>



<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Check details of [push notification events](/docs/assets/events/event-reference/mobile-push).

</div></div></div>


| Action name | Source | Description |
|--------------------|--------------------|-----------------------------------------------------------------------------------------|
| push.view | **SDK** | A push notification was shown to the app user. |
| push.notView | **SDK** | A push notification was sent, but the device did not display it due to the `areNotificationsEnabled` setting on the device. This event is only generated for Android 7.0 or later. |
| push.click | **SDK** | A push notification was tapped. |
| push.button.click | **SDK** | **DEPRECATED** A button in a push notification was tapped. |
| push.openInApp | **SDK** | A push notification was tapped and the app was opened. This event is only generated for iOS. |
| push.dismiss | **SDK** | A push notification was dismissed. The event requires configuring [Notification Service Extension](/developers/mobile-sdk/configuring-push-notifications/ios#synerise-notification-service-extension) for full support. |
| push.imageTimeout | **SDK** | An image in a mobile push notification could not be loaded. |
| push.controlGroup | **BACKEND** | A mobile push notification was not sent because the recipient belongs to the control group. |
| push.send | **BACKEND** | A push notification was sent to a profile. |
| push.notSent | **BACKEND** | A push notification failed to be created by the backend. Usually occurs when notification encryption is enabled in your business profile, but your application did not generate a key pair. |
| push.capping | **BACKEND** | A push notification was not sent due to message limits set for this type of communication. |
| push.skipped | **BACKEND** | A push notification was not sent because Silence Hours were active. If the process of sending multiple messages overlaps with Silence Hours, sending is stopped in progress. |
| push.tokenUpdate | **BACKEND** | A Firebase registration token was updated in the Synerise system. |
| push.tokenDelete | **BACKEND** | A Firebase registration token was deleted when a backend tried to send a push notification. Usually occurs when it is a problem with user's token. |
| push.notRegistered | **BACKEND** | A push notification was not sent due to an invalid Firebase token. |
| push.invalidRegistrationId | **BACKEND** | A push notification was not sent due to an incorrectly assigned registrationId in Firebase. |
| push.mismatchSenderId | **BACKEND** | A push notification was not sent, because the Firebase project to which the profile was registered changed. |

In these events campaign data is always tracked. See specified part of `push.view` event below:


<div class="highlight-code-block" data-hl-lines="6,7,8,9">
<pre><code class="language-json">{
  "action": "push.view",
  "eventUUID": "eca5662f-ecfd-418a-af5c-e65ba10ca252",
  "label": "Test Simple Push",
  "params": {
    "id": "ecf5678d-c137-44d1-964f-83bc8d15511e", // Campaign ID
    "variantId": 11598412, // Variant ID of the campaign
    "campaignTitle": "Test Simple Push", // Campaign title
    "campaignType": "Mobile push", // Campaign type
    (...)
  }
}</code></pre>
</div>


#### In-App Messages events

Sort events are automatically generated as a result of an action or interaction with in-app messages by the user of the mobile app.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Read more about the details of [in-app messages events](/docs/assets/events/event-reference/inapp).

</div></div></div>


| Action name | Source | Description |
|--------------------|--------------------|-----------------------------------------------------------------------------------------|
| inApp.show | **SDK** | An in-app message was shown to the app user. |
| inApp.capping | **SDK** | An in-app message was not displayed due to [capping](/docs/campaign/in-app-messages/create-inapp-message#capping) or [frequency limits](/docs/campaign/in-app-messages/create-inapp-message#frequency). |
| inApp.click | **SDK** | The content of an in-app message was tapped. |
| inApp.controlGroup | **SDK** | An in-app message was not displayed because the recipient belongs to the control group. |
| inApp.discard | **SDK** | An in-app message was closed. |
| inApp.hide | **SDK** | An in-app message was hidden. |
| inApp.customHook | **SDK** | A custom action (implemented by your app developers and included in the in-app definition) from an in-app message was triggered. |
| inApp.renderFail | **SDK** / **BACKEND** | An in-app message was not displayed due to an error. This may be caused, for example, by an error in the Jinjava syntax or a connection problem. |

In these events campaign data is always tracked. See specified part of `inApp.show` event below:


<div class="highlight-code-block" data-hl-lines="6,7">
<pre><code class="language-json">{
  "action": "inApp.show",
  "eventUUID": "e982ed4d-9179-4bc3-9266-322ff4a8f2eb",
  "label": "In-app message was displayed in mobile app",
  "params": {
    "id": "83e13e0b-7930-4866-a2cf-088dcbe0b222", // Campaign ID
    "variantId": "c3bbfc16-a79e-474f-a255-ef7ee1333148", // Variant ID of the campaign
    (...)
  }
}</code></pre>
</div>


#### Other campaigns events

Other events are which automatically generated as a result of an action related to campaigns.

| Action name | Source | Description |
|--------------------|--------------------|-----------------------------------------------------------------------------------------|
| screen.content | **SDK** | A Screen View campaign was generated and fetched for the profile in the mobile app. It contains data with a sorted tree of the documents. |
| client.activatePromotion | **BACKEND** | A promotion was activated by the profile. |
| client.deactivatePromotion | **BACKEND** | A promotion was deactivated by the profile. |
| recommendation.generated | **BACKEND** | A recommendation set was generated for a profile. |
| recommendation.view | **SDK** | A recommendation frame was displayed to a user. The parameters may include a list of the items in the frame, depending on your implementation. Event from Content Widget. |
| recommendation.seen | **SDK** | A recommendation frame was displayed to a user. The parameters may include a list of the items in the frame, depending on your implementation. Event from Content Widget. |
| recommendation.click | **SDK** | A recommended item was clicked. Event from Content Widget. |
| product.like | **SDK** | The Content Widget includes a "like" button that was tapped by the user. |
| product.dislike | **SDK** | The Content Widget includes a "dislike" button that was tapped by the user. |

## Declarative tracking
---
Declarative tracking is a feature of our SDK that allows you to declare additional actions for tracking.

Product views, screen views, clicking a sign up button, contact with the call center, and more: you can implement anything and declarative tracking will help you to do that.


<div class="admonition admonition-warning"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" /></svg></div><div class="admonition-body"><div class="admonition-content">

DO NOT send `transaction.charge` events as custom events.<br>
Transactions must be tracked with these endpoints:
- [`/v4/transactions`](https://developers.synerise.com/DataManagement/DataManagement.html#operation/CreateATransaction) (single transaction)
- [`/v4/transactions/batch`](https://developers.synerise.com/DataManagement/DataManagement.html#operation/BatchAddOrUpdateTransactions) (multiple transactions)

</div></div></div>


### Basic custom event
In the most basic scenario, you can pass an event as in the examples below:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-578">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-578-0" data-tab-group="tabgrp-578" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-578-1" data-tab-group="tabgrp-578">Swift</button><button class="tab-button" data-tab-id="tabgrp-578-2" data-tab-group="tabgrp-578">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-578-3" data-tab-group="tabgrp-578">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-578-4" data-tab-group="tabgrp-578">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-578-0" data-tab-group="tabgrp-578" data-tab-active="true">

```Java
Tracker.send(new CustomEvent("my.action", "label"));
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-578-1" data-tab-group="tabgrp-578">

```Swift
let event: CustomEvent = CustomEvent(label: "label", action: "my.action")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-578-2" data-tab-group="tabgrp-578">

```Objective-C
SNRCustomEvent *event = [[SNRCustomEvent alloc] initWithLabel:@"label" action:@"my.action"];
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-578-3" data-tab-group="tabgrp-578">

```JavaScript
let event = new CustomEvent("label", "my.action", parameters);
Synerise.Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-578-4" data-tab-group="tabgrp-578">

```Dart
CustomEvent event = CustomEvent("label", "my.action", parameters);
Synerise.tracker.send(event)
```

</div>
</div>


Such events are passed to Synerise as the `CustomEvent` type, since the `action` can be anything that you want.


<div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

- The action name must follow the `context.action` convention. For example: `screen.view`, `product.buy`, `social.share`  
- The action name must be up to 32 characters long and must match the following regular expression:  
    ```
    ^[a-zA-Z0-9\.\-_]+$
    ```

</div></div></div>


### Custom events with more parameters

If you want to send more complex events, you can include additional parameters:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-579">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-579-0" data-tab-group="tabgrp-579" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-579-1" data-tab-group="tabgrp-579">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-579-2" data-tab-group="tabgrp-579">Swift</button><button class="tab-button" data-tab-id="tabgrp-579-3" data-tab-group="tabgrp-579">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-579-4" data-tab-group="tabgrp-579">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-579-5" data-tab-group="tabgrp-579">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-579-0" data-tab-group="tabgrp-579" data-tab-active="true">

```Java
TrackerParams params = new TrackerParams.Builder()
                .add("name", "John")
                .add("surname", "Rise")
                .add("company", "Synerise")
                .add("age", 25)
                .add("isGreat", true)
                .add("lastOrder", 384.28)
                .add("count", 0x7fffffffffffffffL)
                .add("someObject", new MySerializableObject())
                .build();
Tracker.send(new CustomEvent("my.action", "label", params));
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-579-1" data-tab-group="tabgrp-579">

```Kotlin
val params = TrackerParams.Builder()
.add("name", "John")
.add("surname", "Rise")
.add("company", "Synerise")
.add("age", 25)
.add("isGreat", true)
.add("lastOrder", 384.28)
.add("count", 0x7fffffffffffffffL)
.add("someObject", MySerializableObject())
.build()
Tracker.send(CustomEvent("my.action", "label", params))
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-579-2" data-tab-group="tabgrp-579">

```Swift
let parameters: TrackerParams = TrackerParams.make {
    builder in
    builder.setString("John", forKey: "name")
    builder.setString("Rise", forKey: "surname")
    builder.setString("Synerise", forKey: "company")
    builder.setInt(57, forKey: "age")
    builder.setBool(true, forKey: "isGreat")
    builder.setDouble(384.28, forKey: "lastOrder")
    builder.setInt(10, forKey: "count")
    builder.setObject(SampleObject(), forKey: "someObject")
}   

let event: CustomEvent = CustomEvent(label: "label", action: "my.action", params: parameters)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-579-3" data-tab-group="tabgrp-579">

```Objective-C
SNRTrackerParams *parameters = [SNRTrackerParams makeWithBuilder:^(SNRTrackerParamsBuilder *builder) {
    [builder setString:@"John" forKey:@"name"];
    [builder setString:@"Rise" forKey:@"surname"];
    [builder setString:@"Synerise" forKey:@"company"];
    [builder setInt:25 forKey:@"age"];
    [builder setBool:YES forKey:@"isGreat"];
    [builder setDouble:384.28 forKey:@"lastOrder"];
    [builder setInt:10 forKey:@"count"];
    [builder setObject:[SampleObject new] forKey:@"someObject"];
}];

SNRCustomEvent *event = [[SNRCustomEvent alloc] initWithLabel:@"label" action:@"my.action" andParams:parameters];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-579-4" data-tab-group="tabgrp-579">

```JavaScript
let parameters = {
  "name": "John",
  "surname": "Rise",
  "company": "Synerise",
  "age": 25,
  "lastOrder": 380.50
};

let event = new CustomEvent("label", "my.action", parameters);
Synerise.Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-579-5" data-tab-group="tabgrp-579">

```Dart
final parameters = <String, String>{
  "name": "Rise",
  "surname": "Rise",
  "company": "Synerise",
  "age": 25,
  "lastOrder": 380.50
};

CustomEvent event = CustomEvent("label", "my.action", parameters);
Synerise.tracker.send(event)
```

</div>
</div>



<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

The following keys are reserved and you can't send them: **modifiedBy**, **apiKey**, **eventUUID**, **ip**, **time**, **businessProfileId**. If you add them to an event, they are ignored.

</div></div></div>


### Predefined events

Synerise offers a set of predefined event types that require a minimum set of data for the backend.

They can be sent by using Setters as in the following example. The example uses the [Product viewed](#product-viewed) event.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-580">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-580-0" data-tab-group="tabgrp-580" data-tab-active="true">java</button><button class="tab-button" data-tab-id="tabgrp-580-1" data-tab-group="tabgrp-580">kotlin</button><button class="tab-button" data-tab-id="tabgrp-580-2" data-tab-group="tabgrp-580">Swift</button><button class="tab-button" data-tab-id="tabgrp-580-3" data-tab-group="tabgrp-580">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-580-4" data-tab-group="tabgrp-580">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-580-5" data-tab-group="tabgrp-580">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-580-0" data-tab-group="tabgrp-580" data-tab-active="true">

```java
TrackerParams params = new TrackerParams.Builder()
                .add("campaignHash", "4321")
                .add("campaignId", "1234")
                .build();
ProductViewEvent event = new ProductViewEvent(("Smartphone X", "SM-01-S", "Smartphone X”, params);
event.setCategory(“Smartphones”);
event.setUrl(“myapp://products/CM01-R");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-580-1" data-tab-group="tabgrp-580">

```kotlin
val params = TrackerParams.Builder()
.add("campaignHash", "4321")
.add("campaignId", "1234")
.build()
val event = ProductViewEvent(("Smartphone X"), "SM-01-S", "Smartphone X", params)
event.setCategory("Smartphones")
event.setUrl("myapp://products/CM01-R")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-580-2" data-tab-group="tabgrp-580">

```Swift
let parameters: TrackerParams = TrackerParams.make {
    builder in
    builder.setString("12345", forKey: "campaignId")
    builder.setString("campaign12345", forKey: "campaignHash")
}     
let event: ProductViewEvent = ProductViewEvent(label: "Smartphone X", productName: "Smartphone X", productID:"SM-01-S", params: parameters)
event.setCategory("Smartphones")
event.setURL(URL(string: "myapp://products/SM-01-S")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-580-3" data-tab-group="tabgrp-580">

```Objective-C
SNRTrackerParams *parameters = [SNRTrackerParams makeWithBuilder:^(SNRTrackerParamsBuilder *builder) {
    [builder setString:@"12345" forKey:@"campaignId"];
    [builder setString:@"campaign12345" forKey:@"campaignHash"];
}];

SNRProductViewEvent *event = [[SNRProductViewEvent alloc] initWithLabel:@"Smartphone X" productName:@"Smartphone X" productId:@"SM-01-S" andParams:parameters];
[event setCategory:@"Smartphones"];
[event setURL:[NSURL URLWithString:@"myapp://products/SM-01-S"]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-580-4" data-tab-group="tabgrp-580">

```JavaScript
let parameters = {
    "campaignHash": "1234",
    "campaignId": "1234"
};

let event = ProductViewEvent("Smartphone X", "Smartphone X", "SM-01-S", parameters);
event.setCategory("Smartphones");
event.setURL("myapp://products/SM-01-S");
Synerise.Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-580-5" data-tab-group="tabgrp-580">

```Dart
Map<String, dynamic> parameters = {
    "campaignHash": "1234",
    "campaignId": "1234",
  };

  var event = ProductViewEvent(
    "Smartphone X",
    "Smartphone X",
    "SM-01-S",
    parameters,
  );
  event.setCategory("Smartphones");
  event.setURL("myapp://products/SM-01-S");
  Synerise.tracker.send(event)
```

</div>
</div>



| **Android**     | **iOS**           | **React Native**        | **Flutter**                |
| --------------- | ----------------- | ----------------------- | ----------------------- |
| [Tracker.send(event)](/developers/mobile-sdk/method-reference/android/tracking#send-event) method |  [Tracker.send(_:)](/developers/mobile-sdk/method-reference/ios/tracking#send-event) method | [Synerise.Tracker.send(event)](/developers/mobile-sdk/method-reference/react-native/tracking#send-event)  method | [Synerise.tracker.send(event)](/developers/mobile-sdk/method-reference/flutter/tracking#send-event)  method |


## Predefined event list
---
The list contains the list of predefined events which you can implement.

### Customer registered
---
This event may be used if you do not use [Synerise registration/authentication](/developers/mobile-sdk/user-identification-and-authorization/overview) features and rely fully on your own mechanisms, but still want to gather events when a customer registers.

**Action name of the generated event**: client.register

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-581">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-581-0" data-tab-group="tabgrp-581" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-581-1" data-tab-group="tabgrp-581">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-581-2" data-tab-group="tabgrp-581">Swift</button><button class="tab-button" data-tab-id="tabgrp-581-3" data-tab-group="tabgrp-581">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-581-4" data-tab-group="tabgrp-581">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-581-5" data-tab-group="tabgrp-581">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-581-0" data-tab-group="tabgrp-581" data-tab-active="true">

```Java
RegisteredEvent event = new RegisteredEvent("label")
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-581-1" data-tab-group="tabgrp-581">

```Kotlin
val event = RegisteredEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-581-2" data-tab-group="tabgrp-581">

```Swift
let event: RegisteredEvent = RegisteredEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-581-3" data-tab-group="tabgrp-581">

```Objective-C
SNRRegisteredEvent *event = [[SNRRegisteredEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-581-4" data-tab-group="tabgrp-581">

```JavaScript
var object: Object = {
  user: 'John',
  lastName: 'Doe',
}

let registeredEvent = new RegisteredEvent('Auth label', object)


Synerise.Tracker.send(registeredEvent)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-581-5" data-tab-group="tabgrp-581">

```Dart
RegisteredEvent registeredEvent = RegisteredEvent('label', {});
Synerise.tracker.send(registeredEvent);
```

</div>
</div>



| OS           | Event                                                                                                                | Required fields |
|--------------|----------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [RegisteredEvent](/developers/mobile-sdk/class-reference/android/events#registeredevent)                            | Label           |
| iOS          | [RegisteredEvent](/developers/mobile-sdk/class-reference/ios/events#registeredevent)                                | Label           |
| React Native | [RegisteredEvent](/developers/mobile-sdk/class-reference/react-native/events#registeredevent)                       | Label           |
| Flutter      | [RegisteredEvent](/developers/mobile-sdk/class-reference/flutter/events#registeredevent)                            | Label           |

### Customer logged in event
---
This event may be used if you do not use [Synerise login/authentication](/developers/mobile-sdk/user-identification-and-authorization/overview) features and rely fully on your own mechanisms, but still want to gather events when a customer logs in.

**Action name of the generated event**: client.login

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/logged-in-event.png" alt="Logged in event" class="medium"><figcaption>Logged in event</figcaption></figure>

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-582">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-582-0" data-tab-group="tabgrp-582" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-582-1" data-tab-group="tabgrp-582">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-582-2" data-tab-group="tabgrp-582">Swift</button><button class="tab-button" data-tab-id="tabgrp-582-3" data-tab-group="tabgrp-582">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-582-4" data-tab-group="tabgrp-582">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-582-5" data-tab-group="tabgrp-582">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-582-0" data-tab-group="tabgrp-582" data-tab-active="true">

```Java
LoggedInEvent event = new LoggedInEvent("label")
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-582-1" data-tab-group="tabgrp-582">

```Kotlin
val event = LoggedInEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-582-2" data-tab-group="tabgrp-582">

```Swift
let event: LoggedInEvent = LoggedInEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-582-3" data-tab-group="tabgrp-582">

```Objective-C
SNRLoggedInEvent *event = [[SNRLoggedInEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-582-4" data-tab-group="tabgrp-582">

```JavaScript
var object: Object = {
user: 'John',
lastName: 'Doe',
 }


let loggedInEvent = new LoggedInEvent('Auth label', object)
Synerise.Tracker.send(loggedInEvent)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-582-5" data-tab-group="tabgrp-582">

```Dart
LoggedInEvent event = LoggedInEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                             | Required fields |
|--------------|-------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [LoggedInEvent](/developers/mobile-sdk/class-reference/android/events#loggedinevent)                             | Label           |
| iOS          | [LoggedInEvent](/developers/mobile-sdk/class-reference/ios/events#loggedinevent)                                 | Label           |
| React Native | [LoggedInEvent](/developers/mobile-sdk/class-reference/react-native/events#loggedinevent)                        | Label           |
| Flutter      | [LoggedInEvent](/developers/mobile-sdk/class-reference/flutter/events#loggedinevent)                             | Label           |


### Customer logged out
---
This event may be used if you do not use [Synerise login/authentication](/developers/mobile-sdk/user-identification-and-authorization/overview) features and rely fully on your own mechanisms, but still want to gather events when a customer logs out.

**Action name of the generated event**: client.logout

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-583">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-583-0" data-tab-group="tabgrp-583" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-583-1" data-tab-group="tabgrp-583">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-583-2" data-tab-group="tabgrp-583">Swift</button><button class="tab-button" data-tab-id="tabgrp-583-3" data-tab-group="tabgrp-583">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-583-4" data-tab-group="tabgrp-583">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-583-5" data-tab-group="tabgrp-583">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-583-0" data-tab-group="tabgrp-583" data-tab-active="true">

```Java
LoggedOutEvent event = new LoggedOutEvent("label")
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-583-1" data-tab-group="tabgrp-583">

```Kotlin
val event = LoggedOutEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-583-2" data-tab-group="tabgrp-583">

```Swift
let event: LoggedOutEvent = LoggedOutEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-583-3" data-tab-group="tabgrp-583">

```Objective-C
SNRLoggedOutEvent *event = [[SNRLoggedOutEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-583-4" data-tab-group="tabgrp-583">

```JavaScript
var object: Object = {
user: 'John',
lastName: 'Doe',
 }


let loggedOutEvent = new LoggedOutEvent('Auth label', object)
Synerise.Tracker.send(loggedOutEvent)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-583-5" data-tab-group="tabgrp-583">

```Dart
LoggedOutEvent event = LoggedOutEvent('label', {})
Synerise.tracker.send(event);
```

</div>
</div>



| OS           | Event                                                                                                               | Required fields |
|--------------|---------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [LoggedOutEvent](/developers/mobile-sdk/class-reference/android/events#loggedoutevent)                             | Label           |
| iOS          | [LoggedOutEvent](/developers/mobile-sdk/class-reference/ios/events#loggedoutevent)                                 | Label           |
| React Native | [LoggedOutEvent](/developers/mobile-sdk/class-reference/react-native/events#loggedoutevent)                        | Label           |
| Flutter      | [LoggedOutEvent](/developers/mobile-sdk/class-reference/flutter/events#loggedoutevent)                             | Label           |


### Product viewed
---
Use this event to track customer visits to a product in your mobile application.

**Action name of the generated event**: product.view

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/product-view-event.png" alt="Event sent when the mobile app user sees an item" class="medium"><figcaption>Event sent when the mobile app user sees an item</figcaption></figure>

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-584">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-584-0" data-tab-group="tabgrp-584" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-584-1" data-tab-group="tabgrp-584">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-584-2" data-tab-group="tabgrp-584">Swift</button><button class="tab-button" data-tab-id="tabgrp-584-3" data-tab-group="tabgrp-584">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-584-4" data-tab-group="tabgrp-584">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-584-5" data-tab-group="tabgrp-584">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-584-0" data-tab-group="tabgrp-584" data-tab-active="true">

```Java
ProductViewEvent event = new ProductViewEvent("label", "productId", "productName");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-584-1" data-tab-group="tabgrp-584">

```Kotlin
val event = ProductViewEvent("label", "productId", "productName")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-584-2" data-tab-group="tabgrp-584">

```Swift
let event: ProductViewedEvent = ProductViewedEvent(label: "LABEL", productName: "PRODUCT_NAME", productId: "12345", params: nil)
event.setCategory("PRODUCT_CATEGORY")
event.setURL(URL(string: "PRODUCT_URL")!)
event.setIsRecommended(true)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-584-3" data-tab-group="tabgrp-584">

```Objective-C
SNRProductViewedEvent *event = [[SNRProductViewedEvent alloc] initWithLabel:@"LABEL" productName:@"PRODUCT_NAME" productId:@"12345" andParams:nil];
[event setCategory:@"PRODUCT_CATEGORY"];
[event setURL:[NSURL URLWithString:@"PRODUCT_URL"]];
[event setIsRecommended:YES];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-584-4" data-tab-group="tabgrp-584">

```JavaScript
var object: Object = {
    campaign: 'Computer bargain',
    lastTo: 'December',
  }

let productEventTest = new ProductViewEvent('product view label', '1234', 'Computer', object)
Synerise.Tracker.send(productEventTest)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-584-5" data-tab-group="tabgrp-584">

```Dart
ProductViewedEvent event = ProductViewedEvent('label', 'productId', 'productName',{});
Synerise.tracker.send(event);
```

</div>
</div>



| OS           | Event                                                                                                                   | Required fields        |
|--------------|-------------------------------------------------------------------------------------------------------------------------|------------------------|
| Android      | [ProductViewEvent](/developers/mobile-sdk/class-reference/android/events#productviewevent)                             | Label, ProductId, Name |
| iOS          | [ProductViewedEvent](/developers/mobile-sdk/class-reference/ios/events#productviewedevent)                             | Label, ProductId, Name |
| React Native | [ProductViewedEvent](/developers/mobile-sdk/class-reference/react-native/events#productviewedevent)                    | Label, ProductId, Name |
| Flutter | [ProductViewedEvent](/developers/mobile-sdk/class-reference/flutter/events#productviewedevent)                    | Label, ProductId, Name |

### Product added to favorites
---
Use this event to track adding a product to favorites in your mobile application. 

**Action name of the generated event**: product.addToFavorite

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/add-to-favourites-event.png" alt="Event sent when a mobile app user adds an item to favorites" class="medium"><figcaption>Event sent when a mobile app user adds an item to favorites</figcaption></figure>

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-585">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-585-0" data-tab-group="tabgrp-585" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-585-1" data-tab-group="tabgrp-585">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-585-2" data-tab-group="tabgrp-585">Swift</button><button class="tab-button" data-tab-id="tabgrp-585-3" data-tab-group="tabgrp-585">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-585-4" data-tab-group="tabgrp-585">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-585-5" data-tab-group="tabgrp-585">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-585-0" data-tab-group="tabgrp-585" data-tab-active="true">

```Java
AddedToFavoritesEvent event = new AddedToFavoritesEvent("label");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-585-1" data-tab-group="tabgrp-585">

```Kotlin
val event = AddedToFavoritesEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-585-2" data-tab-group="tabgrp-585">

```Swift
let event: ProductAddedToFavoritesEvent = ProductAddedToFavoritesEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-585-3" data-tab-group="tabgrp-585">

```Objective-C
SNRProductAddedToFavoritesEvent *event = [[SNRProductAddedToFavoritesEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-585-4" data-tab-group="tabgrp-585">

```JavaScript
var object: Object = {
    product: 'computer',
    screenSize: 15,
  }

  let event = new AddedToFavouritesEvent('Hit Timer Event Label', object)

  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-585-5" data-tab-group="tabgrp-585">

```Dart
ProductAddedToFavoritesEvent event = ProductAddedToFavoritesEvent('label',{});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                           | Required fields                   |
|--------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
| Android      | [AddedToFavoritesEvent](/developers/mobile-sdk/class-reference/android/events#addedtofavoritesevent)                    | Label                             |
| iOS          | [ProductAddedToFavoritesEvent](/developers/mobile-sdk/class-reference/ios/events#productremovedfromcartevent)                  | Label                             |
| React Native | [ProductAddedToFavouritesEvent](/developers/mobile-sdk/class-reference/react-native/events#productaddedtofavoritesevent)       | Label                             |
| Flutter | [ProductAddedToFavouritesEvent](/developers/mobile-sdk/class-reference/flutter/events#productaddedtofavoritesevent)       | Label                             |



### Product added to cart
---
Use this event to track adding a product to a cart in your mobile application.

**Action name of the generated event**: product.addToCart

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/product-added-to-cart-event.png" alt="Event sent when a user adds an item to cart" class="medium"><figcaption>Event sent when a mobile app user adds an item to cart</figcaption></figure>

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-586">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-586-0" data-tab-group="tabgrp-586" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-586-1" data-tab-group="tabgrp-586">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-586-2" data-tab-group="tabgrp-586">Swift</button><button class="tab-button" data-tab-id="tabgrp-586-3" data-tab-group="tabgrp-586">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-586-4" data-tab-group="tabgrp-586">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-586-5" data-tab-group="tabgrp-586">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-586-0" data-tab-group="tabgrp-586" data-tab-active="true">

```Java
UnitPrice unitPrice = new UnitPrice(price, Currency.getInstance(Locale.US));
AddedToCartEvent event = new AddedToCartEvent("label", "sku", unitPrice, 1);
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-586-1" data-tab-group="tabgrp-586">

```Kotlin
val unitPrice = UnitPrice(price, Currency.getInstance(Locale.US))
val event = AddedToCartEvent("label", "sku", unitPrice, 1)
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-586-2" data-tab-group="tabgrp-586">

```Swift
let regularPrice: UnitPrice = UnitPrice(amount: 200)
let discountedPrice: UnitPrice = UnitPrice(amount: 100)
let finalPrice: UnitPrice = UnitPrice(amount: 100)

let event: ProductAddedToCartEvent = ProductAddedToCartEvent(label: "LABEL", sku: "SKU12345", finalPrice: finalPrice, quantity: 1)
event.setName("PRODUCT_NAME")
event.setCategory("PRODUCT_CATEGORY")
event.setCategories(["PRODUCT_CATEGORY_1", "PRODUCT_CATEGORY_2"])
event.setProducer("PRODUCT_PRODUCER")
event.setOffline(false)
event.setRegularPrice(regularPrice)
event.setDiscountedPrice(discountedPrice)
event.setURL(URL(string: "URL")!)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-586-3" data-tab-group="tabgrp-586">

```Objective-C
SNRProductAddedToCartEvent *event = [[SNRProductAddedToCartEvent alloc] initWithLabel:@"LABEL" sku:@"SKU12345" finalPrice:finalPrice quantity:1];
[event setName:@"PRODUCT_NAME"];
[event setCategory:@"PRODUCT_CATEGORY"];
[event setCategories:@[@"PRODUCT_CATEGORY_1", @"PRODUCT_CATEGORY_2"]];
[event setProducer:@"PRODUCT_PRODUCER"];
[event setOffline:NO];
[event setRegularPrice:regularPrice];
[event setDiscountedPrice:discountedPrice];
[event setURL:[NSURL URLWithString:@"URL"]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-586-4" data-tab-group="tabgrp-586">

```JavaScript
var object: Object = {
    campaign: 'Computer bargain',
    lastTo: 'December',
  }

  let price = new UnitPrice(10, 'PLN')
  let addedToCartEvent = new AddedToCartEvent('Cart Label', '12345', price, 15, object)
  Synerise.Tracker.send(addedToCartEvent)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-586-5" data-tab-group="tabgrp-586">

```Dart
UnitPrice unitPrice = UnitPrice(price,'PLN');
ProductAddedToCartEvent event = ProductAddedToCartEvent('label', 'sku', unitPrice, 1, {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                           | Required fields                   |
|--------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
| Android      | [AddedToCartEvent](/developers/mobile-sdk/class-reference/android/events#addedtocartevent)                                     | Label, Sku, FinalPrice, Quantity  |
| iOS          | [ProductAddedToCartEvent](/developers/mobile-sdk/class-reference/ios/events#productaddedtocartevent)                           | Label, SKU, FinalPrice,  Quantity |
| React Native | [ProductAddedToCartEvent](/developers/mobile-sdk/class-reference/react-native/events#productaddedtocartevent)                  | Label, SKU, FinalPrice,  Quantity |
| Flutter | [ProductAddedToCartEvent](/developers/mobile-sdk/class-reference/flutter/events#productaddedtocartevent)                  | Label, SKU, FinalPrice,  Quantity |

### Product removed from cart
---
Use this event to track removing a product from a cart in your mobile application.

**Action name of the generated event**: product.removeFromCart

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-587">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-587-0" data-tab-group="tabgrp-587" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-587-1" data-tab-group="tabgrp-587">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-587-2" data-tab-group="tabgrp-587">Swift</button><button class="tab-button" data-tab-id="tabgrp-587-3" data-tab-group="tabgrp-587">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-587-4" data-tab-group="tabgrp-587">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-587-5" data-tab-group="tabgrp-587">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-587-0" data-tab-group="tabgrp-587" data-tab-active="true">

```Java
UnitPrice unitPrice = new UnitPrice(price, Currency.getInstance(Locale.US));
RemovedFromCartEvent event = new RemovedFromCartEvent("label", "sku", unitPrice, 1);
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-587-1" data-tab-group="tabgrp-587">

```Kotlin
val unitPrice = UnitPrice(price, Currency.getInstance(Locale.US))
val event = RemovedFromCartEvent("label", "sku", unitPrice, 1)
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-587-2" data-tab-group="tabgrp-587">

```Swift
let regularPrice: UnitPrice = UnitPrice(amount: 200)
let discountedPrice: UnitPrice = UnitPrice(amount: 100)
let finalPrice: UnitPrice = UnitPrice(amount: 100)

let event: ProductRemovedFromCartEvent = ProductRemovedFromCartEvent(label: "LABEL", sku: "SKU12345", finalPrice: finalPrice, quantity: 1)
event.setName("PRODUCT_NAME")
event.setCategory("PRODUCT_CATEGORY")
event.setCategories(["PRODUCT_CATEGORY_1", "PRODUCT_CATEGORY_2"])
event.setProducer("PRODUCT_PRODUCER")
event.setOffline(false)
event.setRegularPrice(regularPrice)
event.setDiscountedPrice(discountedPrice)
event.setURL(URL(string: "URL")!)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-587-3" data-tab-group="tabgrp-587">

```Objective-C
SNRProductRemovedFromCartEvent *event = [[SNRProductRemovedFromCartEvent alloc] initWithLabel:@"LABEL" sku:@"SKU12345" finalPrice:finalPrice quantity:1];
[event setName:@"PRODUCT_NAME"];
[event setCategory:@"PRODUCT_CATEGORY"];
[event setCategories:@[@"PRODUCT_CATEGORY_1", @"PRODUCT_CATEGORY_2"]];
[event setProducer:@"PRODUCT_PRODUCER"];
[event setOffline:NO];
[event setRegularPrice:regularPrice];
[event setDiscountedPrice:discountedPrice];
[event setURL:[NSURL URLWithString:@"URL"]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-587-4" data-tab-group="tabgrp-587">

```JavaScript
var object: Object = {
    campaign: 'Computer bargain',
    lastTo: 'December',
  }

  let price = new UnitPrice(10, 'PLN')
let removedFromCartEvent = new RemovedFromCartEvent('Cart Label', '12345', price, 15, object)
Synerise.Tracker.send(removedFromCartEvent)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-587-5" data-tab-group="tabgrp-587">

```Dart
UnitPrice unitPrice = UnitPrice(price, 'PLN');
ProductRemovedFromCartEvent event = ProductRemovedFromCartEvent('label', 'sku', unitPrice, 1, {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                           | Required fields                   |
|--------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
| Android      | [RemovedFromCartEvent](/developers/mobile-sdk/class-reference/android/events#removedfromcartevent)                             | Label, Sku, FinalPrice, Quantity  |
| iOS          | [ProductRemovedFromCartEvent](/developers/mobile-sdk/class-reference/ios/events#productremovedfromcartevent)                   | Label, SKU, FinalPrice,  Quantity |
| React Native | [ProductRemovedFromCartEvent](/developers/mobile-sdk/class-reference/react-native/events#productremovedfromcartevent)          | Label, SKU, FinalPrice,  Quantity |
| Flutter | [ProductRemovedFromCartEvent](/developers/mobile-sdk/class-reference/flutter/events#productremovedfromcartevent)          | Label, SKU, FinalPrice,  Quantity |



### Recommendation viewed

Use this event to track when a recommendation is displayed to a customer.

**Action name of the generated event**: recommendation.view

**For iOS and Android only**: If you use the [Widget](/developers/mobile-sdk/displaying-recommendations/content-widget/android) to present recommendations, this event is tracked automatically.

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-588">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-588-0" data-tab-group="tabgrp-588" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-588-1" data-tab-group="tabgrp-588">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-588-2" data-tab-group="tabgrp-588">Swift</button><button class="tab-button" data-tab-id="tabgrp-588-3" data-tab-group="tabgrp-588">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-588-4" data-tab-group="tabgrp-588">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-588-0" data-tab-group="tabgrp-588" data-tab-active="true">

```Java
List<String> items = Arrays.asList("PRODUCT_ID_1", "PRODUCT_ID_2!");
RecommendationViewEvent event = new RecommendationViewEvent("LABEL", items, "12345", "1234", "corr", params)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-588-1" data-tab-group="tabgrp-588">

```Kotlin
val items = listOf("PRODUCT_ID_1", "PRODUCT_ID_2")
val event = RecommendationViewEvent("LABEL", items, "12345", "1234", "corr", params)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-588-2" data-tab-group="tabgrp-588">

```Swift
let event = RecommendationViewEvent(label: "LABEL", campaignID: "1234", campaignHash: "1234", correlationId: "corr", params: nil)
event.setItems([
  "PRODUCT_ID_1",
  "PRODUCT_ID_2"
])
  
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-588-3" data-tab-group="tabgrp-588">

```Objective-C
RecommendationViewEvent *event = [[RecommendationViewEvent alloc] initWithLabel:@"LABEL" campaignID:(NSString *)campaignID campaignHash:(NSString *)campaignHash correlationId:(NSString *)correlationId andParams:(nullable SNRTrackerParams *)params];
[event setItems:@[
  @"PRODUCT_ID_1",
  @"PRODUCT_ID_2"
]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-588-4" data-tab-group="tabgrp-588">

```Dart
List<String> items = ['PRODUCT_ID_1', 'PRODUCT_ID_2!'];
RecommendationViewEvent event = RecommendationViewEvent('LABEL', '12345', items, '213', '234', 'corr', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                                 | Required fields |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------| --- |
| Android      | [RecommendationViewEvent](/developers/mobile-sdk/class-reference/android/events#recommendationviewevent)      | Label, items OR ProductId and Name, CampaignId, CampaignHash  |
| iOS          | [RecommendationViewEvent](/developers/mobile-sdk/class-reference/ios/events#recommendationviewevent)          | Label, items, Name, CampaignId, CampaignHash |
| Flutter          | [RecommendationViewEvent](/developers/mobile-sdk/class-reference/flutter/events#recommendationviewevent)          | Label, items, Name, CampaignId, CampaignHash |

### ~~Recommendation seen~~
---

<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

This is a legacy event. You should use [recommendation.view](#recommendation-viewed) instead.

</div></div></div>

Use this event to track recommendation display to a customer.  

**Action name of the generated event**: recommendation.seen


**For iOS and Android only**: If you use the [Widget](/developers/mobile-sdk/displaying-recommendations/content-widget/android) to present recommendations, this event is tracked automatically.

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-589">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-589-0" data-tab-group="tabgrp-589" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-589-1" data-tab-group="tabgrp-589">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-589-2" data-tab-group="tabgrp-589">Swift</button><button class="tab-button" data-tab-id="tabgrp-589-3" data-tab-group="tabgrp-589">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-589-4" data-tab-group="tabgrp-589">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-589-5" data-tab-group="tabgrp-589">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-589-0" data-tab-group="tabgrp-589" data-tab-active="true">

```Java
RecommendationSeenEvent event = new RecommendationSeenEvent("label", "productId", "productName", "campaignId", "campaignHash");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-589-1" data-tab-group="tabgrp-589">

```Kotlin
val event = RecommendationSeenEvent("label", "productId", "productName", "campaignId", "campaignHash")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-589-2" data-tab-group="tabgrp-589">

```Swift
let event: RecommendationSeenEvent = RecommendationSeenEvent(label: "LABEL", productName: "PRODUCT_NAME", productId: "12345", campaignID: "12345", campaignHash: "CAMPAIGN_HASH", params: nil)
event.setCategory("PRODUCT_CATEGORY")
event.setURL(URL(string: "PRODUCT_URL")!)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-589-3" data-tab-group="tabgrp-589">

```Objective-C
SNRRecommendationSeenEvent *event = [[SNRRecommendationSeenEvent alloc] initWithLabel:@"LABEL" productName:@"PRODUCT_NAME" productId:@"12345" campaignID:@"12345" campaignHash:@"CAMPAIGN_HASH" andParams:nil];
[event setCategory:@"PRODUCT_CATEGORY"];
[event setURL:[NSURL URLWithString:@"PRODUCT_URL"]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-589-4" data-tab-group="tabgrp-589">

```JavaScript
var object: Object = {
    product: 'computer',
    screenSize: 15,
  }

let eventSeen = new RecommendationSeenEvent('Recommendation.ts Seen label', '12351', 'Nike Boots', '12345', 'test', object)
Synerise.Tracker.send(eventSeen)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-589-5" data-tab-group="tabgrp-589">

```Dart
RecommendationSeenEvent event = RecommendationSeenEvent('label', 'productId', 'productName', 'campaignId', 'campaignHash',{});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                                 | Required fields |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------| --- |
| Android      | [RecommendationSeenEvent](/developers/mobile-sdk/class-reference/android/events#recommendationseenevent)      | Label, ProductId,Name, CampaignId, CampaignHash  |
| iOS          | [RecommendationSeenEvent](/developers/mobile-sdk/class-reference/ios/events#recommendationseenevent)          | Label, ProductId, Name, CampaignId, CampaignHash |
| React Native | [RecommendationSeenEvent](/developers/mobile-sdk/class-reference/react-native/events#recommendationseenevent) | Label, ProductId, Name, CampaignId, CampaignHash |
| Flutter | [RecommendationSeenEvent](/developers/mobile-sdk/class-reference/flutter/events#recommendationseenevent) | Label, ProductId, Name, CampaignId, CampaignHash |


### Recommendation clicked
---
Use this event to track recommendation clicks.

**Action name of the generated event**: recommendation.click

**For iOS and Android only**: If you use the [Widget](/developers/mobile-sdk/displaying-recommendations/content-widget/android) to present recommendations, this event is tracked automatically.

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-590">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-590-0" data-tab-group="tabgrp-590" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-590-1" data-tab-group="tabgrp-590">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-590-2" data-tab-group="tabgrp-590">Swift</button><button class="tab-button" data-tab-id="tabgrp-590-3" data-tab-group="tabgrp-590">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-590-4" data-tab-group="tabgrp-590">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-590-5" data-tab-group="tabgrp-590">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-590-0" data-tab-group="tabgrp-590" data-tab-active="true">

```Java
RecommendationClickEvent event = new RecommendationClickEvent("label", "productId", "productName", "campaignId", "campaignHash");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-590-1" data-tab-group="tabgrp-590">

```Kotlin
val event = RecommendationClickEvent("label", "productId", "productName", "campaignId", "campaignHash")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-590-2" data-tab-group="tabgrp-590">

```Swift
let event: RecommendationClickEvent = RecommendationClickEvent(label: "LABEL", productName: "PRODUCT_NAME", productId: "12345", campaignID: "12345", campaignHash: "CAMPAIGN_HASH", params: nil)
event.setCategory("PRODUCT_CATEGORY")
event.setURL(URL(string: "PRODUCT_URL")!)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-590-3" data-tab-group="tabgrp-590">

```Objective-C
SNRRecommendationClickEvent *event = [[SNRRecommendationClickEvent alloc] initWithLabel:@"LABEL" productName:@"PRODUCT_NAME" productId:@"12345" campaignID:@"12345" campaignHash:@"CAMPAIGN_HASH" andParams:nil];
[event setCategory:@"PRODUCT_CATEGORY"];
[event setURL:[NSURL URLWithString:@"PRODUCT_URL"]];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-590-4" data-tab-group="tabgrp-590">

```JavaScript
var object: Object = {
    product: 'computer',
    screenSize: 15,
  }

let event = new RecommendationClickEvent('Recommendation.ts Click label', '12351', 'Boots', '12345', 'test')
Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-590-5" data-tab-group="tabgrp-590">

```Dart
RecommendationClickEvent event = RecommendationClickEvent('label', 'productId', 'productName', 'campaignId', 'campaignHash', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                                 | Required fields |
|--------------|---------------------------------------------------------------------------------------------------------------------------------------| --- |
| Android      | [RecommendationClickEvent](/developers/mobile-sdk/class-reference/android/events#recommendationclickevent)      | Label, ProductId,Name, CampaignId, CampaignHash  |
| iOS          | [RecommendationClickEvent](/developers/mobile-sdk/class-reference/ios/events#recommendationclickevent)          | Label, ProductId, Name, CampaignId, CampaignHash |
| React Native | [RecommendationClickEvent](/developers/mobile-sdk/class-reference/react-native/events#recommendationclickevent) | Label, ProductId, Name, CampaignId, CampaignHash |
| Flutter | [RecommendationClickEvent](/developers/mobile-sdk/class-reference/flutter/events#recommendationclickevent) | Label, ProductId, Name, CampaignId, CampaignHash |

### Customer appeared in location
---
Use this event to track a customer's presence at a location by passing geographic coordinates.

1. Send a [silent push](/developers/mobile-sdk/campaigns/silent-push) with the Synerise command `GET_LOCATION`.
2. SDK retrieves the location.
3. Use the data from the `GET_LOCATION` response to send the `AppearedInLocation` event.

**Action name of the generated event**: client.location

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/location-event-diagram.png" alt="Appeared in location event sent after sending silent notification" class="full"><figcaption>The "appeared in location" event is sent after a silent push</figcaption></figure>


**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-591">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-591-0" data-tab-group="tabgrp-591" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-591-1" data-tab-group="tabgrp-591">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-591-2" data-tab-group="tabgrp-591">Swift</button><button class="tab-button" data-tab-id="tabgrp-591-3" data-tab-group="tabgrp-591">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-591-4" data-tab-group="tabgrp-591">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-591-5" data-tab-group="tabgrp-591">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-591-0" data-tab-group="tabgrp-591" data-tab-active="true">

```Java
AppearedInLocationEvent event = new AppearedInLocationEvent("label", 48.1599, 11.5761);
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-591-1" data-tab-group="tabgrp-591">

```Kotlin
val event = AppearedInLocationEvent("label", 48.1599, 11.5761)
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-591-2" data-tab-group="tabgrp-591">

```Swift
let latitude: CLLocationDegrees = CLLocationDegrees(52.237049)
let longitude: CLLocationDegrees = CLLocationDegrees(21.017532)
let location: CLLocation = CLLocation(latitude: latitude, longitude: longitude)

let event: AppearedInLocationEvent = AppearedInLocationEvent(label: "LABEL", location: location)

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-591-3" data-tab-group="tabgrp-591">

```Objective-C
CLLocationDegrees latitude = 52.237049;
CLLocationDegrees longitude = 21.017532;
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];

SNRAppearedInLocationEvent *event = [[SNRAppearedInLocationEvent alloc] initWithLabel:@"LABEL" andLocation:location];

[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-591-4" data-tab-group="tabgrp-591">

```JavaScript
var object: Object = {
    number: 5,
  }

  let event = new AppearedInLocationEvent('Hit Timer Event Label', 10, 20, object)

  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-591-5" data-tab-group="tabgrp-591">

```Dart
AppearedInLocationEvent event = AppearedInLocationEvent('label', 48.1599, 11.5761, {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                            | Required fields            |
|--------------|----------------------------------------------------------------------------------------------------------------- |----------------------------|
| Android      | [AppearedInLocationEvent](/developers/mobile-sdk/class-reference/android/events#appearedinlocationevent)        | Label, Latitude, Longitude |
| iOS          | [AppearedInLocationEvent](/developers/mobile-sdk/class-reference/ios/events#appearedinlocationevent)            | Label, Latitude, Longitude |
| React Native | [AppearedInLocationEvent](/developers/mobile-sdk/class-reference/react-native/events#appearedinlocationevent)   | Label, Latitude, Longitude |
| Flutter | [AppearedInLocationEvent](/developers/mobile-sdk/class-reference/flutter/events#appearedinlocationevent)   | Label, Latitude, Longitude |


### Customer activity timer
---

Use this event to measure the duration of any customer activity - send Hit timer when a customer starts an activity and send it again with a different time signature when the customer finishes. After that, you can use the [Decision Hub](/docs/analytics) to measure, for example, average activity time. You can add a custom parameter to the timer events so you can recognize them. 

**Action name of the generated event**: client.hitTimer

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-592">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-592-0" data-tab-group="tabgrp-592" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-592-1" data-tab-group="tabgrp-592">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-592-2" data-tab-group="tabgrp-592">Swift</button><button class="tab-button" data-tab-id="tabgrp-592-3" data-tab-group="tabgrp-592">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-592-4" data-tab-group="tabgrp-592">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-592-5" data-tab-group="tabgrp-592">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-592-0" data-tab-group="tabgrp-592" data-tab-active="true">

```Java
HitTimerEvent event = new HitTimerEvent("label");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-592-1" data-tab-group="tabgrp-592">

```Kotlin
val event = HitTimerEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-592-2" data-tab-group="tabgrp-592">

```Swift
let event: HitTimerEvent = HitTimerEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-592-3" data-tab-group="tabgrp-592">

```Objective-C
SNRHitTimerEvent *event = [[SNRHitTimerEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-592-4" data-tab-group="tabgrp-592">

```JavaScript
let sendHitTimerEvent = function() {

  var object: Object = {

    timer: 'anti-clockwise',

    number: 5,

  }



  let event = new HitTimerEvent('Hit Timer Event Label', object)



  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-592-5" data-tab-group="tabgrp-592">

```Dart
HitTimerEvent event = HitTimerEvent('label',{});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                             | Required fields |
|--------------|-------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [HitTimerEvent](/developers/mobile-sdk/class-reference/android/events#hittimerevent)                             | Label           |
| iOS          | [HitTimerEvent](/developers/mobile-sdk/class-reference/ios/events#hittimerevent)                                 | Label           |
| React Native | [HitTimerEvent](/developers/mobile-sdk/class-reference/react-native/events#hittimerevent)                        | Label           |
| Flutter      | [HitTimerEvent](/developers/mobile-sdk/class-reference/flutter/events#hittimerevent)                             | Label           |


### Customer searched
---
Use this event to track search queries - every time a customer types a query in the search box in your mobile application, this event will be generated.

**Action name of the generated event**: client.search

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-593">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-593-0" data-tab-group="tabgrp-593" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-593-1" data-tab-group="tabgrp-593">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-593-2" data-tab-group="tabgrp-593">Swift</button><button class="tab-button" data-tab-id="tabgrp-593-3" data-tab-group="tabgrp-593">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-593-4" data-tab-group="tabgrp-593">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-593-5" data-tab-group="tabgrp-593">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-593-0" data-tab-group="tabgrp-593" data-tab-active="true">

```Java
SearchedEvent event = new SearchedEvent("label");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-593-1" data-tab-group="tabgrp-593">

```Kotlin
val event = SearchedEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-593-2" data-tab-group="tabgrp-593">

```Swift
let event: SearchedEvent = SearchedEvent(label: "LABEL")
        
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-593-3" data-tab-group="tabgrp-593">

```Objective-C
SNRSearchedEvent *event = [[SNRSearchedEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-593-4" data-tab-group="tabgrp-593">

```JavaScript
var object: Object = {
    timer: 'anti-clockwise',
    number: 5,
  }

  let event = new HitTimerEvent('Hit Timer Event Label', object)

  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-593-5" data-tab-group="tabgrp-593">

```Dart
SearchedEvent event = SearchedEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                             | Required fields |
|--------------|-------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [SearchedEvent](/developers/mobile-sdk/class-reference/android/events#searchedevent)                             | Label           |
| iOS          | [SearchedEvent](/developers/mobile-sdk/class-reference/ios/events#searchedevent)                                 | Label           |
| React Native | [SearchedEvent](/developers/mobile-sdk/class-reference/react-native/events#searchedevent)                        | Label           |
| Flutter      | [SearchedEvent](/developers/mobile-sdk/class-reference/flutter/events#searchedevent)                             | Label           |

### Customer shared
---
Use this event to track customer sharing something from your application.

**Action name of the generated event**: client.shared

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-594">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-594-0" data-tab-group="tabgrp-594" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-594-1" data-tab-group="tabgrp-594">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-594-2" data-tab-group="tabgrp-594">Swift</button><button class="tab-button" data-tab-id="tabgrp-594-3" data-tab-group="tabgrp-594">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-594-4" data-tab-group="tabgrp-594">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-594-5" data-tab-group="tabgrp-594">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-594-0" data-tab-group="tabgrp-594" data-tab-active="true">

```Java
SharedEvent event = new SharedEvent("label");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-594-1" data-tab-group="tabgrp-594">

```Kotlin
val event = SharedEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-594-2" data-tab-group="tabgrp-594">

```Swift
let event: SharedEvent = SharedEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-594-3" data-tab-group="tabgrp-594">

```Objective-C
SNRSharedEvent *event = [[SNRSharedEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-594-4" data-tab-group="tabgrp-594">

```JavaScript
var object: Object = {
    sharedEvents: '5',
    field: 'test',
  }

  let event = new SharedEvent('Shared Event Label', object)

  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-594-5" data-tab-group="tabgrp-594">

```Dart
SharedEvent event = new SharedEvent('label',{});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                        | Required fields |
|--------------|--------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [SharedEvent](/developers/mobile-sdk/class-reference/android/events#sharedevent)                            | Label           |
| iOS          | [SharedEvent](/developers/mobile-sdk/class-reference/ios/events#sharedevent)                                | Label           |
| React Native | [SharedEvent](/developers/mobile-sdk/class-reference/react-native/events#sharedevent)                       | Label           |
| Flutter      | [SharedEvent](/developers/mobile-sdk/class-reference/flutter/events#sharedevent)                            | Label           |


### Customer visited a screen
---
This event is used when a customer visits a particular screen in your application.

**Action name of the generated event**: screen.view

<figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/developers/_gfx/customer-visited-a-screen.png" alt="Event sent when a user visits a screen" class="medium"><figcaption>Event sent when a mobile app user visits a screen</figcaption></figure>

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-595">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-595-0" data-tab-group="tabgrp-595" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-595-1" data-tab-group="tabgrp-595">Kotlin</button><button class="tab-button" data-tab-id="tabgrp-595-2" data-tab-group="tabgrp-595">Swift</button><button class="tab-button" data-tab-id="tabgrp-595-3" data-tab-group="tabgrp-595">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-595-4" data-tab-group="tabgrp-595">JavaScript</button><button class="tab-button" data-tab-id="tabgrp-595-5" data-tab-group="tabgrp-595">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-595-0" data-tab-group="tabgrp-595" data-tab-active="true">

```Java
VisitedScreenEvent event = new VisitedScreenEvent("label");
Tracker.send(event);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-595-1" data-tab-group="tabgrp-595">

```Kotlin
val event = VisitedScreenEvent("label")
Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-595-2" data-tab-group="tabgrp-595">

```Swift
let event: VisitedScreenEvent = VisitedScreenEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-595-3" data-tab-group="tabgrp-595">

```Objective-C
SNRVisitedScreenEvent *event = [[SNRVisitedScreenEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-595-4" data-tab-group="tabgrp-595">

```JavaScript
let sendVisitedScreenEvent = function() {

  var object: Object = {

    screen: '1',

    age: '25',

  }



  let event = new VisitedScreenEvent('Visited Screen label', object)



  Synerise.Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-595-5" data-tab-group="tabgrp-595">

```Dart
VisitedScreenEvent event = VisitedScreenEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                                | Required fields |
|--------------|----------------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [VisitedScreenEvent](/developers/mobile-sdk/class-reference/android/events#visitedscreenevent)                      | Label           |
| iOS          | [VisitedScreenEvent](/developers/mobile-sdk/class-reference/ios/events#visitedscreenevent)                          | Label           |
| React Native | [VisitedScreenEvent](/developers/mobile-sdk/class-reference/react-native/events#visitedscreenevent)                 | Label           |
| Flutter      | [VisitedScreenEvent](/developers/mobile-sdk/class-reference/flutter/events#visitedscreenevent)                      | Label           |

### Crash Event
---
This event is used when the application crashes.

The event is sent automatically by **Synerise SDK** when you enable [crash handling](/developers/mobile-sdk/miscellaneous#crash-handling) while  configuring the SDK.  

You can send it by yourself when you handle an uncaught exception.

**Action name of the generated event**: client.applicationCrashed

**Example**:


<div class="content-tabs code-tabs" data-tab-group="tabgrp-596">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-596-0" data-tab-group="tabgrp-596" data-tab-active="true">Swift</button><button class="tab-button" data-tab-id="tabgrp-596-1" data-tab-group="tabgrp-596">Objective-C</button></div>

<div class="tab-panel" data-tab-id="tabgrp-596-0" data-tab-group="tabgrp-596" data-tab-active="true">

```Swift
let event: CrashEvent = CrashEvent(label: "LABEL")
event.setExceptionName("EXCEPTION_NAME")
event.setExceptionReason("EXCEPTION_REASON")
event.setExceptionStacktrace("EXCEPTION_STACKTRACE")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-596-1" data-tab-group="tabgrp-596">

```Objective-C
SNRCrashEvent *event = [[SNRCrashEvent alloc] initWithLabel:@"LABEL"];
[event setExceptionName:@"EXCEPTION_NAME"];
[event setExceptionReason:@"EXCEPTION_REASON"];
[event setExceptionStacktrace:@"EXCEPTION_STACKTRACE"];

[SNRTracker send:event];
```

</div>
</div>


| OS           | Event                                                                                                      | Required fields |
|--------------|------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [CrashEvent](/developers/mobile-sdk/class-reference/android/events#crashevent)                           | Label           |
| iOS          | [CrashEvent](/developers/mobile-sdk/class-reference/ios/events#crashevent)                                | Label           |
| React Native | n/a                                                                                                        | Label           |
| Flutter      | n/a                                                                                                        | Label           |


### Push viewed
---
Use this event to track viewing a push notification.


<div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Push events are tracked automatically for Android and React Native (if the notifications have been configured for React Native according to [iOS](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-ios) or [Android](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-android) ).

</div></div></div>


**Action name of the generated event**: push.view


<div class="content-tabs code-tabs" data-tab-group="tabgrp-597">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-597-0" data-tab-group="tabgrp-597" data-tab-active="true">Swift</button><button class="tab-button" data-tab-id="tabgrp-597-1" data-tab-group="tabgrp-597">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-597-2" data-tab-group="tabgrp-597">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-597-0" data-tab-group="tabgrp-597" data-tab-active="true">

```Swift
let event: PushViewedEvent = PushViewedEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-597-1" data-tab-group="tabgrp-597">

```Objective-C
SNRPushViewedEvent *event = [[SNRPushViewedEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-597-2" data-tab-group="tabgrp-597">

```Dart
PushViewedEvent event = PushViewedEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                      | Required fields |
|--------------|------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [PushViewedEvent](/developers/mobile-sdk/class-reference/android/events#viewedpushevent)                  | Label           |
| iOS          | [PushViewedEvent](/developers/mobile-sdk/class-reference/ios/events/#pushviewedevent )                     | Label           |
| React Native | [PushViewedEvent](/developers/mobile-sdk/class-reference/react-native/events#pushviewedevent)             | Label           |
| Flutter      | [PushViewedEvent](/developers/mobile-sdk/class-reference/flutter/events#pushviewedevent)                  | Label           |


### Push clicked
---
Use this event to track tapping a push notification.


<div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Push events are tracked automatically for Android and React Native (if the notifications have been configured for React Native according to [iOS](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-ios) or [Android](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-android) ).

</div></div></div>


**Action name of the generated event**: push.click


<div class="content-tabs code-tabs" data-tab-group="tabgrp-598">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-598-0" data-tab-group="tabgrp-598" data-tab-active="true">Swift</button><button class="tab-button" data-tab-id="tabgrp-598-1" data-tab-group="tabgrp-598">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-598-2" data-tab-group="tabgrp-598">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-598-0" data-tab-group="tabgrp-598" data-tab-active="true">

```Swift
let event: PushClickedEvent = PushClickedEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-598-1" data-tab-group="tabgrp-598">

```Objective-C
SNRPushClickedEvent *event = [[SNRPushClickedEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-598-2" data-tab-group="tabgrp-598">

```Dart
PushClickedEvent event = PushClickedEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                      | Required fields |
|--------------|------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [ClickedPushEvent](/developers/mobile-sdk/class-reference/android/events#clickedpushevent)                | Label           |
| iOS          | [PushClickedEvent](/developers/mobile-sdk/class-reference/ios/events#pushclickedevent)                    | Label           |
| React Native | [ClickedPushEvent](/developers/mobile-sdk/class-reference/react-native/events#pushclickedevent)           | Label           |
| Flutter      | [PushClickedEvent](/developers/mobile-sdk/class-reference/flutter/events#pushclickedevent)                | Label           |

### Push cancelled
---
Use this event to track dismissing push notifications.


<div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Push events are tracked automatically for Android and React Native (if the notifications have been configured for React Native according to [iOS](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-ios) or [Android](/developers/mobile-sdk/configuring-push-notifications/react-native#setting-up-android) ).

</div></div></div>


**Action name of the generated event**: push.dismiss


<div class="content-tabs code-tabs" data-tab-group="tabgrp-599">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-599-0" data-tab-group="tabgrp-599" data-tab-active="true">Swift</button><button class="tab-button" data-tab-id="tabgrp-599-1" data-tab-group="tabgrp-599">Objective-C</button><button class="tab-button" data-tab-id="tabgrp-599-2" data-tab-group="tabgrp-599">Dart</button></div>

<div class="tab-panel" data-tab-id="tabgrp-599-0" data-tab-group="tabgrp-599" data-tab-active="true">

```Swift
let event: PushCancelledEvent = PushCancelledEvent(label: "LABEL")

Tracker.send(event)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-599-1" data-tab-group="tabgrp-599">

```Objective-C
SNRPushCancelledEvent *event = [[SNRPushCancelledEvent alloc] initWithLabel:@"LABEL"];
    
[SNRTracker send:event];
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-599-2" data-tab-group="tabgrp-599">

```Dart
PushCancelledEvent event = PushCancelledEvent('label', {});
Synerise.tracker.send(event);
```

</div>
</div>


| OS           | Event                                                                                                      | Required fields |
|--------------|------------------------------------------------------------------------------------------------------------|-----------------|
| Android      | [CancelledPushEvent](/developers/mobile-sdk/class-reference/android/events#cancelledpushevent)            | Label           |
| iOS          | [PushCancelledEvent](/developers/mobile-sdk/class-reference/ios/events#pushclickedevent)                  | Label           |
| React Native | [PushCancelledEvent](/developers/mobile-sdk/class-reference/react-native/events#pushcancelledevent)       | Label           |
| Flutter      | [PushCancelledEvent](/developers/mobile-sdk/class-reference/flutter/events#pushcancelledevent)            | Label           |




