Pārlūkot izejas kodu

add:添加一健登录功能。

“HeShaoZe” 4 mēneši atpakaļ
vecāks
revīzija
a255a4b0ea

BIN
.DS_Store


+ 2 - 0
Podfile

@@ -39,6 +39,8 @@ target 'QuickSearchLocation' do
     pod 'AMapSearch'
 
     pod 'LookinServer', :configurations => ['Debug']
+    
+    pod 'NTESQuickPass', '~> 3.6.10'
 end
 
 post_install do |installer|

+ 16 - 4
QuickSearchLocation.xcodeproj/project.pbxproj

@@ -58,6 +58,7 @@
 		04F33BEE2BC78B91003E2111 /* QSLUserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F33BED2BC78B91003E2111 /* QSLUserModel.swift */; };
 		04F33BF02BC78D54003E2111 /* QSLMapTrackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F33BEF2BC78D54003E2111 /* QSLMapTrackModel.swift */; };
 		0E4DD66B97F41870AE6C6531 /* Pods_QuickSearchLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 192C4A9CA4C1E078845B9C07 /* Pods_QuickSearchLocation.framework */; };
+		FE3B5E9A2E2A3B92002616CD /* QSQuickLogonHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3B5E992E2A3B92002616CD /* QSQuickLogonHandle.swift */; };
 		FE5B42422CF4612E000AACCB /* QSLSizeFit.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5B42412CF4612E000AACCB /* QSLSizeFit.swift */; };
 		FE5B42442CF485B9000AACCB /* QSLHomeFriendFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5B42432CF485A0000AACCB /* QSLHomeFriendFooterView.swift */; };
 		FE638A9C2D06FF5E00858121 /* QSLGuideController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE638A9B2D06FF5E00858121 /* QSLGuideController.swift */; };
