---
title: "AI customer service chat SDK for iOS and Android — Dazza"
description: "Put Dazza in your iOS, Android, React Native or Flutter app: the same agent, knowledge and team inbox as your website, with signed-in customers recognised."
url: https://dazza.io/channels/mobile-apps
---

# Your app. Same Dazza.

Dazza adds AI customer service chat to your iOS, Android, React Native or Flutter app. It’s the same agent, knowledge and workflows as your website, signed-in customers are recognised, and every conversation lands in your team’s inbox.

- **4**: Platforms: iOS, Android, React Native, Flutter
- **1 inbox**: App, web and email together
- **Signed**: Customers recognised
- **No update**: New features arrive by themselves

## A few lines. Then it’s in.

Settings → Install → In your app has each snippet with your agent’s key already in it.

### Add the SDK

React Native and Expo, Swift (UIKit and SwiftUI), Kotlin or Java, or Flutter.

### Set your agent

One line with your agent’s key, from Settings.

### Open the chat

From your own button, or use the ready-made one with an unread badge.

### Sign customers in

Optional: pass the same signed login as your website.

```
import { DazzaButton } from "@dazzaio/react-native";

<DazzaButton agent="dz_…" label="Help" userToken={signedLogin} />
```

```
import Dazza

Dazza.configure(agent: "dz_…")
Dazza.identify(token: signedLogin)   // optional
Dazza.present(from: self)            // or .sheet { DazzaChatView() }
```

```
Dazza.configure("dz_…")
Dazza.identify(signedLogin)   // optional
Dazza.open(context)
```

```
import 'package:dazza/dazza.dart';

DazzaChat.open(context, agent: 'dz_…', userToken: signedLogin);
```

## They’re signed in. Dazza knows it.

Your server signs a short login for the customer and the app passes it in. Dazza treats them as verified, so workflows about their own orders and account run without an email code. Sign out, and the next person on the phone starts fresh.

- Signed with your secret (HS256), on your server
- Kept out of server logs
- Sign in and out without reopening the chat

```
// Any web view, any framework
https://app.dazza.io/w/dz_…?embed=app#token=<signed login>

// The page tells your app what happened
{ "source": "dazza", "type": "ready" | "message" | "close" }

// Sign in or out later, without a reload
window.Dazza.identify(token)   // or null
```

## Small in your app. Big on the details.

### Unread badges

A callback for every new reply, from Dazza or your team.

### Your team, in the app

When someone on your team replies, the customer sees it in the app.

### Remembers the chat

Conversations carry on between launches on the same phone.

### Links open properly

Links in answers open in the phone’s browser, not inside the chat.

### Your colours and name

The same look you set for your website chat.

### Updates itself

The chat is served by Dazza, so improvements reach your app without a release.

## Mobile apps, explained.

Step by step in the [help centre](https://dazza.io/help/mobile-apps).

### Does it work with Expo?

Yes. Add `react-native-webview` with `npx expo install` and use the React Native SDK.

### We use a different framework. Can we still add it?

Yes. Load your agent’s chat link with `?embed=app` in any web view. The page sends simple messages your app can listen for.

### Do app conversations count towards our plan?

Yes, the same as a website chat. Follow-ups in the same conversation don’t count again.

### Can we send push notifications for replies?

Not yet. While the chat is open, your app gets a callback for every reply, so you can show a badge.

### Which plans include the mobile SDKs?

Growth, Scale and Enterprise. See [pricing](https://dazza.io/pricing).
