# Android listeners

## OnRegisterForPushListener {id=on-register-for-push-listener}

#### onRegisterForPushRequired(PushRegistrationOrigin origin) {id=on-register-for-push-listener-on-register-for-push-required-with-origin}
This method is called when Synerise needs registration for push notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android) for more details.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-2038">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2038-0" data-tab-group="tabgrp-2038" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2038-1" data-tab-group="tabgrp-2038">Kotlin</button></div>

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

```Java
- void onRegisterForPushRequired(PushRegistrationOrigin origin);
```

</div>

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

```Kotlin
fun onRegisterForPushRequired(origin: PushRegistrationOrigin)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **origin** | [PushRegistrationOrigin](/developers/mobile-sdk/class-reference/android/campaigns#pushregistrationorigin) | Information about the cause of the registration |

---
---

#### onRegisterForPushRequired() {id=on-register-for-push-listener-on-register-for-push-required}
This method is called when Synerise needs registration for push notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android) for more details.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-2039">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2039-0" data-tab-group="tabgrp-2039" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2039-1" data-tab-group="tabgrp-2039">Kotlin</button></div>

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

```Java
- void onRegisterForPushRequired();
```

</div>

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

```Kotlin
fun onRegisterForPushRequired()
```

</div>
</div>


---
---

## OnNotificationListener {id=on-notification-listener}
A listener to handle events from Synerise notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android#callback-methods) for more 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">

**OnNotificationListener** is available from 4.9.0 SDK version.

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


#### onNotificationReceived(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-receive}

This method is called when a Synerise notification is received.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2040">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2040-0" data-tab-group="tabgrp-2040" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2040-1" data-tab-group="tabgrp-2040">Kotlin</button></div>

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

```Java
- public void onNotificationReceived(NotificationInfo notificationInfo)
```

</div>

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

```Kotlin
fun onNotificationReceived(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing info about the notification. |

#### onNotificationDismissed(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-dismissed}

This method is called when a Synerise notification is dismissed.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2041">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2041-0" data-tab-group="tabgrp-2041" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2041-1" data-tab-group="tabgrp-2041">Kotlin</button></div>

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

```Java
- public void onNotificationDismissed(NotificationInfo notificationInfo)
```

</div>

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

```Kotlin
fun onNotificationDismissed(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing info about the notification. |

#### onNotificationClicked(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-clicked}

This method is called when a Synerise notification is clicked.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2042">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2042-0" data-tab-group="tabgrp-2042" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2042-1" data-tab-group="tabgrp-2042">Kotlin</button></div>

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

```Java
- public void onNotificationClicked(NotificationInfo notificationInfo)
```

</div>

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

```Kotlin
fun onNotificationClicked(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing information about the notification. |

#### onActionButtonClicked(NotificationInfo notificationInfo, String actionButton) {id=on-notification-listener-on-action-button-clicked}

This method is called when an action button is clicked in a Synerise notification.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2043">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2043-0" data-tab-group="tabgrp-2043" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2043-1" data-tab-group="tabgrp-2043">Kotlin</button></div>

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

```Java
- public void onActionButtonClicked(NotificationInfo notificationInfo, String actionButton)
```

</div>

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

```Kotlin
fun onActionButtonClicked(notificationInfo: NotificationInfo, actionButton: String)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing information about the notification. |
| **actionButton** | String | Text on the clicked action button. |

---
---

## OnClientStateChangeListener {id=on-client-state-change-listener}
A listener to handle customer's sign-in state changes.
  
To set your object with listener methods, you must use [this method](/developers/mobile-sdk/method-reference/android/client-authentication#set-client-state-change-listener).

#### onClientSignedIn() {id=on-client-state-change-listener-on-client-signed-in}

This method is called when the customer signs in.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2044">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2044-0" data-tab-group="tabgrp-2044" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2044-1" data-tab-group="tabgrp-2044">Kotlin</button></div>

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

```Java
- public void onClientSignedIn()
```

</div>

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

```Kotlin
fun onClientSignedIn()
```

</div>
</div>


#### onClientSignedOut(ClientSessionEndReason reason) {id=on-client-state-change-listener-on-client-signed-out}

This method is called when the customer signs out.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2045">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2045-0" data-tab-group="tabgrp-2045" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2045-1" data-tab-group="tabgrp-2045">Kotlin</button></div>

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

```Java
- public void onClientSignedOut(ClientSessionEndReason reason)
```

</div>

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

```Kotlin
fun onClientSignedOut(reason:ClientSessionEndReason)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **reason** | [ClientSessionEndReason](/developers/mobile-sdk/class-reference/android/client#clientsessionendreason) | Specifies the reason for signing out. |

---
---

## OnInjectorListener {id=on-injector-listener}

#### onOpenUrl(SyneriseSource source, String url) {id=on-injector-listener-on-open-url}

A listener to handle events from [campaigns](/developers/mobile-sdk/campaigns).

Fired when a customer interacts with the URL action.  
This method returns `true` if activity is closed after executing an action; in other case, it returns `false`.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2046">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2046-0" data-tab-group="tabgrp-2046" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2046-1" data-tab-group="tabgrp-2046">Kotlin</button></div>

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

```Java
- boolean onOpenUrl(SyneriseSource source, String url)
```

</div>

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

```Kotlin
fun onOpenUrl(source:SyneriseSource, url:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | SyneriseSource | Interaction source |
| **url** | String | URL value from the action of the activity |

#### onOpenUrl(InjectorSource source, String url) {id=on-injector-listener-on-open-url-deprecated}

A listener to handle events from [campaigns](/developers/mobile-sdk/campaigns).

Fired when a customer interacts with the URL action.  
This method returns `true` if activity is closed after executing an action; in other case, it returns `false`.


<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 method was deprecated in SDK version 6.0.0.

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



<div class="content-tabs code-tabs" data-tab-group="tabgrp-2047">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2047-0" data-tab-group="tabgrp-2047" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2047-1" data-tab-group="tabgrp-2047">Kotlin</button></div>

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

```Java
- boolean onOpenUrl(InjectorSource source, String url)
```

</div>

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

```Kotlin
fun onOpenUrl(source:InjectorSource, url:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | InjectorSource | Interaction source |
| **url** | String | URL value from the action of the activity |

#### onDeepLink(SyneriseSource source, String deepLink) {id=on-injector-listener-on-deeplink}

Fired when a customer interacts with the DEEP_LINKING action.  
The method returns `true` if activity is closed after executing the action; in other case, it returns `false`.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2048">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2048-0" data-tab-group="tabgrp-2048" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2048-1" data-tab-group="tabgrp-2048">Kotlin</button></div>

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

```Java
- boolean onDeepLink(SyneriseSource source, String deepLink)
```

</div>

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

```Kotlin
fun onDeepLink(source:SyneriseSource, deepLink:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | SyneriseSource | Interaction source |
| **deepLink** | String | Deep link value from the action of the activity |

#### onDeepLink(InjectorSource source, String deepLink) {id=on-injector-listener-on-deeplink}

Fired when a customer interacts with the DEEP_LINKING action.  
The method returns `true` if activity is closed after executing the action; in other case, it returns `false`.


<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 method was deprecated in SDK version 6.0.0.

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



<div class="content-tabs code-tabs" data-tab-group="tabgrp-2049">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2049-0" data-tab-group="tabgrp-2049" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2049-1" data-tab-group="tabgrp-2049">Kotlin</button></div>

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

```Java
- boolean onDeepLink(InjectorSource source, String deepLink)
```

</div>

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

```Kotlin
fun onDeepLink(source:InjectorSource, deepLink:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | InjectorSource | Interaction source |
| **deepLink** | String | Deep link value from the action of the activity |

---
---

## OnInAppListener {id=on-in-app-listener}
A listener to handle the states of [in-app message](/developers/mobile-sdk/campaigns/in-app-message).


<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">

**OnInAppListener** is available from 4.7.0 SDK version.

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

  
To set your object with listener methods, you must use [this method](/developers/mobile-sdk/method-reference/android/campaigns#set-in-app-listener).

#### shouldShow(InAppMessageData inAppMessageData) {id=on-in-app-listener-should-show}

This method is called after an in-app message is loaded and Synerise SDK asks for permission to show it.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2050">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2050-0" data-tab-group="tabgrp-2050" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2050-1" data-tab-group="tabgrp-2050">Kotlin</button></div>

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

```Java
boolean shouldShow(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
shouldShow(inAppMessageData: InAppMessageData): boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onShown(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-shown}

This method is called after an in-app message appears.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2051">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2051-0" data-tab-group="tabgrp-2051" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2051-1" data-tab-group="tabgrp-2051">Kotlin</button></div>

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

```Java
void onShown(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onShown(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onDismissed(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-dismissed}

This method is called after an in-app message disappears.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2052">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2052-0" data-tab-group="tabgrp-2052" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2052-1" data-tab-group="tabgrp-2052">Kotlin</button></div>

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

```Java
void onDismissed(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onDismissed(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onContextFromAppRequired(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-context-from-app-required}

This method is called when an individual context (for example a profile ID, an item SKU) for an in-app message is needed.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2053">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2053-0" data-tab-group="tabgrp-2053" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2053-1" data-tab-group="tabgrp-2053">Kotlin</button></div>

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

```Java
HashMap<String, Object> onContextFromAppRequired(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onContextFromAppRequired(inAppMessageData: InAppMessageData): HashMap<String, Object>
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onHandledOpenUrl(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-handled-open-url}

This method is called when the [`SRInApp.openUrl(url)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#open-url) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2054">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2054-0" data-tab-group="tabgrp-2054" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2054-1" data-tab-group="tabgrp-2054">Kotlin</button></div>

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

```Java
void onHandledOpenUrl(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onHandledOpenUrl(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onHandledOpenDeepLink(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-handled-open-deeplink}

This method is called when the [`SRInApp.openDeeplink(url)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#open-deeplink) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2055">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2055-0" data-tab-group="tabgrp-2055" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2055-1" data-tab-group="tabgrp-2055">Kotlin</button></div>

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

```Java
void onHandledOpenDeepLink(InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onHandledOpenDeepLink(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onCustomAction(String identifier, HashMap<String, Object> params, InAppMessageData inAppMessageData) {id=on-in-app-listener-on-custom-action}

This method is called when the [`SRInApp.handleCustomAction(name, params)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#trigger-a-custom-action) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2056">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2056-0" data-tab-group="tabgrp-2056" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2056-1" data-tab-group="tabgrp-2056">Kotlin</button></div>

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

```Java
void onCustomAction(String identifier, HashMap<String, Object> params, InAppMessageData inAppMessageData)
```

</div>

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

```Kotlin
onCustomAction(identifier: String, params: HashMap<String, Object> , inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |
| **identifier** | String | Identifier of the custom action. |
| **params** | HashMap<String, Object> | Custom action parameters. |

---
---

## OnInlineInAppListener {id=on-inline-in-app-listener}
A listener to handle global events for [inline in-app messages](/developers/mobile-sdk/campaigns/in-app-message/inline-in-app).
  
To set your object with listener methods, you must use [this method](/developers/mobile-sdk/method-reference/android/campaigns#set-inline-in-app-listener).

#### onInlineInAppAvailable(InlineInAppView view, InlineInAppMessageData data) {id=on-inline-in-app-listener-on-inline-in-app-available}

This method is called when the SDK creates a ready-to-display component after an event-based trigger for a placement with no existing host view.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2057">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2057-0" data-tab-group="tabgrp-2057" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2057-1" data-tab-group="tabgrp-2057">Kotlin</button></div>

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

```Java
void onInlineInAppAvailable(InlineInAppView view, InlineInAppMessageData data)
```

</div>

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

```Kotlin
onInlineInAppAvailable(view: InlineInAppView, data: InlineInAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **view** | InlineInAppView | The ready-to-display inline in-app view. |
| **data** | InlineInAppMessageData | Inline in-app message data. |

#### onContextFromAppRequired(InAppMessageData data) {id=on-inline-in-app-listener-on-context-from-app-required}

This method is called when a per-message context is needed for rendering. This method is called on a background thread.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2058">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2058-0" data-tab-group="tabgrp-2058" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2058-1" data-tab-group="tabgrp-2058">Kotlin</button></div>

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

```Java
Map<String, Object> onContextFromAppRequired(InAppMessageData data)
```

</div>

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

```Kotlin
onContextFromAppRequired(data: InAppMessageData): MutableMap<String, Any>
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InAppMessageData | In-app message data. |

#### onOpenedUrl(InlineInAppMessageData data, String url) {id=on-inline-in-app-listener-on-opened-url}

This method is called when the `SRInApp.openUrl(url)` method is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2059">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2059-0" data-tab-group="tabgrp-2059" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2059-1" data-tab-group="tabgrp-2059">Kotlin</button></div>

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

```Java
void onOpenedUrl(InlineInAppMessageData data, String url)
```

</div>

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

```Kotlin
onOpenedUrl(data: InlineInAppMessageData, url: String)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **url** | String | The URL to open. |

#### onOpenedDeepLink(InlineInAppMessageData data, String deepLink) {id=on-inline-in-app-listener-on-opened-deep-link}

This method is called when the `SRInApp.openDeeplink(url)` method is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2060">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2060-0" data-tab-group="tabgrp-2060" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2060-1" data-tab-group="tabgrp-2060">Kotlin</button></div>

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

```Java
void onOpenedDeepLink(InlineInAppMessageData data, String deepLink)
```

</div>

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

```Kotlin
onOpenedDeepLink(data: InlineInAppMessageData, deepLink: String)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **deepLink** | String | The deep link value. |

#### onCustomAction(InlineInAppMessageData data, String name, Map<String, Object> params) {id=on-inline-in-app-listener-on-custom-action}

This method is called when the `SRInApp.handleCustomAction(name, params)` method is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2061">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2061-0" data-tab-group="tabgrp-2061" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2061-1" data-tab-group="tabgrp-2061">Kotlin</button></div>

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

```Java
void onCustomAction(InlineInAppMessageData data, String name, Map<String, Object> params)
```

</div>

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

```Kotlin
onCustomAction(data: InlineInAppMessageData, name: String, params: Map<String, Any>)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **name** | String | Name of the custom action. |
| **params** | Map<String, Object> | Custom action parameters. |

#### onCustomMethod(String name, HashMap<String, Object> params, InlineInAppMessageData data, InAppCustomMethodCompletion completion) {id=on-inline-in-app-listener-on-custom-method}

This method is called when the `SRInApp.customMethod(name, params)` method is used in an in-app message. Resolve the completion exactly once with success or failure.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2062">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2062-0" data-tab-group="tabgrp-2062" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2062-1" data-tab-group="tabgrp-2062">Kotlin</button></div>

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

```Java
void onCustomMethod(String name, HashMap<String, Object> params, InlineInAppMessageData data, InAppCustomMethodCompletion completion)
```

</div>

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

```Kotlin
onCustomMethod(name: String, params: HashMap<String, Any>, data: InlineInAppMessageData, completion: InAppCustomMethodCompletion)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **name** | String | Name of the custom method. |
| **params** | HashMap<String, Object> | Custom method parameters. |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **completion** | InAppCustomMethodCompletion | Completion to resolve with `success()` or `failure()`. |

---
---

## OnInlineInAppViewListener {id=on-inline-in-app-view-listener}
A per-component listener to handle the lifecycle of an [inline in-app message](/developers/mobile-sdk/campaigns/in-app-message/inline-in-app) view.

#### onProcessingStarted() {id=on-inline-in-app-view-listener-on-processing-started}

This method is called when the SDK starts processing a campaign for this component.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2063">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2063-0" data-tab-group="tabgrp-2063" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2063-1" data-tab-group="tabgrp-2063">Kotlin</button></div>

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

```Java
void onProcessingStarted()
```

</div>

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

```Kotlin
onProcessingStarted()
```

</div>
</div>


#### onLoaded(InlineInAppMessageData data) {id=on-inline-in-app-view-listener-on-loaded}

This method is called when the inline in-app message content is loaded for the first time.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2064">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2064-0" data-tab-group="tabgrp-2064" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2064-1" data-tab-group="tabgrp-2064">Kotlin</button></div>

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

```Java
void onLoaded(InlineInAppMessageData data)
```

</div>

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

```Kotlin
onLoaded(data: InlineInAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |

#### onUpdated(InlineInAppMessageData data) {id=on-inline-in-app-view-listener-on-updated}

This method is called when the inline in-app message content is updated with a new campaign.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2065">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2065-0" data-tab-group="tabgrp-2065" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2065-1" data-tab-group="tabgrp-2065">Kotlin</button></div>

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

```Java
void onUpdated(InlineInAppMessageData data)
```

</div>

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

```Kotlin
onUpdated(data: InlineInAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |

#### onFailed(InlineInAppMessageData data, String error) {id=on-inline-in-app-view-listener-on-failed}

This method is called when the inline in-app message content fails to load or render.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2066">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2066-0" data-tab-group="tabgrp-2066" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2066-1" data-tab-group="tabgrp-2066">Kotlin</button></div>

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

```Java
void onFailed(InlineInAppMessageData data, String error)
```

</div>

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

```Kotlin
onFailed(data: InlineInAppMessageData, error: String)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **error** | String | Error description. |

#### onSizeChanged(InlineInAppMessageData data, InlineInAppSize size) {id=on-inline-in-app-view-listener-on-size-changed}

This method is called when the in-app message content requests a size change via the `SRInApp.setComponentSize(width, height)` JS method. The measured size is delivered as an `InlineInAppSize`, exposing it in physical pixels, density-independent pixels (dp), and as a fraction of the device screen.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2067">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2067-0" data-tab-group="tabgrp-2067" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2067-1" data-tab-group="tabgrp-2067">Kotlin</button></div>

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

```Java
void onSizeChanged(InlineInAppMessageData data, InlineInAppSize size)
```

</div>

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

```Kotlin
onSizeChanged(data: InlineInAppMessageData, size: InlineInAppSize)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |
| **size** | InlineInAppSize | The requested size. Exposes `getWidthPx()`/`getHeightPx()` (physical pixels), `getWidthDp()`/`getHeightDp()` (density-independent pixels), and `getWidthScreenRatio()`/`getHeightScreenRatio()` (0..1 fraction of the screen). |

#### onRemove(InlineInAppMessageData data) {id=on-inline-in-app-view-listener-on-remove}

This method is called when the in-app message content requests removal from the view hierarchy via the `SRInApp.close()` or `SRInApp.closeAndTrigger()` JS method.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2068">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2068-0" data-tab-group="tabgrp-2068" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2068-1" data-tab-group="tabgrp-2068">Kotlin</button></div>

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

```Java
void onRemove(InlineInAppMessageData data)
```

</div>

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

```Kotlin
onRemove(data: InlineInAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **data** | InlineInAppMessageData | Inline in-app message data. |

---
---

## OnLocationUpdateListener {id=on-location-update-listener}
A listener to handle events about location.

#### onLocationUpdateRequired() {id=on-location-update-listener-on-location-update-required}

This method is called when the Tracker module requests a location update.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2069">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2069-0" data-tab-group="tabgrp-2069" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2069-1" data-tab-group="tabgrp-2069">Kotlin</button></div>

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

```Java
- void onLocationUpdateRequired()
```

</div>

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

```Kotlin
fun onLocationUpdateRequired()
```

</div>
</div>


---
---

## OnContentWidgetListener {id=on-content-widget-listener}
A listener to handle [Content Widget](/developers/mobile-sdk/displaying-recommendations/content-widget) actions.

#### onLoad(ContentWidget contentWidget) {id=on-content-widget-listener-on-load}

This method is called after a widget is loaded.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2070">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2070-0" data-tab-group="tabgrp-2070" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2070-1" data-tab-group="tabgrp-2070">Kotlin</button></div>

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

```Java
- void onLoad(ContentWidget contentWidget)
```

</div>

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

```Kotlin
fun onLoad(contentWidget:ContentWidget)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget` | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |

#### onLoadingError(ContentWidget contentWidget, ApiError apiError) {id=on-content-widget-listener-on-loading-error}

This method is called when an error occurs while loading a widget.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2071">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2071-0" data-tab-group="tabgrp-2071" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2071-1" data-tab-group="tabgrp-2071">Kotlin</button></div>

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

```Java
- void onLoadingError(ContentWidget contentWidget, ApiError apiError)
```

</div>

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

```Kotlin
fun onLoadingError(contentWidget:ContentWidget, apiError:ApiError)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **apiError** | [ApiError](/developers/mobile-sdk/class-reference/android/miscellaneous#apierror) | The error that occurred |

#### onClickActionReceive(ContentWidget contentWidget, BaseModel model) {id=on-content-widget-listener-on-click-action-receive}

This method is called when the customer clicks a widget’s item.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2072">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2072-0" data-tab-group="tabgrp-2072" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2072-1" data-tab-group="tabgrp-2072">Kotlin</button></div>

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

```Java
- void onClickActionReceive(ContentWidget contentWidget, BaseModel model)
```

</div>

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

```Kotlin
fun onClickActionReceive(contentWidget:ContentWidget, model:BaseModel)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **model** | BaseModel | The model's object that was clicked |

#### onLoading(ContentWidget contentWidget, boolean isLoading) {id=on-content-widget-listener-on-loading}

This method is called when the widget’s loading state changes.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2073">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2073-0" data-tab-group="tabgrp-2073" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2073-1" data-tab-group="tabgrp-2073">Kotlin</button></div>

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

```Java
- void onLoading(ContentWidget contentWidget, boolean isLoading)
```

</div>

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

```Kotlin
fun onLoading(contentWidget:ContentWidget, isLoading:Boolean)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **isLoading** | Boolean | Widget's loading state |

#### onSizeChange(ContentWidget contentWidget, ViewGroup.LayoutParams size) {id=on-content-widget-listener-on-size-change}

This method is called when the widget’s size changes.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-2074">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-2074-0" data-tab-group="tabgrp-2074" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-2074-1" data-tab-group="tabgrp-2074">Kotlin</button></div>

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

```Java
- void onSizeChange(ContentWidget contentWidget, ViewGroup.LayoutParams size)
```

</div>

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

```Kotlin
fun onSizeChange(contentWidget:ContentWidget, size:ViewGroup.LayoutParams)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **size** | ViewGroup.LayoutParams | Widget's new size |