@@ -180,6 +181,7 @@
 		0900052B4EECA6E1E78B9DDB /* Pods-QuickSearchLocation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QuickSearchLocation.release.xcconfig"; path = "Target Support Files/Pods-QuickSearchLocation/Pods-QuickSearchLocation.release.xcconfig"; sourceTree = "<group>"; };
 		192C4A9CA4C1E078845B9C07 /* Pods_QuickSearchLocation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_QuickSearchLocation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		A7769595966E4BEA107F93A2 /* Pods-QuickSearchLocation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QuickSearchLocation.debug.xcconfig"; path = "Target Support Files/Pods-QuickSearchLocation/Pods-QuickSearchLocation.debug.xcconfig"; sourceTree = "<group>"; };
+		FE3B5E992E2A3B92002616CD /* QSQuickLogonHandle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QSQuickLogonHandle.swift; sourceTree = "<group>"; };
 		FE5B42412CF4612E000AACCB /* QSLSizeFit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QSLSizeFit.swift; sourceTree = "<group>"; };
 		FE5B42432CF485A0000AACCB /* QSLHomeFriendFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QSLHomeFriendFooterView.swift; sourceTree = "<group>"; };
 		FE638A9B2D06FF5E00858121 /* QSLGuideController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QSLGuideController.swift; sourceTree = "<group>"; };
@@ -504,6 +506,7 @@
 		04F33BC12BC63EC2003E2111 /* QSLMine */ = {
 			isa = PBXGroup;
 			children = (
+				FE3B5E982E2A3AE7002616CD /* QSQuickLogon */,
 				FE8360BE2D06D30000978E03 /* QSLAppInfo */,
 				04B6B52E2BCE2C9600777EB4 /* ViewModel */,
 				04B6B5272BCE1D4E00777EB4 /* Cell */,
@@ -576,6 +579,14 @@
 			path = Pods;
 			sourceTree = "<group>";
 		};
+		FE3B5E982E2A3AE7002616CD /* QSQuickLogon */ = {
+			isa = PBXGroup;
+			children = (
+				FE3B5E992E2A3B92002616CD /* QSQuickLogonHandle.swift */,
+			);
+			path = QSQuickLogon;
+			sourceTree = "<group>";
+		};
 		FE5B423D2CF45926000AACCB /* Common */ = {
 			isa = PBXGroup;
 			children = (
@@ -998,6 +1009,7 @@
 				FE8360B32D02939600978E03 /* QSLSocketManager.swift in Sources */,
 				FE638AB92D195D5000858121 /* QSLGravityConst.swift in Sources */,
 				FE83609A2D004E3400978E03 /* QSLBaseManager.swift in Sources */,
+				FE3B5E9A2E2A3B92002616CD /* QSQuickLogonHandle.swift in Sources */,
 				04F33BD32BC67A18003E2111 /* UIViewController+Extension.swift in Sources */,
 				04B6B51A2BCCFDE700777EB4 /* Date+Extension.swift in Sources */,
 				04B666CD2BC922460020BFBD /* QSLHomeFriendTableViewCell.swift in Sources */,
@@ -1250,7 +1262,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 21;
+				CURRENT_PROJECT_VERSION = 22;
 				DEVELOPMENT_TEAM = Q364C8K9BL;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -1274,7 +1286,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.2.3;
+				MARKETING_VERSION = 1.2.4;
 				PRODUCT_BUNDLE_IDENTIFIER = com.manbu.shouji;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1294,7 +1306,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 21;
+				CURRENT_PROJECT_VERSION = 22;
 				DEVELOPMENT_TEAM = Q364C8K9BL;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -1318,7 +1330,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.2.3;
+				MARKETING_VERSION = 1.2.4;
 				PRODUCT_BUNDLE_IDENTIFIER = com.manbu.shouji;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";

+ 43 - 0
QuickSearchLocation/Classes/Category/UIApplication+Extension.swift

@@ -47,3 +47,46 @@ public extension UIApplication {
     }
     
 }
+
+import UIKit
+
+extension UIApplication {
+    @MainActor
+    static func currentViewController() -> UIViewController? {
+        var rootViewController: UIViewController?
+        
+        // iOS 13+ 使用 WindowScene
+        if #available(iOS 13.0, *) {
+            rootViewController = UIApplication.shared.connectedScenes
+                .compactMap { $0 as? UIWindowScene }
+                .first?
+                .windows
+                .first(where: { $0.isKeyWindow })?
+                .rootViewController
+        }
+        // iOS 12 及以下使用 keyWindow
+        else {
+            rootViewController = UIApplication.keyWindow?.rootViewController
+        }
+        
+        return rootViewController?.findCurrentViewController()
+    }
+}
+
+extension UIViewController {
+    @MainActor
+    func findCurrentViewController() -> UIViewController {
+        if let nav = self as? UINavigationController {
+            return nav.visibleViewController?.findCurrentViewController() ?? nav
+        }
+        if let tab = self as? UITabBarController {
+            return tab.selectedViewController?.findCurrentViewController() ?? tab
+        }
+        if let presented = self.presentedViewController {
+            return presented.findCurrentViewController()
+        }
+        return self
+    }
+}
+
+

+ 6 - 0
QuickSearchLocation/Classes/Network/QSLNetwork.swift

@@ -50,6 +50,7 @@ enum QSLNetworkAPI {
     case contactMaydayFavor(dict: [String: Any])
     case contactMaydayAll(dict: [String: Any])
     case deviceInfoUpload(dict: [String: Any])
+    case loginOneclick(dict: [String: Any])
 }
 
 extension QSLNetworkAPI: TargetType {
@@ -95,6 +96,7 @@ extension QSLNetworkAPI: TargetType {
         case .contactMaydayFavor: return QSLApi.contact_mayday_favor
         case .contactMaydayAll: return QSLApi.contact_mayday_all
         case .deviceInfoUpload: return QSLApi.device_info_upload
+        case .loginOneclick: return QSLApi.login_oneclick
         }
     }
     
@@ -243,6 +245,10 @@ extension QSLNetworkAPI: TargetType {
                 parameters[key] = value
             }
             break
+        case let .loginOneclick(Dict):
+            for (key, value) in Dict {
+                parameters[key] = value
+            }
         }
         debugPrint(parameters)
         return .requestParameters(parameters: parameters, encoding: JSONEncoding.default)

