# iOS Framework

Mluvii poskytuje dva frameworky pro integraci s vaší aplikací. [První framework](https://github.com/mluvii/MluviiIOSLibrary) pracuje s webView z WebKit sady. [Druhý framework](https://github.com/mluvii/mluviiIOSLibraryWithUIViewRepresentable) používá SwiftUI.

Námi poskytnutý kód umožňuje:

* inicializace view s widgetem s údaji vaší společnosti,
* oznámení o změně stavu widgetu,
* otevření chatu,
* zavření chatu a načtení stránky s widgetem,
* obshluhu kliknutí na odkaz v chatu.

### Přidání vlastních parametrů:

{% hint style="warning" %}
*V případě přidání vlastních parametrů je nutné, je nejdříve nastavit v Administračním rozhraní viz* [*Aplikace.*](/pro-administratory/sprava-tenantu/nastaveni/aplikace.md)
{% endhint %}

* parametry je nutné nastavit před zavoláním `metody chat.openChat()`
* volání `chat.openChat()` a `chat.addCustomData()` je možné volat až po obdržení informace o updatu stavu proto je nejvhodnější použít callback `chat.setStatusUpdater()`

```
chat?.setStatusUpdater(statusF: statusUpdate)

private func statusUpdate(status: Int32) -> Void {
    ...
    chat.addCustomData(name: "param_name", value: "param_value")
    chat.openChat()
    ...
}
```

Přidat vlastní obsluhu kliknutí na odkaz v chatu:

* klik na odkaz je možné obsloužit vlastní funkcí předáním `navigationActionCustomDelegate` při vytváření view

```
var chat = MluviiChatLibrary()
chat.createUIView(
    url: "apptest.mluvii.com",
    companyGuid: "295b1064-cf5b-4a5d-9e05-e7a74f86ae5e",
    tenantId: "1",
    presetName: nil,
    language: nil,
    scope: nil,
    navigationActionCustomDelegate: self.navigationActionDelegate
)
...
    public func navigationActionDelegate(webView: WKWebView, navigationAction: WKNavigationAction) -> WKWebView? {
        if navigationAction.targetFrame == nil, let url = navigationAction.request.url {
          if url.description.lowercased().range(of: "http://") != nil ||
            url.description.lowercased().range(of: "https://") != nil ||
            url.description.lowercased().range(of: "mailto:") != nil {
            UIApplication.shared.openURL(url)
          }
        }
      return nil
    }
...
```

{% hint style="danger" %}
***Aby bylo možné využívat audia a videa v aplikaci, je nutné Povolit práva pro přístup ke kameře a mikrofonu.***
{% endhint %}

### Odchytávání eventů pro začátek a konec sezení

Pro odchytávání eventů z aplikace je možné použít funkci setMluviiEventCallbackFunc, ukázka je vložená níže:

```
chat?.setMluviiEventCallbackFunc(eventF: { event, sessionId in
            print("Event and sessionID", event, sessionId ?? 0)
        })
```

{% hint style="success" %}
*Pokud projekt stažený z GitHubu nepůjde spustit z důvodu, že nelze nalézt framework „MluviiChat“, doporučujeme překompilovat projekt „MluviiChat“ a nově vytvořeným souborem „MluviiChat.framework“ nahradit „MluviiChat.framework“ v projektu „TestWebkitWebview“.*
{% endhint %}

{% hint style="danger" %}
*Náš framework je kompilovaný pro minimální verzi iOS 15.3.1.*
{% endhint %}

Pokud chcete, aby aplikace fungovala správně (odesílání souborů, kamera a mikrofon), je třeba v souboru info.plist přidat vysvětlení, z jakého důvodu potřebuje vaše aplikace přístup k těmto právům. Konkrétně se jedná o tyto položky:

* Privacy - Camera usage Description
* Privacy - Microphone usage Description
* Privacy - Media Library Usage Description

Více info na [Stránkách developer apple](https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/accessing_protected_resources)

**Pozor, v iOS 10 a vyšší, pokud nemáte v info.plist definici, na co práva potřebujete a aplikace se je pokusí použít, celá aplikace spadne.**

## iOS Library

{% embed url="<https://github.com/mluvii/MluviiIOSLibrary>" %}

### Vzorový kód

Najdete jej [zde](https://github.com/Mluvii/MluviiIOSLibrary/blob/master/TestWebkitWebview/TestWebkitWebview/ViewController.swift).


---

# 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.mluvii.com/pro-it-specialisty/mobilni-sdk/ios-framework.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.
