Skip to content

Commit 791828b

Browse files
authored
Merge pull request #101 from verloop/dev_master
Dev master
2 parents a0843df + 10ecc98 commit 791828b

4 files changed

Lines changed: 64 additions & 2 deletions

File tree

VerloopSDK/VLConfig.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public typealias LiveChatUrlClickListener = (_ url : String?) -> Void
4343
case openWidget
4444
case openMenuWidget
4545
case closeWidget
46+
case logout
4647
case close
4748
case widgetColor
4849
case showDownloadButton

VerloopSDK/VLWebViewManager.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ class VLWebViewManager: NSObject,WKUIDelegate, WKNavigationDelegate {
3434
var _eventDelegate:VLEventDelegate?
3535
private var configParams:[VLConfig.APIMethods] = []
3636
var onMessageReceived:(() -> Void)?
37+
38+
func getRoomReadyConfigurations() -> [VLConfig.APIMethods] {
39+
return roomReadyConfigurations
40+
}
41+
42+
func setRoomReadyConfigurations(_ configs: [VLConfig.APIMethods]) {
43+
roomReadyConfigurations = configs
44+
}
3745

3846
init(config: VLConfig) {
3947

@@ -163,6 +171,14 @@ class VLWebViewManager: NSObject,WKUIDelegate, WKNavigationDelegate {
163171
}
164172

165173
func logoutSession() {
174+
// If webview not ready, queue logout to execute when room is ready
175+
if !isRoomReady {
176+
if !roomReadyConfigurations.contains(.logout) {
177+
roomReadyConfigurations.append(.logout)
178+
}
179+
return
180+
}
181+
166182
webView.evaluateJavaScript(String.getLogoutEvaluationJS()) {[weak self] _, error in
167183
print("logout error \(error?.localizedDescription ?? "NA")")
168184
if error == nil {// when user is logged out, clear the local cookies
@@ -303,6 +319,15 @@ extension VLWebViewManager {
303319
case .close :
304320
webView.evaluateJavaScript(String.getCloseEvaluateJS()) { _, error in
305321
print("getCloseEvaluateJS error \(error?.localizedDescription ?? "NA")")
322+
self.loadWebView()
323+
}
324+
case .logout:
325+
webView.evaluateJavaScript(String.getLogoutEvaluationJS()) {[weak self] _, error in
326+
print("processRoomReadyConfigurations logout error \(error?.localizedDescription ?? "NA")")
327+
if error == nil {
328+
self?.clearLocalStorageVistorToken()
329+
self?.loadWebView()
330+
}
306331
}
307332
case .closeWidget:
308333
webView.evaluateJavaScript(String.getWidgetClosedEvaluationJS()) {[weak self] _, error in
@@ -496,6 +521,7 @@ extension VLWebViewManager:ScriptMessageDelegate {
496521
case .FunctionCloseComplete:
497522
clearLocalStorageVistorToken()
498523
self.didReceiveCallbackEventsOnLivechat(message: bodyString, data: bodyData)
524+
self.loadWebView()
499525
case .FunctionChatMinimized:
500526
_eventDelegate?.onChatMinimized?()
501527
// _eventDelegate?.didEventOccurOnLiveChat(.onChatMinimized)
@@ -548,6 +574,7 @@ extension VLWebViewManager:ScriptMessageDelegate {
548574
_eventDelegate?.onChatStarted?()
549575
case FunctionType.FunctionLogOutCompleted.rawValue:
550576
_eventDelegate?.onLogoutComplete?()
577+
self.loadWebView()
551578
default:break
552579
}
553580
}

VerloopSDK/VerloopSDK.swift

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,42 @@ import Foundation
5757
}
5858
}
5959
}
60+
61+
@objc private func recreateWebView() {
62+
DispatchQueue.main.async { [weak self] in
63+
guard let self = self else { return }
64+
65+
// extract old configurations and delegates
66+
let oldManager = self.manager
67+
let queued = oldManager?.getRoomReadyConfigurations() ?? []
68+
let eventDelegate = oldManager?._eventDelegate
69+
70+
// kill old webview
71+
oldManager?.webView = nil
72+
73+
// create new webview
74+
self.manager = VLWebViewManager(config: self.config)
75+
self.manager.jsDelegate(delegate: self)
76+
self.manager.setRoomReadyConfigurations(queued)
77+
if let ed = eventDelegate {
78+
self.manager.addEventChangeDelegate(ed)
79+
}
80+
81+
// If controller already exists, attach the new webview into its view
82+
if let controller = self.verloopController {
83+
controller.setWebView(webView: self.manager)
84+
controller.setSDK(verloopSDK: self)
85+
}
86+
}
87+
}
6088

6189
@objc public func close() {
6290
self.manager.close()
6391
}
92+
93+
@objc public func closeChat() {
94+
self.manager.close()
95+
}
6496

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

88120
@objc public func logout() {
89121
manager.logoutSession()
90-
clearConfig()
122+
config.clear()
91123
config.clearUserDetails()
124+
self.clearLocalStorage()
125+
self.recreateWebView()
92126
}
93127

94128
@objc public func clearConfig(){

VerloopSDKiOS.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |spec|
1616
#
1717

1818
spec.name = "VerloopSDKiOS"
19-
spec.version = "0.2.18"
19+
spec.version = "0.2.19"
2020
spec.summary = "VerloopSDKiOS - client side iOS livechat"
2121

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

0 commit comments

Comments
 (0)