+ 10 - 3
QuickSearchLocation/Classes/Pages/QSLLogin/Controller/QSLLoginViewController.swift

@@ -14,6 +14,7 @@ enum QSLLoginJumpType: Int {
     case add     // 添加好友
     case road    // 查看轨迹
     case contact // 添加紧急联系人
+    case onQucikLogin // 意见登录
 }
 
 class QSLLoginViewController: QSLBaseController {
@@ -217,6 +218,8 @@ class QSLLoginViewController: QSLBaseController {
                 gravityInstance?.track(QSLGravityConst.login_show, properties: ["id": 1003])
             case .contact:
                 gravityInstance?.track(QSLGravityConst.login_show, properties: ["id": 1004])
+            case .onQucikLogin:
+                gravityInstance?.track(QSLGravityConst.login_show, properties: ["id": 1005])
             }
         }
     }
@@ -301,9 +304,13 @@ extension QSLLoginViewController {
             NotificationCenter.default.post(name: QSLNotification.QSLLogin, object: nil)
             // 发送通知
             NotificationCenter.default.post(name: QSLNotification.QSLRefreshMember, object: nil)
-            
-            // 返回
-            self.backBtnAction()
+            // 通知快捷登录
+            if self.type == .onQucikLogin {
+                self.navigationController?.popToRootViewController(animated: true)
+            } else {
+                // 返回
+                self.backBtnAction()
+            }
             
         }, fail: { code, error in
             

+ 8 - 1
QuickSearchLocation/Classes/Pages/QSLMine/Controller/QSLMineController.swift

@@ -109,10 +109,17 @@ extension QSLMineController {
     @objc func jumpToLogin() {
         
         if !QSLBaseManager.shared.isLogin() {
+            QSQuickLogonHandle.share.currentVC = self
+            QSQuickLogonHandle.share.starOneQuickLogin(loginSuccess: {
+                
+            })
+        }
+        
+        /*if !QSLBaseManager.shared.isLogin() {
             
             gravityInstance?.track(QSLGravityConst.mine_login)
             QSLJumpManager.shared.pushToLogin(type: .mine)
-        }
+        }*/
     }
 }
 

+ 327 - 0
QuickSearchLocation/Classes/Pages/QSLMine/QSQuickLogon/QSQuickLogonHandle.swift

@@ -0,0 +1,327 @@
+//
+//  QSQuickLogonHandle.swift
+//  QuickSearchLocation
+//
+//  Created by Destiny on 2025/7/18.
+//
+
+import Foundation
+import NTESQuickPass
+import UIKit
+
+class QSQuickLogonHandle: NSObject {
+    
+    //单例
+    static let share = QSQuickLogonHandle()
+    
+    static var isGetPhoneNumSuccess = false
+    
+    var currentVC: UIViewController?
+    
+    // 易盾 token
+    var token: String?
+    
+    // 运营商授权码
+    var accessToken: String?
+    
+    var loginSuccess: (() -> ())?
+    
+    func starOneQuickLogin(loginSuccess: @escaping () -> ()) {
+        self.loginSuccess = loginSuccess
+        
+        QSLLoading.show()
+        NTESQuickLoginManager.sharedInstance().register(withBusinessID:QSLConfig.quick_logon_key_id)
+        NTESQuickLoginManager.sharedInstance().getPhoneNumberCompletion { [weak self] resultDic in
+            guard let self = self else { return }
+            if let isSuccess = resultDic["success"] as? Bool {
+                QSQuickLogonHandle.isGetPhoneNumSuccess = isSuccess
+                if isSuccess && NTESQuickLoginManager.sharedInstance().shouldQuickLogin() {
+                    if let token = resultDic["token"] as? String {
+                        QSQuickLogonHandle.share.token = token
+                    }
+                    NTESQuickLoginManager.sharedInstance().delegate = self
+                    self.layoutQuickLoginUI()
+                    self.obtionAuthorizeLogin()
+                } else {
+                    DispatchQueue.main.async {
+                        QSLLoading.hide()
+                        ///去登录
+                        if !QSLBaseManager.shared.isLogin() {
+                            gravityInstance?.track(QSLGravityConst.mine_login)
+                            QSLJumpManager.shared.pushToLogin(type: .mine)
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    func layoutQuickLoginUI() {
+        let model = NTESQuickLoginModel()
+//        print("curredfdjf---\(String(describing: currentVC))");
+        model.currentVC = currentVC
+        
+        model.presentDirectionType = .push
+        model.authWindowPop = .fullScreen
+        model.backgroundColor =  .hexStringColor(hexString: "#E2E2E2")
+
+        // 导航栏
+        model.navBarHidden = false
+        model.navBgColor = .hexStringColor(hexString: "#E2E2E2")
+        model.navText = ""
+        model.navTextFont = UIFont.systemFont(ofSize: 14)
+        model.navTextColor = .hexStringColor(hexString: "#E2E2E2")
+        model.navTextHidden = false
+        if let image = UIImage(named: "public_back_btn") {
+            model.navReturnImg = image
+        }
+        model.navReturnImgLeftMargin = 15
+        model.navReturnImgBottomMargin = 0
+        model.navReturnImgWidth = 44
+        model.navReturnImgHeight = 44
+        
+        // logo
+        if let image = UIImage(named: "mine_about_logo") {
+            model.logoImg = image
+        }
+        model.logoWidth = 80
+        model.logoHeight = 80
+        model.logoOffsetTopY = 50
+        model.logoOffsetX = 0
+        model.logoHidden = false
+
+        // 手机号
+        model.numberColor = QSLColor.Color_202020
+        model.numberFont = UIFont.systemFont(ofSize: 18)
+        model.numberOffsetTopY = 160
+        model.numberOffsetX = 0
+        model.numberHeight = 27
+
+        // 品牌标语
+        model.brandColor = .hexStringColor(hexString: "#8F8F8F")
+        model.brandFont = UIFont.systemFont(ofSize: 12)
+        model.brandWidth = 200
+        model.brandHeight = 16
+        model.brandOffsetX = 0
+        model.brandOffsetTopY = 200
+        model.brandHidden = false
+
+        // 登录按钮
+        model.logBtnText = "本机号码一键登录"
+        model.logBtnTextFont = UIFont.systemFont(ofSize: 18)
+        model.logBtnTextColor = UIColor.white
+        model.logBtnOffsetTopY = 260
+        model.logBtnRadius = 8
+        model.logBtnUsableBGColor = QSLColor.themeMainColor
+        model.logBtnOriginLeft = 24
+        model.logBtnOriginRight = 24
+        model.logBtnHeight = 56
+
+        // 协议
+        if let image = UIImage(named: "login_agree_n") {
+            model.uncheckedImg = image
+        }
+        if let image = UIImage(named: "login_agree_s") {
+            model.checkedImg = image
+        }
+
+        model.uncheckedImg = UIImage(named: "public_select_btn_false")?.withRenderingMode(.alwaysOriginal) ?? UIImage(named: "")!
+        model.checkedImg = UIImage(named: "public_select_btn_true")?.withRenderingMode(.alwaysOriginal) ?? UIImage(named: "")!
+        model.checkboxWH = 22
+        model.privacyState = false
+        model.checkBoxAlignment = .center
+        model.checkedSelected = false
+        model.checkBoxMargin = 5
+//        model.appPrivacyOriginLeftMargin = 32
+//        model.appPrivacyOriginRightMargin = 12
+        model.appPrivacyOriginBottomMargin = 40
+        if let image = UIImage(named: "public_back_btn") {
+            model.privacyNavReturnImg = image
+        }
+//        model.privacyNavReturnImg = UIImage(named: "navigation_back") ?? UIImage(named: "")
+        model.appPrivacyText = "已阅读并同意《隐私权政策》、《用户协议》"
+        model.appFPrivacyText = "《隐私权政策》"
+        model.appFPrivacyURL = QSLConfig.AppPrivacyAgreementLink
+        model.appSPrivacyText = "《用户协议》"
+        model.appSPrivacyURL =  QSLConfig.AppServiceAgreementLink
+        model.shouldHiddenPrivacyMarks = false
+        model.privacyColor = .hexStringColor(hexString: "#404040")//.hexStringColor(hexString: "#2F79FF")
+        model.privacyFont = UIFont.systemFont(ofSize: 12)
+        model.protocolColor = .hexStringColor(hexString: "#2F79FF")
+        model.appPrivacyLineSpacing = 1
+        model.appPrivacyWordSpacing = 0
+        model.progressColor = .hexStringColor(hexString: "#D9D9D9")
+        
+        model.toastBackgroundColor = .white//.hexStringColor(hexString: "#171717")
+        model.toastTitleText = "隐私政策及权限说明"
+//        model.toastTitleFontSize = 14
+        model.toastTitleTextColor = QSLColor.Color_202020//.white
+
+        //同意按钮
+        model.toastConfirmText = "同意并继续"
+        model.toastConfirmBorderColor = .clear
+        model.toastConfirmTextColor = .white
+        model.toastConfirmBackgroundColor = .hexStringColor(hexString: "#15CBA1")
+        model.toastConfirmCornerRadius = 18
+        
+        //不同意按钮
+        model.toastCancelText = "不同意"
+        model.toastCancelBorderColor = .clear
+        model.toastCancelBackgroundColor = .hexStringColor(hexString: "#F8F8F8")
+        model.toastCancelTextColor = .hexStringColor(hexString: "#A7A7A7")
+        model.toastEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
+        
+        model.toastContentTextColor = .hexStringColor(hexString: "#404040")
+        model.toastContentFontWeight = .regular
+        model.toastContentPrefixText = "需同意"
+        model.toastContentSuffixText = "才能继续享受我们的服务,您的信任对我们非常重要!如您仍不同意本隐私政策与服务条例,很遗憾我们难以为您继续服务~"
+        model.toastProtocolTextColor = .hexStringColor(hexString: "#6B9CF2")
+
+        // 添加自定义按钮 “验证码登录”
+        model.customViewBlock = { customView in
+            let codeLoginBtn = UIButton(type: .system)
+            codeLoginBtn.setTitle("验证码登录", for: .normal)
+            codeLoginBtn.setTitleColor(QSLColor.Color_202020, for: .normal)
+            codeLoginBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
+            codeLoginBtn.backgroundColor = .clear
+            codeLoginBtn.layer.cornerRadius = 20
+            codeLoginBtn.addTarget(self, action: #selector(self.codeLoginAction), for: .touchUpInside)
+            
+            customView?.addSubview(codeLoginBtn)
+            codeLoginBtn.translatesAutoresizingMaskIntoConstraints = false
+            NSLayoutConstraint.activate([
+                codeLoginBtn.topAnchor.constraint(equalTo: customView!.topAnchor, constant: 340),
+                codeLoginBtn.leadingAnchor.constraint(equalTo: customView!.leadingAnchor, constant: 80),
+                codeLoginBtn.trailingAnchor.constraint(equalTo: customView!.trailingAnchor, constant: -80),
+                codeLoginBtn.heightAnchor.constraint(equalToConstant: 30)
+            ])
+        }
+        
+        model.backActionBlock = { backType in
+            if backType == 2 {
+                self.currentVC?.navigationController?.popViewController(animated: true)
+            }
+        }
+
+        model.loginActionBlock = { isCheck in
+            if isCheck {
+                QSLLoading.show()
+            }
+        }
+        
+        NTESQuickLoginManager.sharedInstance().setupModel(model)
+    }
+    
+    func obtionAuthorizeLogin() {
+        NTESQuickLoginManager.sharedInstance().cucmctAuthorizeLoginCompletion({ resultDic in
+            if let isSuccess = resultDic["success"] as? Bool {
+                if isSuccess {
+                    if let accessToken = resultDic["accessToken"] as? String {
+                        self.accessToken = accessToken
+                    }
+                    Task {
+                        await self.requestOneClickLogin()
+                    }
+                } else {
+                    QSLLoading.hide()
+                    Task { @MainActor in
+                        self.showMyToast(showText: "一键登录失败,请使用验证码登录")
+                    }
+                }
+            }
+        })
+    }
+     
+    func requestOneClickLogin() async {
+        guard let token = self.token else {
+            return
+        }
+        guard let accessToken = self.accessToken else {
+            return
+        }
+        QSLLoading.show()
+        QSLNetwork().request(.loginOneclick(dict:["token": token, "accessToken": accessToken]), success: { response in
+            QSLLoading.hide()
+            let authToken = response.toJSON(modelKey: "data>authToken").stringValue
+            let phone = response.toJSON(modelKey: "data>phone").stringValue
+            QSLBaseManager.shared.loginUpdateUser(authToken: authToken, phone: phone)
+            // 使用时必须异步调用
+            Task { @MainActor in
+                self.showMyToast(showText:  "登录成功")
+            }
+            gravityInstance?.track(QSLGravityConst.login_success)
+            // 发送通知
+            NotificationCenter.default.post(name: QSLNotification.QSLLogin, object: nil)
+            // 发送通知
+            NotificationCenter.default.post(name: QSLNotification.QSLRefreshMember, object: nil)
+            
+            // 返回
+            Task { @MainActor in
+                self.popCurrentViewController()
+            }
+            
+        }, fail: { code, error in
+            if code == 1005 {
+                gravityInstance?.track(QSLGravityConst.login_fail, properties: ["id": 1002])
+            } else {
+                gravityInstance?.track(QSLGravityConst.login_fail, properties: ["id": 1003])
+            }
+            QSLLoading.hide()
+            //self.currentVC?.view.toast(text: error)
+            Task { @MainActor in
+                self.showMyToast(showText: error)
+            }
+        })
+    }
+    
+    @objc @MainActor func popCurrentViewController() {
+        self.currentVC?.navigationController?.popViewController(animated: true)
+    }
+    
+    @objc @MainActor func showMyToast(showText: String) {
+        UIApplication.keyWindow?.toast(text: showText)
+    }
+    
+    
+    // MARK: - 你需要实现的按钮点击方法
+    @objc func codeLoginAction() {
+        // 实现你的验证码登录逻辑
+        print("验证码登录按钮点击")
+        ///去登录
+        if !QSLBaseManager.shared.isLogin() {
+            gravityInstance?.track(QSLGravityConst.mine_login)
+            
+            let longinvc = QSLLoginViewController()
+            longinvc.type = .onQucikLogin
+            self.currentVC?.pushVC(vc: longinvc)
+
+        }
+    }
+}
+
+extension QSQuickLogonHandle: NTESQuickLoginManagerDelegate {
+    
+    func authViewDidAppear() {
+       
+    }
+    
+    func authViewDealloc() {
+        
+    }
+    
+    func authViewDidLoad() {
+        
+    }
+    
+    func authViewWillAppear() {
+        QSLLoading.hide()
+    }
+    
+    func authViewDidDisappear() {
+        
+    }
+    
+    func authViewWillDisappear() {
+        
+    }
+}

+ 4 - 0
QuickSearchLocation/Macro/QSLApi.swift

@@ -111,6 +111,10 @@ extension QSLApi {
     
     // 清空用户所有数据
     static let user_clear = "/s/v1/user/clear"
+    
+    
+    // 一键登录
+    static let login_oneclick = "/s/v1/user/login/oneclick"
 }
 
 // 好友模块

+ 7 - 0
QuickSearchLocation/Macro/QSLConfig.swift

@@ -28,3 +28,10 @@ extension QSLConfig {
     // 购买人数
     static let user_default_local_buy_count = "UserDefaultLocalBuyCount"
 }
+
+
+extension QSLConfig {
+    
+    // 购买人数
+    static let quick_logon_key_id = "dc38d3518af74a75b41c345d869fa57d"
+}