# Events

The Didomi SDK triggers various events to notify you that the user has taken some action (changed their consent status, open the preferences screen, etc.) or that an important event has happened.

This section describes what events are available and how to subscribe to them.

## addEventListener

Add an event listener to catch events triggered by the SDK. Events listeners allow you to react to different events of interest. This function is safe to call before the `ready` event has been triggered.

**Requires SDK to be initialized**

No.

**Parameters**

| Name          | Type            | Description                                                      |
| ------------- | --------------- | ---------------------------------------------------------------- |
| eventListener | `EventListener` | The event listener. An instance of a subclass of `EventListener` |

**Returns**

Nothing

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onConsentChanged = { event in
</strong>    // The consent status of the user has changed
}

didomiEventListener.onHideNotice = { event in
    // The notice is being hidden
}

didomiEventListener.onShowNotice = { event in
    // The notice is being shown
}

Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];

[didomiEventListener setOnConsentChanged:^(enum DDMEventType event) {
    // The consent status of the user has changed
}];

[didomiEventListener setOnHideNotice:^(enum DDMEventType event) {
    // The notice is being hidden
}];

[didomiEventListener setOnShowNotice:^(enum DDMEventType event) {
    // The notice is being shown
}];

[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

### Event types <a href="#event-types" id="event-types"></a>

This section presents a comprehensive list of the event types exposed by the Didomi SDK and usage examples.

#### **onConsentChanged**

Triggered when a consent is given or withdrawn by the user. It's only triggered when the consent status actually changes. For instance, if the user saves consents without adding/removing any consent then this does not get called.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onConsentChanged = { event in
</strong>    // The consent status of the user has changed
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnConsentChanged:^(enum DDMEventType event) {
    // The consent status of the user has changed
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onHideNotice**

Triggered when the consent notice is hidden. If you have disabled our default consent notice to replace it with your own, you need to hide your custom notice when this event gets triggered.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onHideNotice = { event in
</strong>    // The notice is being hidden
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnHideNotice:^(enum DDMEventType event) {
    // The notice is being hidden
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onShowNotice**

Triggered when the consent notice gets displayed. If you have disabled our default consent notices to replace them with your own, you need to show your custom notice when this event gets triggered.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onShowNotice = { event in
    // The notice is being shown
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnShowNotice:^(enum DDMEventType event) {
    // The notice is being shown
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickAgree**

Triggered when the user clicks on agree on the notice.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onNoticeClickAgree = { event in
    // Click on agree on notice
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickAgree:^(enum DDMEventType event) {
    // Click on agree on notice
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickMoreInfo**

Triggered when the user clicks on learn more on the notice.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onNoticeClickMoreInfo = { event in
    // Click on learn more on notice
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickMoreInfo:^(enum DDMEventType event) {
    // Click on learn more on notice
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onHidePreferences**

Triggered when the preferences screen becomes hidden, for example when the user closes it or saves their consent.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onHidePreferences = { event in
    // The preferences screen is being hidden
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnHidePreferences:^(enum DDMEventType event) {
    // The preferences screen is being hidden
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onShowPreferences**

Triggered when the preferences screen gets displayed.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onShowPreferences = { event in
    // The preferences screen is being shown
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnShowPreferences:^(enum DDMEventType event) {
    // The preferences screen is being shown
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickAgreeToAll**

Triggered when the user clicks on agree to all on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickAgreeToAll = { event in
    // Click on agree to all on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickAgreeToAll:^(enum DDMEventType event) {
    // Click on agree to all on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickDisagreeToAll**

Triggered when the user clicks on disagree to all on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickDisagreeToAll = { event in
    // Click on disagree to all on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickDisagreeToAll:^(enum DDMEventType event) {
    // Click on disagree to all on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickPurposeAgree**

Triggered when the user agrees to a purpose on the preferences popup.

**Listener parameters**

* event: EventType (enum)
* purposeId: String

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickPurposeAgree = { event, purposeId in
    // Click on agree to a purpose on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickPurposeAgree:^(enum DDMEventType event, purposeId) {
    // Click on agree to a purpose on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickPurposeDisagree**

Triggered when the user disagrees to a purpose on the preferences popup. (purposeId provided as a parameter)

**Listener parameters**

* event: EventType (enum)
* purposeId: String

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickPurposeDisagree = { event, purposeId in
    // Click on disagree to a purpose on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickPurposeDisagree:^(enum DDMEventType event, purposeId) {
    // Click on disagree to a purpose on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickViewVendors**

Triggered when the user clicks on view vendors on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickViewVendors = { event in
    // Click view vendors on purposes view on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickViewVendors:^(enum DDMEventType event) {
    // Click view vendors on purposes view on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickViewSPIPurposes**

Triggered when the user clicks on view Sensitive Personal Information from the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickViewSPIPurposes = { event in
</strong>    // User clicked on view Sensitive Personal Information from the preferences popup.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickViewSPIPurposes:^(enum DDMEventType event) {
    // User clicked on view Sensitive Personal Information from the preferences popup.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSaveChoices**

Triggered when the user saves his choice on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickSaveChoices = { event in
    // Click on save on the purposes view on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSaveChoices:^(enum DDMEventType event) {
    // Click on save on the purposes view on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

**onPreferencesClickVendorAgree**

Triggered when the user agrees to a vendor on the preferences popup.

**Listener parameters**

* event: EventType (enum)
* vendorId: String

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickVendorAgree = { event, vendorId in
    // Click on agree to a vendor on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickVendorAgree:^(enum DDMEventType event, vendorId) {
    // Click on agree to a vendor on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

**onPreferencesClickVendorDisagree**

Triggered when the user disagrees to a vendor on the preferences popup.

**Listener parameters**

* event: EventType (enum)
* vendorId: String

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickVendorDisagree = { event, vendorId in
    // Click on disagree to a vendor on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickVendorDisagree:^(enum DDMEventType event, vendorId) {
    // Click on disagree to a vendor on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickVendorSaveChoices**

This happens when the user saves his choice on the vendors view on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickVendorSaveChoices = { event in
    // Click on save on the vendors view on preferences popup
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickVendorSaveChoices:^(enum DDMEventType event) {
    // Click on save on the vendors view on preferences popup
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickDisagree**

Triggered when the user clicks on disagree on the notice.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onNoticeClickDisagree = { event in
    // Select disagree on the notice
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickDisagree:^(enum DDMEventType event) {
    // Select disagree on the notice
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickViewVendors**

Triggered when the user clicks on partners on the notice.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onNoticeClickViewVendors = { event in
    // Select Our Partners on the notice
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickViewVendors:^(enum DDMEventType event) {
    // Select Our Partners on the notice
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickViewSPIPurposes**

Triggered when the user clicks on Sensitive Personal Information from the notice.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onNoticeClickViewSPIPurposes = { event in
</strong>    // User clicked on Sensitive Personal Information from the notice.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickViewSPIPurposes:^(enum DDMEventType event) {
    // User clicked on Sensitive Personal Information from the notice.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onNoticeClickPrivacyPolicy**

Triggered when the user clicks on privacy policy on the notice (available on TV only).

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onNoticeClickPrivacyPolicy = { event in
    // Select Our Privacy Policy on the notice (tvOS only)
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnNoticeClickPrivacyPolicy:^(enum DDMEventType event) {
    // Select Our Privacy Policy on the notice (tvOS only)
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickAgreeToAllPurposes**

Triggered when the user flips ON all purposes switch on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickAgreeToAllPurposes = { event in
    // Agree to all purposes using the bulk action button on the preferences screen
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickAgreeToAllPurposes:^(enum DDMEventType event) {
    // Agree to all purposes using the bulk action button on the preferences screen
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickDisagreeToAllPurposes**

Triggered when the user flips OFF all purposes switch on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickDisagreeToAllPurposes = { event in
    // Disagree to all purposes using the bulk action button on the preferences screen
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickDisagreeToAllPurposes:^(enum DDMEventType event) {
    // Disagree to all purposes using the bulk action button on the preferences screen
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickAgreeToAllVendors**

Triggered when the user flips ON all vendors switch on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickAgreeToAllVendors = { event in
    // Agree to all vendors using the bulk action button on the preferences screen
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickAgreeToAllVendors:^(enum DDMEventType event) {
    // Agree to all vendors using the bulk action button on the preferences screen
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickDisagreeToAllVendors**

Triggered when the user flips OFF all vendors switch on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickDisagreeToAllVendors = { event in
    // Disagree to all vendors using the bulk action button on the preferences screen
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickDisagreeToAllVendors:^(enum DDMEventType event) {
    // Disagree to all vendors using the bulk action button on the preferences screen
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickViewPurposes**

Triggered when the user clicks on view purposes on the preferences popup.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
didomiEventListener.onPreferencesClickViewPurposes = { event in
    // Select displaying the purposes on the preferences screen
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickViewPurposes:^(enum DDMEventType event) {
    // Select displaying the purposes on the preferences screen
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSPIPurposeAgree**

Triggered when the toggle linked to a Personal Data purpose is set to agree/enabled.

**Listener parameters**

* event: EventType (enum)
* purposeId: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickSPIPurposeAgree = { event, purposeId in
</strong>    // Toggle linked to a Personal Data purpose was set to agree/enabled.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSPIPurposeAgree:^(enum DDMEventType event, NSString * _Nullable purposeId) {
    // Toggle linked to a Personal Data purpose was set to agree/enabled.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSPIPurposeDisagree**

Triggered when the toggle linked to a Personal Data purpose is set to disagree/disabled.

**Listener parameters**

* event: EventType (enum)
* purposeId: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickSPIPurposeDisagree = { event, purposeId in
</strong>    // Toggle linked to a Personal Data purpose was set to disagree/disabled.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSPIPurposeDisagree:^(enum DDMEventType event, NSString * _Nullable purposeId) {
    // Toggle linked to a Personal Data purpose was set to disagree/disabled.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSPICategoryAgree**

Triggered when the toggle linked to a Personal Data category is set to agree/enabled.

**Listener parameters**

* event: EventType (enum)
* categoryId: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickSPICategoryAgree = { event, categoryId in
</strong>    // Toggle linked to a Personal Data category was set to agree/enabled.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSPICategoryAgree:^(enum DDMEventType event, NSString * _Nullable categoryId) {
    // Toggle linked to a Personal Data category was set to agree/enabled.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSPICategoryDisagree**

Triggered when the toggle linked to a Personal Data category is set to disagree/disabled.

**Listener parameters**

* event: EventType (enum)
* categoryId: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickSPICategoryDisagree = { event, categoryId in
</strong>    // Toggle linked to a Personal Data category was set to disagree/disabled.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSPICategoryDisagree:^(enum DDMEventType event, NSString * _Nullable categoryId) {
    // Toggle linked to a Personal Data category was set to disagree/disabled.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onPreferencesClickSPIPurposeSaveChoices**

Triggered when the Save button from the Sensitive Personal Information screen is pressed.

**Listener parameters**

* event: EventType (enum)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onPreferencesClickSPIPurposeSaveChoices = { event in
</strong>    // Save button from the Sensitive Personal Information screen was pressed.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnPreferencesClickSPIPurposeSaveChoices:^(enum DDMEventType event) {
    // Save button from the Sensitive Personal Information screen was pressed.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onSyncUserChanged**

Triggered when the user is changed from [setUser](/cmp/mobile-sdk/ios/reference/api.md#setuser) function only if sync is enabled.

**Listener parameters**

* `SyncUserChangedEvent`: object

  | Property | Type     | Description                                                                                          |
  | -------- | -------- | ---------------------------------------------------------------------------------------------------- |
  | userAuth | UserAuth | The new user as `UserAuthWithoutParams`, `UserAuthWithEncryptionParams` or `UserAuthWithHashParams`. |

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onSyncUserChanged = { event in
</strong>    let userAuth = event.userAuth
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener onSyncUserChanged:^(DDMSyncUserChangedEvent event) {
    NSUserAuth *userAuth = event.userAuth;
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onSyncDone**

{% hint style="warning" %}
This event has been deprecated. Use [onSyncReady](#onsyncready) instead.
{% endhint %}

Triggered when the consent synchronization is successful (Cross-device).

**Listener parameters**

* event: EventType (enum)
* organizationUserId: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onSyncDone = { event, organizationUserId in
</strong>    // The consent synchronization was successful.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnSyncDone:^(enum DDMEventType event, NSString * _Nullable organizationUserId) {
    // The consent synchronization was successful.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onSyncError**

Triggered when the consent synchronization has failed (Cross-device).

**Listener parameters**

* event: EventType (enum)
* error: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onSyncError = { event, error in
</strong>    // The consent synchronization has failed.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnSyncError:^(enum DDMEventType event, NSString * _Nullable error) {
    // The consent synchronization has failed.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onSyncReady**

Triggered when the user status synchronization is ready (Cross-device).

**Listener parameters**

`SyncReadyEvent` object

| Property           | Type              | Description                                                                                                                                                                                          |
| ------------------ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| organizationUserId | String            | The organization user ID (OUID) used for the sync.                                                                                                                                                   |
| statusApplied      | Boolean           | Indicates if the user status has been applied locally from the remote Didomi backend. `true` if the user status was applied from the remote, `false` otherwise.                                      |
| syncAcknowledged   | Lambda expression | Callback that can be used to communicate to the Didomi servers that the synchronization has been communicated to the user. Returns `true` if the API event was successfully sent, `false` otherwise. |

**Example**

{% tabs %}
{% tab title="Swift" %}

```swift
let didomiEventListener = EventListener()

didomiEventListener.onSyncReady = { event in
    // User status synchronization was successful.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnSyncReady:^(DDMSyncReadyEvent* event) {
    // The consent synchronization was successful.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onLanguageUpdated**

Triggered when SDK language has been successfully changed.

**Listener parameters**

* event: EventType (enum)
* languageCode: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onLanguageUpdated = { event, languageCode in
</strong>    // SDK language has been successfully changed.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnLanguageUpdated:^(enum DDMEventType event, NSString * _Nullable languageCode) {
    // SDK language has been successfully changed.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

#### **onLanguageUpdateFailed**

Triggered when SDK language update has failed. (reason provided as a parameter)

**Listener parameters**

* event: EventType (enum)
* reason: String (nullable/optional)

**Example**

{% tabs %}
{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>let didomiEventListener = EventListener()
</strong>
<strong>didomiEventListener.onLanguageUpdateFailed = { event, reason in
</strong>    // SDK language update has failed.
}
Didomi.shared.addEventListener(listener: didomiEventListener)
</code></pre>

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnLanguageUpdateFailed:^(enum DDMEventType event, NSString * _Nullable reason) {
    // Event was triggered.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}

### onIntegrationError

Triggered when an integration with an external SDK is not working as expected. The currently supported external SDKs are **Firebase**, **Airbridge**, **AppsFlyer**, and **Branch** (see related documentation [here](/cmp/mobile-sdk/google-consent-mode.md#how-does-it-work-on-apps)). This event indicates that Didomi was not able to update the privacy signals for the specified SDK.

**Listener parameters**

`IntegrationErrorEvent` object with the following properties:

<table data-header-hidden><thead><tr><th>Method</th><th width="171.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>Method</td><td>Type</td><td>Description</td></tr><tr><td><code>integrationName</code></td><td>String</td><td>Name of the failing SDK integration, such as <code>Firebase SDK</code>, <code>Airbridge SDK</code>...</td></tr><tr><td><code>reason</code></td><td>String</td><td>Technical reason of the failure</td></tr></tbody></table>

#### Example

{% tabs %}
{% tab title="Swift" %}

```swift
let didomiEventListener: EventListener = EventListener()

didomiEventListener.onIntegrationError = { event in
    // An external SDK integration is not working properly
    print("\(event.integrationName) : Integration error - \(event.reason)")
}
        
Didomi.shared.addEventListener(listener: didomiEventListener)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
DDMEventListener *didomiEventListener = [[DDMEventListener alloc] init];
[didomiEventListener setOnIntegrationError:^(DDMIntegrationErrorEvent* event) {
    // An external SDK integration is not working properly.
}];
[didomi addEventListenerWithListener:didomiEventListener];
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

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

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

```
GET https://developers.didomi.io/cmp/mobile-sdk/ios/reference/events.md?ask=<question>
```

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

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