WebViewJavascriptBridgeManager.swift 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. //
  2. // WebViewJavascriptBridgeManager.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/21.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import WebViewJavascriptBridge
  10. import SwiftyJSON
  11. import SwiftyMediator
  12. class WebViewJavascriptBridgeManager: NSObject {
  13. typealias CallDataClosure = (_ wbjbModel: WVJBModel) -> Void
  14. var callDataClosure : CallDataClosure?
  15. static let shared : WebViewJavascriptBridgeManager = WebViewJavascriptBridgeManager()
  16. /// 返回用户信息
  17. ///
  18. /// - Parameter bridge: 交互对象
  19. func callHandlerH5(bridge: WebViewJavascriptBridge?) {
  20. bridge?.callHandler("h5", data: UserModel.shared().getH5UserInfo())
  21. }
  22. /// 刷新
  23. ///
  24. /// - Parameters:
  25. /// - bridge: 交互对象
  26. /// - force: 是否强制
  27. func callHandlerH5Refresh(bridge: WebViewJavascriptBridge?,refreshModelType:WVJBRefreshModelType?,silent:Int? = 0) {
  28. //获取当前时间
  29. let refreshModel = WVJBRefreshModel()
  30. refreshModel.type = refreshModelType?.rawValue
  31. refreshModel.silent = silent
  32. var refreshDic = Dictionary<String,Any>()
  33. refreshDic.updateValue("refresh", forKey: "type")
  34. refreshDic.updateValue(refreshModel.toJSON() as Any, forKey: "params")
  35. bridge?.callHandler("h5", data: refreshDic)
  36. }
  37. /// 返回时间戳
  38. ///
  39. /// - Parameter bridge: 交互对象
  40. func callHandlerDatepicker(bridge: WebViewJavascriptBridge?,timestamp:Double,key:String) {
  41. let datepickerModel = WVJBDatepickerModel()
  42. datepickerModel.timestamp = timestamp * 1000
  43. datepickerModel.key = key
  44. //获取当前时间
  45. var datepickerDic = Dictionary<String,Any>()
  46. datepickerDic.updateValue("datepicker", forKey: "type")
  47. datepickerDic.updateValue(datepickerModel.toJSON() as Any, forKey: "params")
  48. bridge?.callHandler("h5", data: datepickerDic)
  49. }
  50. /// 返回话题
  51. ///
  52. /// - Parameter bridge: 交互对象
  53. func callHandlerTopic(bridge: WebViewJavascriptBridge?,topic:Array<CommunityTopicDataModel>) {
  54. var dictionary = Dictionary<String,Any>()
  55. dictionary.updateValue("selectTopic", forKey: "type")
  56. var topicDictionary = Dictionary<String,Any>()
  57. topicDictionary.updateValue(topic.toJSONString() as Any, forKey: "topic")
  58. dictionary.updateValue(topicDictionary, forKey: "params")
  59. NXLLog(JSON(dictionary))
  60. bridge?.callHandler("h5", data: dictionary)
  61. }
  62. /// 返回地理位置
  63. ///
  64. /// - Parameter bridge: 交互对象
  65. func callHandlerLocation(bridge: WebViewJavascriptBridge?,address:String? = "",latitude:String? = "",longitude:String? = "") {
  66. var dictionary = Dictionary<String,Any>()
  67. dictionary.updateValue("location", forKey: "type")
  68. var locationDictionary = Dictionary<String,Any>()
  69. locationDictionary.updateValue(address as Any, forKey: "address")
  70. locationDictionary.updateValue(latitude as Any, forKey: "latitude")
  71. locationDictionary.updateValue(longitude as Any, forKey: "longitude")
  72. dictionary.updateValue(locationDictionary, forKey: "params")
  73. NXLLog(JSON(dictionary))
  74. bridge?.callHandler("h5", data: dictionary)
  75. }
  76. /// 发布
  77. ///
  78. /// - Parameter bridge: 交互对象
  79. func callHandlerPublish(bridge: WebViewJavascriptBridge?) {
  80. //获取当前时间
  81. var dictionary = Dictionary<String,Any>()
  82. dictionary.updateValue("publish", forKey: "type")
  83. dictionary.updateValue("", forKey: "params")
  84. bridge?.callHandler("h5", data: dictionary)
  85. }
  86. /// 注册回调
  87. ///
  88. /// - Parameters:
  89. /// - bridge: 交互对象
  90. /// - callDataClosure: 回调
  91. func registerHandlerApp(bridge: WebViewJavascriptBridge?,callDataClosure:@escaping CallDataClosure) {
  92. bridge?.registerHandler("app", handler: { data, responseCallback in
  93. if let data = data {
  94. let jsonData = JSON(data)
  95. let wbjbModel = WVJBModel(JSONString: jsonData.description)
  96. callDataClosure(wbjbModel ?? WVJBModel())
  97. }
  98. responseCallback!(nil)
  99. })
  100. }
  101. func jump(bridge: WebViewJavascriptBridge? = nil,wvjbModel:WVJBModel?,viewController:BaseNewWebViewController? = nil) {
  102. // 链接
  103. if wvjbModel?.modelType == .link {
  104. Mediator.push(H5RouterModuleType.pushWeb(URLString: wvjbModel!.params!.url!))
  105. }
  106. // 邀请
  107. if wvjbModel?.modelType == .share {
  108. if wvjbModel?.params?.paramsModelType == .invite {
  109. ShareCommunityView.inviteGoodFriends()
  110. }
  111. }
  112. // 复制邀请码
  113. if wvjbModel?.modelType == .copy {
  114. commonCopy(string: wvjbModel!.params!.content!)
  115. }
  116. // 跳转原生
  117. if wvjbModel?.modelType == .follow {
  118. let followStatusModel = FollowStatusModel()
  119. followStatusModel.uid = wvjbModel!.params?.uid ?? 0
  120. followStatusModel.isFollowStatus = wvjbModel!.params?.status ?? 0
  121. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "followApi"), object: followStatusModel, userInfo: ["isPlanet":true])
  122. }
  123. // 跳转预览图
  124. if wvjbModel?.modelType == .preview {
  125. if !(wvjbModel!.params?.list?.isEmpty ?? true) {
  126. Mediator.push(BrowsePictureRouterModuleType.pushBrowsePictureImageStrs(imageStrs: (wvjbModel!.params?.list)!, index: wvjbModel!.params?.current ?? 0))
  127. }
  128. }
  129. // 返回
  130. if wvjbModel?.modelType == .back {
  131. viewController?.navigationController?.popViewController(animated: true)
  132. }
  133. // 刷新U米
  134. if wvjbModel?.modelType == .bean {
  135. UserMemberTotalBeanViewModel.shared.userMemberGetTotalBeanApi()
  136. }
  137. // 日期
  138. if wvjbModel?.modelType == .datepicker {
  139. DatePickerManager.shared.initDatePickerManager(title: wvjbModel?.params?.title ?? "", timeStamp: Double(wvjbModel?.params?.timeStamp ?? "")!, dateReturnType: DatePickerManager.DateReturnType.timeStamp) { [weak self] (timeStamp) in
  140. let timeStamp = timeStamp as? Double
  141. self?.callHandlerDatepicker(bridge: bridge, timestamp: timeStamp ?? Double(Date().timeStamp()), key: wvjbModel?.params?.key ?? "")
  142. }
  143. }
  144. // 分享
  145. if wvjbModel?.modelType == .shareLink {
  146. ShareH5LinkView.shareH5LinkView(h5Str:wvjbModel?.params?.link ?? "", thumbnailImg: UIImage.imageUrl(wvjbModel?.params?.imgUrl ?? ""), sharedTitle: wvjbModel?.params?.title ?? "", sharedDetailTitle: wvjbModel?.params?.desc ?? "") {
  147. }
  148. }
  149. // 话题
  150. if wvjbModel?.modelType == .selectTopic {
  151. let vc = PublishAddTopicController()
  152. NXLLog(wvjbModel?.params?.topic)
  153. let topicMdlArr : Array<CommunityTopicDataModel> = Array<CommunityTopicDataModel>.init(JSONString: wvjbModel?.params?.topic ?? "[]") ?? []
  154. vc.selTopicModelArr = topicMdlArr
  155. vc.selTopicsClosure = {
  156. [weak self] topicMdlArr in
  157. self?.callHandlerTopic(bridge: bridge, topic: topicMdlArr)
  158. }
  159. UIViewController.topMost?.navigationController?.pushViewController(vc, animated: true)
  160. }
  161. // 选择地理位置结果
  162. if wvjbModel?.modelType == .location {
  163. let vc = PublishAddAddressController()
  164. vc.selectLocationClosure = {
  165. [weak self] (address,latitude,longitude) in
  166. self?.callHandlerLocation(bridge: bridge, address: address, latitude: latitude, longitude: longitude)
  167. }
  168. UIViewController.topMost?.navigationController?.pushViewController(vc, animated: true)
  169. }
  170. // 发布
  171. if wvjbModel?.modelType == .publish {
  172. NXLLog(wvjbModel?.params?.status)
  173. if wvjbModel?.params?.status != nil {
  174. if let callDataClosure = callDataClosure {
  175. callDataClosure(wvjbModel!)
  176. }
  177. }
  178. }
  179. // 跳转原生
  180. if wvjbModel?.modelType == .view {
  181. // 发布
  182. if wvjbModel?.params?.paramsModelPage == .publist {
  183. BaseTabbarViewController.shared.pushPublishVC()
  184. }
  185. // 推荐
  186. if wvjbModel?.params?.paramsModelPage == .join {
  187. BaseTabbarViewController.shared.esTabBarController.selectedIndex = 0
  188. BaseTabbarViewController.shared.v1.reloadSegmentedView()
  189. if viewController != nil {
  190. viewController?.navigationController?.popToRootViewController(animated: true)
  191. }
  192. }
  193. // 兑换商城
  194. if wvjbModel?.params?.paramsModelPage == .exchange {
  195. Mediator.push(BackyardModuleRouterType.redemptionArea)
  196. }
  197. // 去星球
  198. if wvjbModel?.params?.paramsModelPage == .planet {
  199. BaseTabbarViewController.shared.esTabBarController.selectedIndex = 0
  200. BaseTabbarViewController.shared.v1.reloadSegmentedStarView()
  201. if viewController != nil {
  202. viewController?.navigationController?.popToRootViewController(animated: true)
  203. }
  204. }
  205. // 去登陆
  206. if wvjbModel?.params?.paramsModelPage == .signin {
  207. Mediator.present(RegisterLoginRouterModuleType.presentRegisterLogin)
  208. }
  209. // 去个人中心
  210. if wvjbModel?.params?.paramsModelPage == .user {
  211. if wvjbModel?.params?.payload?.uid != nil && wvjbModel?.params?.payload?.uid != UserModel.shared().getModel()?.uid {
  212. Mediator.push(MineRouterModuleType.pushOtherPersonalCenter(uid: wvjbModel?.params?.payload?.uid ?? 0))
  213. }
  214. }
  215. // 账户(绑定微信/绑定QQ)
  216. if wvjbModel?.params?.paramsModelPage == .account {
  217. Mediator.present(MineRouterModuleType.pushAccountSecurity)
  218. }
  219. // 聊天室
  220. if wvjbModel?.params?.paramsModelPage == .chatroom {
  221. if wvjbModel?.params?.payload?.roomId != nil {
  222. if UserModel.shared().getModel()?.rongCloudToken != nil {
  223. Mediator.push(RongCloudIMRouterModuleType.IMChatRoom(targetId: wvjbModel?.params?.payload?.roomId ?? "" , messageCount: 50, roomName: wvjbModel?.params?.payload?.roomName ?? ""))
  224. }else {
  225. SwiftMoyaNetWorkServiceUser.shared().userRefreshApi { (data) -> (Void) in
  226. RongCloudIMManager.shared.loginRCIM {
  227. Mediator.push(RongCloudIMRouterModuleType.IMChatRoom(targetId: wvjbModel?.params?.payload?.roomId ?? "" , messageCount: 50, roomName: wvjbModel?.params?.payload?.roomName ?? ""))
  228. }
  229. }
  230. }
  231. }
  232. }
  233. // 圈子
  234. if wvjbModel?.params?.paramsModelPage == .circle {
  235. if wvjbModel?.params?.payload?.circleId != nil {
  236. Mediator.push(CircleRouterModuleType.circle(circleId: "\(wvjbModel?.params?.payload?.circleId ?? 0)"))
  237. }
  238. }
  239. }
  240. }
  241. }