Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions VerloopSDK/VLConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public typealias LiveChatUrlClickListener = (_ url : String?) -> Void
case openWidget
case openMenuWidget
case closeWidget
case logout
case close
case widgetColor
case showDownloadButton
Expand Down
27 changes: 27 additions & 0 deletions VerloopSDK/VLWebViewManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ class VLWebViewManager: NSObject,WKUIDelegate, WKNavigationDelegate {
var _eventDelegate:VLEventDelegate?
private var configParams:[VLConfig.APIMethods] = []
var onMessageReceived:(() -> Void)?

func getRoomReadyConfigurations() -> [VLConfig.APIMethods] {
return roomReadyConfigurations
}

func setRoomReadyConfigurations(_ configs: [VLConfig.APIMethods]) {
roomReadyConfigurations = configs
}

init(config: VLConfig) {

Expand Down Expand Up @@ -163,6 +171,14 @@ class VLWebViewManager: NSObject,WKUIDelegate, WKNavigationDelegate {
}

func logoutSession() {
// If webview not ready, queue logout to execute when room is ready
if !isRoomReady {
if !roomReadyConfigurations.contains(.logout) {
roomReadyConfigurations.append(.logout)
}
return
}

webView.evaluateJavaScript(String.getLogoutEvaluationJS()) {[weak self] _, error in
print("logout error \(error?.localizedDescription ?? "NA")")
if error == nil {// when user is logged out, clear the local cookies
Expand Down Expand Up @@ -303,6 +319,15 @@ extension VLWebViewManager {
case .close :
webView.evaluateJavaScript(String.getCloseEvaluateJS()) { _, error in
print("getCloseEvaluateJS error \(error?.localizedDescription ?? "NA")")
self.loadWebView()
}
case .logout:
webView.evaluateJavaScript(String.getLogoutEvaluationJS()) {[weak self] _, error in
print("processRoomReadyConfigurations logout error \(error?.localizedDescription ?? "NA")")
if error == nil {
self?.clearLocalStorageVistorToken()
self?.loadWebView()
}
}
case .closeWidget:
webView.evaluateJavaScript(String.getWidgetClosedEvaluationJS()) {[weak self] _, error in
Expand Down Expand Up @@ -496,6 +521,7 @@ extension VLWebViewManager:ScriptMessageDelegate {
case .FunctionCloseComplete:
clearLocalStorageVistorToken()
self.didReceiveCallbackEventsOnLivechat(message: bodyString, data: bodyData)
self.loadWebView()
case .FunctionChatMinimized:
_eventDelegate?.onChatMinimized?()
// _eventDelegate?.didEventOccurOnLiveChat(.onChatMinimized)
Expand Down Expand Up @@ -548,6 +574,7 @@ extension VLWebViewManager:ScriptMessageDelegate {
_eventDelegate?.onChatStarted?()
case FunctionType.FunctionLogOutCompleted.rawValue:
_eventDelegate?.onLogoutComplete?()
self.loadWebView()
default:break
}
}
Expand Down
36 changes: 35 additions & 1 deletion VerloopSDK/VerloopSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,42 @@ import Foundation
}
}
}

@objc private func recreateWebView() {
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }

// extract old configurations and delegates
let oldManager = self.manager
let queued = oldManager?.getRoomReadyConfigurations() ?? []
let eventDelegate = oldManager?._eventDelegate

// kill old webview
oldManager?.webView = nil

// create new webview
self.manager = VLWebViewManager(config: self.config)
self.manager.jsDelegate(delegate: self)
self.manager.setRoomReadyConfigurations(queued)
if let ed = eventDelegate {
self.manager.addEventChangeDelegate(ed)
}

// If controller already exists, attach the new webview into its view
if let controller = self.verloopController {
controller.setWebView(webView: self.manager)
controller.setSDK(verloopSDK: self)
}
}
}

@objc public func close() {
self.manager.close()
}

@objc public func closeChat() {
self.manager.close()
}

@objc public func observeLiveChatEventsOn(vlEventDelegate delegate:VLEventDelegate) {
if manager != nil {
Expand All @@ -87,8 +119,10 @@ import Foundation

@objc public func logout() {
manager.logoutSession()
clearConfig()
config.clear()
config.clearUserDetails()
self.clearLocalStorage()
self.recreateWebView()
}

@objc public func clearConfig(){
Expand Down
2 changes: 1 addition & 1 deletion VerloopSDKiOS.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Pod::Spec.new do |spec|
#

spec.name = "VerloopSDKiOS"
spec.version = "0.2.16"
spec.version = "0.2.19"
spec.summary = "VerloopSDKiOS - client side iOS livechat"

# This description is used to generate tags and improve search results.
Expand Down