# 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.*](https://docs.mluvii.com/pro-administratory/sprava-tenantu/nastaveni/aplikace)
{% 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).
