WebViewJavascriptBridgeManager.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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. //获取当前时间
  55. var dictionary = Dictionary<String,Any>()
  56. dictionary.updateValue("selectTopic", forKey: "type")
  57. var topicDictionary = Dictionary<String,Any>()
  58. topicDictionary.updateValue(topic.toJSONString() as Any, forKey: "topic")
  59. dictionary.updateValue(topicDictionary, forKey: "params")
  60. NXLLog(JSON(dictionary))
  61. bridge?.callHandler("h5", data: dictionary)
  62. }
  63. /// 发布
  64. ///
  65. /// - Parameter bridge: 交互对象
  66. func callHandlerPublish(bridge: WebViewJavascriptBridge?) {
  67. //获取当前时间
  68. var dictionary = Dictionary<String,Any>()
  69. dictionary.updateValue("publish", forKey: "type")
  70. dictionary.updateValue("", forKey: "params")
  71. bridge?.callHandler("h5", data: dictionary)
  72. }
  73. /// 注册回调
  74. ///
  75. /// - Parameters:
  76. /// - bridge: 交互对象
  77. /// - callDataClosure: 回调
  78. func registerHandlerApp(bridge: WebViewJavascriptBridge?,callDataClosure:@escaping CallDataClosure) {
  79. bridge?.registerHandler("app", handler: { data, responseCallback in
  80. if let data = data {
  81. let jsonData = JSON(data)
  82. let wbjbModel = WVJBModel(JSONString: jsonData.description)
  83. callDataClosure(wbjbModel ?? WVJBModel())
  84. }
  85. responseCallback!(nil)
  86. })
  87. }
  88. func jump(bridge: WebViewJavascriptBridge? = nil,wvjbModel:WVJBModel?,viewController:BaseJSWebBaseViewController? = nil) {
  89. // 链接
  90. if wvjbModel?.modelType == .link {
  91. Mediator.push(H5RouterModuleType.pushWeb(URLString: wvjbModel!.params!.url!))
  92. }
  93. // 邀请
  94. if wvjbModel?.modelType == .share {
  95. if wvjbModel?.params?.paramsModelType == .invite {
  96. ShareCommunityView.inviteGoodFriends()
  97. }
  98. }
  99. // 复制邀请码
  100. if wvjbModel?.modelType == .copy {
  101. commonCopy(string: wvjbModel!.params!.content!)
  102. }
  103. // 跳转原生
  104. if wvjbModel?.modelType == .follow {
  105. let followStatusModel = FollowStatusModel()
  106. followStatusModel.uid = wvjbModel!.params?.uid ?? 0
  107. followStatusModel.isFollowStatus = wvjbModel!.params?.status ?? 0
  108. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "followApi"), object: followStatusModel, userInfo: ["isPlanet":true])
  109. }
  110. // 跳转预览图
  111. if wvjbModel?.modelType == .preview {
  112. if !(wvjbModel!.params?.list?.isEmpty ?? true) {
  113. Mediator.push(BrowsePictureRouterModuleType.pushBrowsePictureImageStrs(imageStrs: (wvjbModel!.params?.list)!, index: wvjbModel!.params?.current ?? 0))
  114. }
  115. }
  116. // 返回
  117. if wvjbModel?.modelType == .back {
  118. viewController?.navigationController?.popViewController(animated: true)
  119. }
  120. // 刷新U米
  121. if wvjbModel?.modelType == .bean {
  122. UserMemberTotalBeanViewModel.shared.userMemberGetTotalBeanApi()
  123. }
  124. // 日期
  125. if wvjbModel?.modelType == .datepicker {
  126. DatePickerManager.shared.initDatePickerManager(title: wvjbModel?.params?.title ?? "", timeStamp: Double(wvjbModel?.params?.timeStamp ?? "")!, dateReturnType: DatePickerManager.DateReturnType.timeStamp) { [weak self] (timeStamp) in
  127. let timeStamp = timeStamp as? Double
  128. self?.callHandlerDatepicker(bridge: bridge, timestamp: timeStamp ?? Double(Date().timeStamp()), key: wvjbModel?.params?.key ?? "")
  129. }
  130. }
  131. // 分享
  132. if wvjbModel?.modelType == .shareLink {
  133. ShareH5LinkView.shareH5LinkView(h5Str:wvjbModel?.params?.link ?? "", thumbnailImg: UIImage.imageUrl(wvjbModel?.params?.imgUrl ?? ""), sharedTitle: wvjbModel?.params?.title ?? "", sharedDetailTitle: wvjbModel?.params?.desc ?? "") {
  134. }
  135. }
  136. // 话题
  137. if wvjbModel?.modelType == .selectTopic {
  138. let vc = PublishAddTopicController()
  139. NXLLog(wvjbModel?.params?.topic)
  140. let topicMdlArr : Array<CommunityTopicDataModel> = Array<CommunityTopicDataModel>.init(JSONString: wvjbModel?.params?.topic ?? "[]") ?? []
  141. vc.selTopicModelArr = topicMdlArr
  142. vc.selTopicsClosure = {
  143. [weak self] topicMdlArr in
  144. self?.callHandlerTopic(bridge: bridge, topic: topicMdlArr)
  145. }
  146. UIViewController.topMost?.navigationController?.pushViewController(vc, animated: true)
  147. }
  148. // 发布
  149. if wvjbModel?.modelType == .publish {
  150. NXLLog(wvjbModel?.params?.status)
  151. if wvjbModel?.params?.status != nil {
  152. if let callDataClosure = callDataClosure {
  153. callDataClosure(wvjbModel!)
  154. }
  155. }
  156. }
  157. // 跳转原生
  158. if wvjbModel?.modelType == .view {
  159. // 发布
  160. if wvjbModel?.params?.paramsModelPage == .publist {
  161. BaseTabbarViewController.shared.pushPublishVC()
  162. }
  163. // 推荐
  164. if wvjbModel?.params?.paramsModelPage == .join {
  165. BaseTabbarViewController.shared.esTabBarController.selectedIndex = 0
  166. BaseTabbarViewController.shared.v1.reloadSegmentedView()
  167. if viewController != nil {
  168. viewController?.navigationController?.popToRootViewController(animated: true)
  169. }
  170. }
  171. // 兑换商城
  172. if wvjbModel?.params?.paramsModelPage == .exchange {
  173. Mediator.push(BackyardModuleRouterType.redemptionArea)
  174. }
  175. // 去星球
  176. if wvjbModel?.params?.paramsModelPage == .planet {
  177. BaseTabbarViewController.shared.esTabBarController.selectedIndex = 0
  178. BaseTabbarViewController.shared.v1.reloadSegmentedStarView()
  179. if viewController != nil {
  180. viewController?.navigationController?.popToRootViewController(animated: true)
  181. }
  182. }
  183. // 去登陆
  184. if wvjbModel?.params?.paramsModelPage == .signin {
  185. Mediator.present(RegisterLoginRouterModuleType.presentRegisterLogin)
  186. }
  187. // 去个人中心
  188. if wvjbModel?.params?.paramsModelPage == .user {
  189. if wvjbModel?.params?.payload?.uid != nil && wvjbModel?.params?.payload?.uid != UserModel.shared().getModel()?.uid {
  190. Mediator.push(MineRouterModuleType.pushOtherPersonalCenter(uid: wvjbModel?.params?.payload?.uid ?? 0))
  191. }
  192. }
  193. // 账户(绑定微信/绑定QQ)
  194. if wvjbModel?.params?.paramsModelPage == .account {
  195. Mediator.present(MineRouterModuleType.pushAccountSecurity)
  196. }
  197. // 聊天室
  198. if wvjbModel?.params?.paramsModelPage == .chatroom {
  199. if wvjbModel?.params?.payload?.roomId != nil {
  200. if UserModel.shared().getModel()?.rongCloudToken != nil {
  201. Mediator.push(RongCloudIMRouterModuleType.IMChatRoom(targetId: wvjbModel?.params?.payload?.roomId ?? "" , messageCount: 50, roomName: wvjbModel?.params?.payload?.roomName ?? ""))
  202. }else {
  203. SwiftMoyaNetWorkServiceUser.shared().userRefreshApi { (data) -> (Void) in
  204. RongCloudIMManager.shared.loginRCIM {
  205. Mediator.push(RongCloudIMRouterModuleType.IMChatRoom(targetId: wvjbModel?.params?.payload?.roomId ?? "" , messageCount: 50, roomName: wvjbModel?.params?.payload?.roomName ?? ""))
  206. }
  207. }
  208. }
  209. }
  210. }
  211. // 圈子
  212. if wvjbModel?.params?.paramsModelPage == .circle {
  213. if wvjbModel?.params?.payload?.circleId != nil {
  214. Mediator.push(CircleRouterModuleType.circle(circleId: "\(wvjbModel?.params?.payload?.circleId ?? 0)"))
  215. }
  216. }
  217. }
  218. }
  219. }