LoginViewController.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. //
  2. // LoginViewController.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 16/6/28.
  6. // Copyright © 2016年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import AlamofireObjectMapper
  10. import Alamofire
  11. import SwiftyTimer
  12. import SwiftyJSON
  13. import ObjectMapper
  14. import CocoaLumberjack
  15. import Promises
  16. import O2OA_Auth_SDK
  17. class LoginViewController: UIViewController {
  18. @IBOutlet weak var iconImageView: UIImageView!
  19. @IBOutlet weak var startImage: UIImageView!
  20. var showView = 0
  21. var viewModel:OOLoginViewModel = {
  22. return OOLoginViewModel()
  23. }()
  24. override var preferredStatusBarStyle: UIStatusBarStyle {
  25. return UIStatusBarStyle.default
  26. }
  27. override func viewDidLoad() {
  28. super.viewDidLoad()
  29. //load image
  30. if AppConfigSettings.shared.isFirstTime != true {
  31. let launchImage = OOCustomImageManager.default.loadImage(.launch_logo)
  32. iconImageView.image = launchImage
  33. iconImageView.isHidden = false
  34. }
  35. self.startImage.image = UIImage(named: "startImage")
  36. }
  37. override func viewWillAppear(_ animated: Bool) {
  38. super.viewWillAppear(animated)
  39. NotificationCenter.default.addObserver(self, selector: #selector(receiveBindCompleted(customNotification:)), name: OONotification.bindCompleted.notificationName, object: nil)
  40. }
  41. override func viewDidAppear(_ animated: Bool) {
  42. super.viewDidAppear(animated)
  43. self.showView += 1
  44. if AppConfigSettings.shared.isFirstTime == true {
  45. DDLogDebug("启动开始 isFirstTime is true")
  46. AppConfigSettings.shared.isFirstTime = false
  47. let pVC = OOGuidePageController(nibName: "OOGuidePageController", bundle: nil)
  48. //let navVC = ZLNavigationController(rootViewController: pVC)
  49. self.presentVC(pVC)
  50. }else{
  51. if self.showView == 1 {
  52. DDLogDebug("启动开始 isFirstTime is false")
  53. self.startFlowForPromise()
  54. }
  55. }
  56. }
  57. func startFlowForPromise() {
  58. //越狱检查
  59. if SecurityCheckManager.shared.isJailBroken() {
  60. self.showSystemAlert(title: "提示", message: "当前运行环境已经越狱,本应用将不提供服务!") { (action) in
  61. DDLogError("已经越狱的机器,不进入app!")
  62. }
  63. }else {
  64. if !O2IsConnect2Collect {
  65. let unit = O2BindUnitModel()
  66. if let infoPath = Bundle.main.path(forResource: "Info", ofType: "plist"), let dic = NSDictionary(contentsOfFile: infoPath) {
  67. let o2Server = dic["o2 server"] as? NSDictionary
  68. let id = o2Server?["id"] as? String
  69. let name = o2Server?["name"] as? String
  70. let centerHost = o2Server?["centerHost"] as? String
  71. let centerContext = o2Server?["centerContext"] as? String
  72. let centerPort = o2Server?["centerPort"] as? Int
  73. let httpProtocol = o2Server?["httpProtocol"] as? String
  74. DDLogDebug("连接服务器:\(String(describing: name)) , host:\(String(describing: centerHost)) , context:\(String(describing: centerContext)), port:\(centerPort ?? 0), portocal:\(String(describing: httpProtocol)) ")
  75. if name == nil || centerHost == nil || centerContext == nil {
  76. self.showError(title: "服务器配置信息异常!")
  77. return
  78. }
  79. unit.id = id
  80. unit.centerContext = centerContext
  81. unit.centerHost = centerHost
  82. unit.centerPort = centerPort
  83. unit.httpProtocol = httpProtocol
  84. unit.name = name
  85. }else {
  86. self.showError(title: "没有配置服务器信息!")
  87. return
  88. }
  89. O2AuthSDK.shared.launchInner(unit: unit) { (state, msg) in
  90. switch state {
  91. case .bindError:
  92. //校验绑定结点信息错误
  93. self.showError(title: "未知错误!")
  94. break
  95. case .loginError:
  96. self.forwardToSegue("loginSystemSegue")
  97. //自动登录出错
  98. break
  99. case .unknownError:
  100. self.showError(title: msg ?? "未知错误!")
  101. break
  102. case .success:
  103. //处理移动端应用
  104. self.viewModel._saveAppConfigToDb()
  105. //跳转到主页
  106. let destVC = O2MainController.genernateVC()
  107. destVC.selectedIndex = 2 // 首页选中 TODO 图标不亮。。。。。
  108. UIApplication.shared.keyWindow?.rootViewController = destVC
  109. UIApplication.shared.keyWindow?.makeKeyAndVisible()
  110. }
  111. }
  112. }else {
  113. //本地 -> 校验 -> 下载NodeAPI -> 下载configInfo -> 自动登录
  114. O2AuthSDK.shared.launch { (state, msg) in
  115. switch state {
  116. case .bindError:
  117. //校验绑定结点信息错误
  118. self.forwardToSegue("bindPhoneSegue")
  119. break
  120. case .loginError:
  121. self.forwardToSegue("loginSystemSegue")
  122. //自动登录出错
  123. break
  124. case .unknownError:
  125. // self.showError(title: msg ?? "未知错误!")
  126. self.needReBind(msg ?? "未知错误!")
  127. break
  128. case .success:
  129. //处理移动端应用
  130. self.viewModel._saveAppConfigToDb()
  131. //跳转到主页
  132. let destVC = O2MainController.genernateVC()
  133. destVC.selectedIndex = 2 // 首页选中 TODO 图标不亮。。。。。
  134. UIApplication.shared.keyWindow?.rootViewController = destVC
  135. UIApplication.shared.keyWindow?.makeKeyAndVisible()
  136. }
  137. }
  138. }
  139. }
  140. }
  141. // MARK:- 到不同的segue
  142. func forwardToSegue(_ segueIdentitifer:String){
  143. DispatchQueue.main.async {
  144. self.performSegue(withIdentifier: segueIdentitifer, sender: nil)
  145. }
  146. }
  147. @objc func receiveBindCompleted(customNotification:Notification){
  148. self.startFlowForPromise()
  149. }
  150. private func needReBind(_ error: String) {
  151. DispatchQueue.main.async {
  152. let alertController = UIAlertController(title: "提示", message: "加载出错,是否重新绑定?错误:\(error)", preferredStyle: .alert)
  153. let okAction = UIAlertAction(title: "重新绑定", style: .default, handler: {(action) in
  154. self.rebind()
  155. })
  156. let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: {(action) in
  157. })
  158. alertController.addAction(okAction)
  159. alertController.addAction(cancelAction)
  160. self.present(alertController, animated: true, completion: nil)
  161. }
  162. }
  163. private func rebind() {
  164. O2AuthSDK.shared.clearAllInformationBeforeReBind(callback: { (result, msg) in
  165. DDLogInfo("清空登录和绑定信息,result:\(result), msg:\(msg ?? "")")
  166. DBManager.shared.removeAll()
  167. DispatchQueue.main.async {
  168. self.forwardToSegue("bindPhoneSegue")
  169. }
  170. })
  171. }
  172. @IBAction func unBindComplete(_ sender: UIStoryboardSegue){
  173. //绑定完成,执行
  174. self.startFlowForPromise()
  175. }
  176. @IBAction func show(_ sender: UITapGestureRecognizer) {
  177. //ProgressHUD.show("系统加截中,请稍候...", interaction: true)
  178. }
  179. //登录后返回执行此方法
  180. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  181. segue.destination.modalPresentationStyle = .fullScreen
  182. }
  183. deinit {
  184. NotificationCenter.default.removeObserver(self)
  185. }
  186. }