LoginViewController.swift 7.6 KB

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