# Event dispatchers

*Available in Batch 1.15.0 and higher*

In this article, we'll go through the process of improving your external analytics by either installing a premade event dispatcher or making your own one.

## What is an event dispatcher?

Batch can trigger with a number of analytics-oriented events that might be of interest in external analytic tools. An event dispatcher is the code that listens to those events, and *dispatches* them to the solution of your choice.

## Add a "ready-to-go" dispatcher

Batch provide you with premade dispatchers for specific use cases (aka ready-to-go dispatcher). They are enabled by simply adding them in your dependency, and will automatically track events into your analytics solution with a predetermined structure

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Firebase</td><td><a href="/files/zpHPW4tR7ynd1ljbM3f6">/files/zpHPW4tR7ynd1ljbM3f6</a></td><td><a href="/pages/abm9JHhFWK5cFwj851My">/pages/abm9JHhFWK5cFwj851My</a></td></tr><tr><td>Piano Analytics</td><td><a href="/files/nHmWYs8ac6qktJqfVtEm">/files/nHmWYs8ac6qktJqfVtEm</a></td><td><a href="/pages/blpPvkUPCugBmEnvyp6F">/pages/blpPvkUPCugBmEnvyp6F</a></td></tr><tr><td>AT Internet</td><td><a href="/files/gKoSbZ8joFjPJ98a1R6v">/files/gKoSbZ8joFjPJ98a1R6v</a></td><td><a href="/pages/rRJ15vhGb5ckCKuPMgOW">/pages/rRJ15vhGb5ckCKuPMgOW</a></td></tr><tr><td>Mixpanel</td><td><a href="/files/oW4UrBxGi1R5mbkvUH5v">/files/oW4UrBxGi1R5mbkvUH5v</a></td><td><a href="/pages/O10IC61bRkMGSd1d3LqG">/pages/O10IC61bRkMGSd1d3LqG</a></td></tr></tbody></table>

## Create a custom dispatcher

Or, if you need, you can implement your own dispatcher.

{% content-ref url="/pages/xv80g6BWtqeiFVeoW67o" %}
[Custom](/developer/sdk/android/event-dispatchers/custom.md)
{% endcontent-ref %}

## Access data from the event

The Batch SDK will inform you when one of the following event happen:

* Push notification displayed : Triggered when a push notification is displayed (only available on Android).
* Push notification clicked : Triggered when a push notification is clicked.
* Push notification dismissed : Triggered when a push notification is dismissed (only available on Android).
* Message showed : Triggered when an in-app or landing message appear on the screen.
* Message closed : Triggered when an in-app or landing message is explicitly closed by the user (using the close button or a dismiss CTA/Global tap).
* Message auto-closed : Triggered when an in-app message or landing is closed by the auto-close timer.
* Message clicked : Triggered when an in-app or landing Click-To-Action is clicked or when the in-app/landing is global tapped (except if the CTA/Global Tap is a dismiss, then a closed event is triggered).

With every events come a `Payload` object, allowing you to access data associated with the event, such as a push notification custom payload value, or the tracking ID of an in-app or landing campaign.

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

```kotlin
override fun dispatchEvent(type: Batch.EventDispatcher.Type, payload: Batch.EventDispatcher.Payload) {
    Log.d("Dispatcher", "I'm dispatching : " + type.name + ", " + payload.trackingId)
}
```

{% endtab %}

{% tab title="Java" %}

```java
public void dispatchEvent(@NonNull Batch.EventDispatcher.Type type, @NonNull Batch.EventDispatcher.Payload payload){
    Log.d("Dispatcher", "I'm dispatching : " + type.name() + ", " + payload.getTrackingId());
}
```

{% 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://doc.batch.com/developer/sdk/android/event-dispatchers.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.
