diff --git a/yinmeng-ios.xcodeproj/project.pbxproj b/yinmeng-ios.xcodeproj/project.pbxproj index 7388531..97bdd2e 100644 --- a/yinmeng-ios.xcodeproj/project.pbxproj +++ b/yinmeng-ios.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ E8D15AA32B89B03D00369467 /* Deserialized.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA22B89B03D00369467 /* Deserialized.swift */; }; E8D15AA62B89B0C600369467 /* List+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA52B89B0C600369467 /* List+.swift */; }; E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA72B89B74700369467 /* YMRequestX.swift */; }; + E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -79,6 +80,7 @@ E8D15AA22B89B03D00369467 /* Deserialized.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deserialized.swift; sourceTree = ""; }; E8D15AA52B89B0C600369467 /* List+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "List+.swift"; sourceTree = ""; }; E8D15AA72B89B74700369467 /* YMRequestX.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YMRequestX.swift; sourceTree = ""; }; + E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YMNetworkFun.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -281,6 +283,7 @@ E8D15AA72B89B74700369467 /* YMRequestX.swift */, E8D15AA22B89B03D00369467 /* Deserialized.swift */, E8D15A9C2B899E1500369467 /* YMNetworkHelper.swift */, + E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */, ); path = Request; sourceTree = ""; @@ -435,6 +438,7 @@ E86A43C32B8628AF0084C04D /* BaeTabBarViewController.swift in Sources */, E86A43AA2B85DFA90084C04D /* BaseViewController.swift in Sources */, E884E85F2B6900C500ADE6EE /* AppDelegate.swift in Sources */, + E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */, E86A43B82B85F0B80084C04D /* AuthLaunchVC.swift in Sources */, E86A43C82B8743EA0084C04D /* AuthFillDataVC.swift in Sources */, E86A43CD2B874C8E0084C04D /* BaseView.swift in Sources */, diff --git a/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/UserInterfaceState.xcuserstate b/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/UserInterfaceState.xcuserstate index fcae929..dab80ea 100644 Binary files a/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/UserInterfaceState.xcuserstate and b/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index bf541d3..8499e8c 100644 --- a/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/yinmeng-ios.xcworkspace/xcuserdata/fengshuo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -36,5 +36,21 @@ landmarkType = "7"> + + + + diff --git a/yinmeng-ios/AppDelegate.swift b/yinmeng-ios/AppDelegate.swift index 49cc404..093e0b1 100644 --- a/yinmeng-ios/AppDelegate.swift +++ b/yinmeng-ios/AppDelegate.swift @@ -7,6 +7,7 @@ import UIKit import DeviceKit +import NSObject_Rx @main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? @@ -17,10 +18,30 @@ var window: UIWindow? self.window = UIWindow.init(frame: UIScreen.main.bounds) self.window?.backgroundColor = UIColor.white self.window?.rootViewController = BaseNavigationViewController(rootViewController:AuthLoginVC()) - + loginStateListener() return true } + private func loginStateListener() { + AuthViewModel.authVM.loginSuccess.subscribe(onNext: { result in + print("是否登录成功\(result)") + if result == true { + ///如果登录成功显示tabbar + self.window = UIWindow.init(frame: UIScreen.main.bounds) + self.window?.backgroundColor = UIColor.white + self.window?.rootViewController = BaeTabBarViewController() + } else { + ///去登录 + self.window = UIWindow.init(frame: UIScreen.main.bounds) + self.window?.backgroundColor = UIColor.white + self.window?.rootViewController = BaseNavigationViewController(rootViewController:AuthLoginVC()) + } + }).disposed(by: rx.disposeBag) + ///检车是否已经登录 + AuthViewModel.authVM.checkUserIsLogin() + + } + } diff --git a/yinmeng-ios/Base/Hud/HUDTool.swift b/yinmeng-ios/Base/Hud/HUDTool.swift index eb98b68..92acc1c 100644 --- a/yinmeng-ios/Base/Hud/HUDTool.swift +++ b/yinmeng-ios/Base/Hud/HUDTool.swift @@ -31,7 +31,7 @@ class HUDTool: NSObject { - Parameter afterDelay: 延迟消失时间 - Parameter enabled: 是否可以拦截事件 no:不拦截 yes:拦截 */ - class func showSuccess(with message: String, in view: UIView? = YMRequestX.topViewController()?.view, delay afterDelay: TimeInterval = kDelayTime, enabled: Bool = true, icon:String = "") { + class func show(with message: String, in view: UIView? = YMRequestX.topViewController()?.view, delay afterDelay: TimeInterval = kDelayTime, enabled: Bool = true, icon:String = "") { if message.isEmpty { return } DispatchQueue.main.async { diff --git a/yinmeng-ios/Base/Request/YMNetworkFun.swift b/yinmeng-ios/Base/Request/YMNetworkFun.swift new file mode 100644 index 0000000..5085c27 --- /dev/null +++ b/yinmeng-ios/Base/Request/YMNetworkFun.swift @@ -0,0 +1,17 @@ +// +// YMNetworkFun.swift +// yinmeng-ios +// +// Created by MaiMang on 2024/2/25. +// + +import Foundation + + +func RequestGet(path:String,parma:Dictionary, succeed: SessionCallSucceed?,fail:SessionCallFail?) -> Void { + YMNetworkHelper.share.requestSend(type: .get, path: path, params: parma, succeed: succeed, fail: fail) +} + +func RequestPost(path:String,parma:Dictionary, succeed: SessionCallSucceed? ,fail:SessionCallFail?) -> Void { + YMNetworkHelper.share.requestSend(type: .post, path: path, params: parma, succeed: succeed, fail: fail) +} diff --git a/yinmeng-ios/Modules/Auth/VC/AuthLoginVC.swift b/yinmeng-ios/Modules/Auth/VC/AuthLoginVC.swift index 638f671..99dc88b 100644 --- a/yinmeng-ios/Modules/Auth/VC/AuthLoginVC.swift +++ b/yinmeng-ios/Modules/Auth/VC/AuthLoginVC.swift @@ -21,6 +21,7 @@ class AuthLoginVC: BaseViewController, HiddenNavigationBarProtocol { loadSubViews() viewModel.data.subscribe(onNext: { [weak self] success in if success { + HUDTool.show(with: "验证码已发送\n+86\(self?.phone ?? "")") self?.startCountdown() } }).disposed(by: rx.disposeBag) @@ -389,7 +390,7 @@ extension AuthLoginVC { if phone.count > 0 { viewModel.getSmsCode(phone: phone, type: 1) } else { - HUDTool.showSuccess(with: "请输入正确的手机号码") + HUDTool.show(with: "请输入正确的手机号码") } } diff --git a/yinmeng-ios/Modules/Auth/VM/AuthManager.swift b/yinmeng-ios/Modules/Auth/VM/AuthManager.swift index c7e7cc8..ff1c132 100644 --- a/yinmeng-ios/Modules/Auth/VM/AuthManager.swift +++ b/yinmeng-ios/Modules/Auth/VM/AuthManager.swift @@ -34,12 +34,22 @@ class LoginTokenConfig: NSObject { } } + func removeTokenFromLocaltion() { + self.tokenInfo = nil + UserDefaults.standard.removeObject(forKey: UserTokenKey) + } + func saveTicketToLoaction(ticket:String) { self.ticket = ticket UserDefaults.standard.setValue(ticket, forKey: UserTicketKey) UserDefaults.standard.synchronize() } + func removeTicketFromLoaction() { + self.ticket = "" + UserDefaults.standard.removeObject(forKey: UserTicketKey) + } + func getTicket() -> String { if let ticket = self.ticket { return ticket diff --git a/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift b/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift index 8f7d6e6..a132277 100644 --- a/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift +++ b/yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift @@ -8,21 +8,71 @@ import Foundation import RxSwift class AuthViewModel: NSObject { - + static let authVM = AuthViewModel.init() let data = PublishSubject() + let token = PublishSubject() + let loginSuccess = PublishSubject() func getSmsCode(phone:String, type:Int) { if let phoneDes = phone.encrypt() { let params:[String: Any] = ["mobile":phoneDes, "type":type] - YMNetworkHelper.share.requestSend(type: .post, path: "sms/getCode", params: params, succeed: { data in + RequestPost(path: "sms/getCode", parma: params) { data in self.data.onNext(true) - }, fail: { code, msg in - self.data.onNext(false) - }) + } fail: { code, message in + self.data.onNext(true) + } } } func authPhoneCode(phone:String, code:String) { - + if let phoneDes = phone.encrypt() { + let params = ["phone":phoneDes, "code":code, "client_secret":"uyzjdhds", "version":"1", "client_id":"erban-client", "grant_type":"password"] + RequestPost(path: "oauth/token", parma: params) { data in + if let account = Deserialized.toModel(with: data) { + LoginTokenConfig.config.saveTokenToLocaltion(token: account) + self.token.onNext(account) + self.token.onCompleted() + ///进行token的置换 + if let accessToken = account.access_token { + self.tokenTransformTicket(accesToken: accessToken) + } + } + } fail: { code, data in + self.token.onNext(nil) + self.token.onCompleted() + } + + } + } + + ///通过token获取ticket + func tokenTransformTicket(accesToken:String) { + let params = ["access_token": accesToken, "issue_type": "multi"] + RequestPost(path: "oauth/ticket", parma: params) { data in + ///登录成功 + if let dic = data as? [String: Any], let tickets = dic["tickets"] as? [[String: Any]], let ticket1 = tickets[safe: 0], let ticket = ticket1["ticket"] as? String{ + LoginTokenConfig.config.saveTicketToLoaction(ticket: ticket) + self.loginSuccess.onNext(true) + } else { + self.loginSuccess.onNext(false) + } + } fail: { code, message in + self.loginSuccess.onNext(false) + } + } + + func checkUserIsLogin() { + if let account = LoginTokenConfig.config.getAccountInfo(), let token = account.access_token { + let ticket = AuthManager.ticket + if ticket.count > 0 { + ///如果内容都有的话 就是直接登录 + self.loginSuccess.onNext(true) + } else { + /// 如果没有ticket的话 去置换ticket + tokenTransformTicket(accesToken: token) + } + } else { + self.loginSuccess.onNext(false) + } } } diff --git a/yinmeng-ios/Modules/Auth/VM/UserTokenObject.swift b/yinmeng-ios/Modules/Auth/VM/UserTokenObject.swift index fc97279..19f0e20 100644 --- a/yinmeng-ios/Modules/Auth/VM/UserTokenObject.swift +++ b/yinmeng-ios/Modules/Auth/VM/UserTokenObject.swift @@ -13,3 +13,8 @@ struct UserTokenObject: HandyJSON, Codable { var netEaseToken:String? = "" var access_token:String? = "" } + +struct UserTicketObject: HandyJSON { + var tickets:[[String: Any]]? +} +