iOS Framework

Mluvii poskytuje dva frameworky pro integraci s vaší aplikací. První framework pracuje s webView z WebKit sady. Druhý framework 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ů:

  • u přidání vlastních parametrů je nutné je nejdříve nastavit v Administračním rozhraní viz Aplikace
  • 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
    }
...

Známé omezení: V tuto chvíli není možné kvůli nefunkčnosti getUserMedia v in-app WkWebView nelze pustit video v mluvii integrovaném v Aplikaci.

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“.

Náš framework je kompilovaný pro minimální verzi iOS 9.0

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

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

Vzorový kód:

//
//  ViewController.swift
//  TestWebkitWebview
//
//  Created by Mluvi Mac on 15.03.18.
//  Copyright © 2018 Mluvii. All rights reserved.
//

import UIKit
import WebKit
import MluviiChat

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{
    
    //MARK: Properties
    
    @IBOutlet weak var OpenButton: UIButton!
    var webView:WKWebView!
    var widgetState:Int32 = -1
    var chat: MluviiChatLibrary? = nil
    
    // Funkce, která zpracovává změnu stavu widgetu
    func statusUpdate(status: Int32) -> Void{
        print("Update status \(status)")
        widgetState = status
        if(widgetState == 0){
            OpenButton.backgroundColor = UIColor.gray
        }else if(widgetState == 1){
            OpenButton.backgroundColor = UIColor.green
        }else if(widgetState == 2){
            OpenButton.backgroundColor = UIColor.orange
        }
    }
    
    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
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        chat = MluviiChatLibrary()
        
        // Nastavení funkce, která určuje, co se má stát při zavření chatu
        chat?.setChatEnded {
            print("Minimize view")
            self.minimizeView()
        }
        
        // Nastavení funkce, která zpracovává změnu stavu
        chat?.setStatusUpdater(statusF: statusUpdate)
        
        // Vytvoření WKWebView, které načte url podle zadaného serveru, company GUID, tenant ID, preset name a požadovaného jazyku
        // url, companyGuid a tenantId jsou povinné proměnné, presetName, language a scope můžou být nil
        webView = chat?.createWebView(
            url: "apptest.mluvii.com",
            companyGuid: "295b1064-cf5b-4a5d-9e05-e7a74f86ae5e",
            tenantId: "1",
            presetName: "MluviiSDK",
            language: nil,
            scope: nil,
            navigationActionCustomDelegate: nil
        )
        self.view.addSubview(webView)
    }
    
    // Funkce, která otevře chat ve WebView a maximalizuje ho
    func maximizeWebView(){
        chat?.openChat()
    }
    
    // Funkce, která nastaví rozměry webView na 0,0 a změní url zpět na požadovaný widget
    func minimizeView(){
        chat?.resetUrl()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        print("Did receive memory warning")
    }
    
    
    //MARK: Actions

    @IBAction func TouchInside(_ sender: Any) {
        if(widgetState != -1){
            maximizeWebView()
        }
    }
    /**/
}

results matching ""

    No results matching ""