# Live Chat SDK Swift

### Configuration

To use this SDK connector, you must meet the following requirements:&#x20;

* XCode 10.0+ (recommended to use  XCode 12.1+)
* Swift 4.0, 4.1, 4.2, 5.0

### Installation

{% hint style="info" %}
Recommended to use framework from .xcframework.&#x20;
{% endhint %}

Steps to install using this framework:&#x20;

1. Obtain file `imi_dolphin_livechat_ios_xcframework`
2. Open your **Xcode** project and navigate to  **Project Settings > General**
3. Under **Framework**, **Libraries,** and **Embedded Content**, click button **'+'** and select **Add Other...** > **Add Files..**
4. Locate and add `imi_dolphin_livechat_ios_xcframework` to your project&#x20;
5. Ensure that **Embed & Sign i**s selected to properly bundle the framework with your app
6. Repeat the same steps to add any dependencies like `StompClientLib` dan `CryptoSwift.xcframework` if needed&#x20;

### Import Library&#x20;

Add the following import statement at the top of your Swift file:&#x20;

```swift
import imi_dolphin_livechat_ios
```

### Initialize User Profile&#x20;

Create a user profile using the class`DolphinProfile` :

```swift
let dolphinProfile = DolphinProfile(
name: nameTextField.text!,
email: emailTextField.text!,
phoneNumber: phoneTextField.text!,
customerId: "",
uid: ""
)
```

**Component Explanation:**

<table><thead><tr><th width="316">Name</th><th>Description</th></tr></thead><tbody><tr><td>DolphinProfile</td><td>Represents the identify of the user initiating the chat</td></tr><tr><td>name</td><td>Represents the name of the user </td></tr><tr><td>email</td><td>Represents the user's email </td></tr><tr><td>phoneNumber</td><td>Represents the user's phone number</td></tr><tr><td>uid</td><td>Used to determine whether this user session will create a new ticket or not </td></tr></tbody></table>

### Initialize Connection Variables&#x20;

Define the required notification listeners and connection variables:

```swift
var connector: Connector?
let notificationMessage = "com.connector.notificationMessage"
let notificationConnectionStatus = "com.connector.connectionStatus"
let notificationReadMessage = "com.connector.notificationReadMessage"
let notificationTypingCondition = "com.connector.notificationTypingCondition"
```

### Setup Connection in viewDidLoad

```swift
connector!.setupConnection(baseUrl: baseUrl, clientId: clientId, clientSecrect: clientSecrect)
connector?.enableGetQueue(isEnable: false)
connector!.constructConnector(profile: dolphinProfile!)

NotificationCenter.default.addObserver(self, selector: #selector(doOnReceiveMessage(_:)), name: Notification.Name(rawValue: notificationMessage), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(doUpdateConnectionStatus(_:)), name: Notification.Name(rawValue: notificationConnectionStatus), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(doUpdateStatusMessage(_:)), name: Notification.Name(rawValue: notificationReadMessage), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(doUpdateTypingCondition(_:)), name: Notification.Name(rawValue: notificationTypingCondition), object: nil)

```

### Implement Notification Handlers

```swift
@objc func doOnReceiveMessage(_ notification: NSNotification) {
let newMessage = notification.object as! DolphinMessage
// Handle received message
}
@objc func doUpdateConnectionStatus(_ notification: NSNotification) {
let status: Int = notification.object as! Int
// Handle connection status updates
}
@objc func doUpdateStatusMessage(_ notification: NSNotification){
let updatedMessage = notification.object as! DolphinMessage
// Handle message status updates
}
@objc func doUpdateTypingCondition(_ notification: NSNotification){
// Handle typing condition updates
}
```

### Sending Messages

#### Send Text Message

```swift
connector?.onSendMessage(messages: "TEXT_MESSAGE_STRING", dataUser: sample)
```

#### Send Image&#x20;

Ensure image file meets these conditions:

* Image size must be under 2MB
* Using format PNG or JPEG

```swift
connector!.sendAttachment(fileNsUrl: "IMAGE_FILEPATH", state: state!, dataUser: sample)
```

#### Send Video

Ensure video file meets these conditions:

* Video size must be under 2MB
* Using format MP4

```swift
connector!.sendAttachment(fileNsUrl: "VIDEO_FILEPATH", state: state!, dataUser: sample)
```

#### Send File (Document and Audio as File)&#x20;

Ensure documents file meets these conditions:

* Document/Audio size must be under 2MB
* Memiliki format PDF

```swift
connector?.sendAttachment(fileNsUrl: AUDIO/DOCUMENT_FILEPATH as NSURL, state: state!, dataUser: sampl
```


---

# 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://docs.3dolphins.ai/integration/channel-connector/live-chat/live-chat-sdk-swift.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.
