Commit 4b46ed20edc13f931472ea3ee24e4b86b1f162fd
1 parent
b65580f1
微信登录 , 苹果登录 , 绑定手机号
Showing
7 changed files
with
673 additions
and
32 deletions
metaCode.xcodeproj/project.pbxproj
| @@ -126,6 +126,8 @@ | @@ -126,6 +126,8 @@ | ||
| 126 | 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FEF2AF0E5B30094D962 /* CNLiveShopDetailModel.swift */; }; | 126 | 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FEF2AF0E5B30094D962 /* CNLiveShopDetailModel.swift */; }; |
| 127 | 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */; }; | 127 | 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */; }; |
| 128 | 19BB202B2AF382150094D962 /* CNLiveAdaptTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB202A2AF382150094D962 /* CNLiveAdaptTool.swift */; }; | 128 | 19BB202B2AF382150094D962 /* CNLiveAdaptTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB202A2AF382150094D962 /* CNLiveAdaptTool.swift */; }; |
| 129 | + 19C0F7672BD8DC4D0097CC8F /* CNThreeLoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19C0F7662BD8DC4D0097CC8F /* CNThreeLoginModel.swift */; }; | ||
| 130 | + 19C0F7692BD9F9F70097CC8F /* CNThreeLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19C0F7682BD9F9F70097CC8F /* CNThreeLoginViewController.swift */; }; | ||
| 129 | 19CC4D472ADD006600308E2A /* CNDownSlideSingleCourseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */; }; | 131 | 19CC4D472ADD006600308E2A /* CNDownSlideSingleCourseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */; }; |
| 130 | 19CC4D492ADD06C500308E2A /* UITableView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D482ADD06C500308E2A /* UITableView+Extension.swift */; }; | 132 | 19CC4D492ADD06C500308E2A /* UITableView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D482ADD06C500308E2A /* UITableView+Extension.swift */; }; |
| 131 | 19CC4D4B2ADD086F00308E2A /* CNUpSlideDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D4A2ADD086F00308E2A /* CNUpSlideDetailViewController.swift */; }; | 133 | 19CC4D4B2ADD086F00308E2A /* CNUpSlideDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D4A2ADD086F00308E2A /* CNUpSlideDetailViewController.swift */; }; |
| @@ -401,6 +403,8 @@ | @@ -401,6 +403,8 @@ | ||
| 401 | 19BB1FEF2AF0E5B30094D962 /* CNLiveShopDetailModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailModel.swift; sourceTree = "<group>"; }; | 403 | 19BB1FEF2AF0E5B30094D962 /* CNLiveShopDetailModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailModel.swift; sourceTree = "<group>"; }; |
| 402 | 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLliveShopDetailBannerCell.swift; sourceTree = "<group>"; }; | 404 | 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLliveShopDetailBannerCell.swift; sourceTree = "<group>"; }; |
| 403 | 19BB202A2AF382150094D962 /* CNLiveAdaptTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAdaptTool.swift; sourceTree = "<group>"; }; | 405 | 19BB202A2AF382150094D962 /* CNLiveAdaptTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAdaptTool.swift; sourceTree = "<group>"; }; |
| 406 | + 19C0F7662BD8DC4D0097CC8F /* CNThreeLoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNThreeLoginModel.swift; sourceTree = "<group>"; }; | ||
| 407 | + 19C0F7682BD9F9F70097CC8F /* CNThreeLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNThreeLoginViewController.swift; sourceTree = "<group>"; }; | ||
| 404 | 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNDownSlideSingleCourseCell.swift; sourceTree = "<group>"; }; | 408 | 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNDownSlideSingleCourseCell.swift; sourceTree = "<group>"; }; |
| 405 | 19CC4D482ADD06C500308E2A /* UITableView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+Extension.swift"; sourceTree = "<group>"; }; | 409 | 19CC4D482ADD06C500308E2A /* UITableView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+Extension.swift"; sourceTree = "<group>"; }; |
| 406 | 19CC4D4A2ADD086F00308E2A /* CNUpSlideDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNUpSlideDetailViewController.swift; sourceTree = "<group>"; }; | 410 | 19CC4D4A2ADD086F00308E2A /* CNUpSlideDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNUpSlideDetailViewController.swift; sourceTree = "<group>"; }; |
| @@ -1008,6 +1012,14 @@ | @@ -1008,6 +1012,14 @@ | ||
| 1008 | path = Model; | 1012 | path = Model; |
| 1009 | sourceTree = "<group>"; | 1013 | sourceTree = "<group>"; |
| 1010 | }; | 1014 | }; |
| 1015 | + 19C0F7652BD8DC390097CC8F /* Model */ = { | ||
| 1016 | + isa = PBXGroup; | ||
| 1017 | + children = ( | ||
| 1018 | + 19C0F7662BD8DC4D0097CC8F /* CNThreeLoginModel.swift */, | ||
| 1019 | + ); | ||
| 1020 | + path = Model; | ||
| 1021 | + sourceTree = "<group>"; | ||
| 1022 | + }; | ||
| 1011 | 19CC4D502ADD126D00308E2A /* Util */ = { | 1023 | 19CC4D502ADD126D00308E2A /* Util */ = { |
| 1012 | isa = PBXGroup; | 1024 | isa = PBXGroup; |
| 1013 | children = ( | 1025 | children = ( |
| @@ -1057,10 +1069,10 @@ | @@ -1057,10 +1069,10 @@ | ||
| 1057 | 790D018C2A2D8C9A00C5978D /* LoginPage */ = { | 1069 | 790D018C2A2D8C9A00C5978D /* LoginPage */ = { |
| 1058 | isa = PBXGroup; | 1070 | isa = PBXGroup; |
| 1059 | children = ( | 1071 | children = ( |
| 1072 | + 19C0F7652BD8DC390097CC8F /* Model */, | ||
| 1060 | 790D01942A2DB9EF00C5978D /* View */, | 1073 | 790D01942A2DB9EF00C5978D /* View */, |
| 1061 | 790D018D2A2D8C9A00C5978D /* ViewModel */, | 1074 | 790D018D2A2D8C9A00C5978D /* ViewModel */, |
| 1062 | 790D018E2A2D8C9A00C5978D /* Controller */, | 1075 | 790D018E2A2D8C9A00C5978D /* Controller */, |
| 1063 | - 790D018F2A2D8C9A00C5978D /* Model */, | ||
| 1064 | ); | 1076 | ); |
| 1065 | path = LoginPage; | 1077 | path = LoginPage; |
| 1066 | sourceTree = "<group>"; | 1078 | sourceTree = "<group>"; |
| @@ -1077,17 +1089,11 @@ | @@ -1077,17 +1089,11 @@ | ||
| 1077 | isa = PBXGroup; | 1089 | isa = PBXGroup; |
| 1078 | children = ( | 1090 | children = ( |
| 1079 | 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */, | 1091 | 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */, |
| 1092 | + 19C0F7682BD9F9F70097CC8F /* CNThreeLoginViewController.swift */, | ||
| 1080 | ); | 1093 | ); |
| 1081 | path = Controller; | 1094 | path = Controller; |
| 1082 | sourceTree = "<group>"; | 1095 | sourceTree = "<group>"; |
| 1083 | }; | 1096 | }; |
| 1084 | - 790D018F2A2D8C9A00C5978D /* Model */ = { | ||
| 1085 | - isa = PBXGroup; | ||
| 1086 | - children = ( | ||
| 1087 | - ); | ||
| 1088 | - path = Model; | ||
| 1089 | - sourceTree = "<group>"; | ||
| 1090 | - }; | ||
| 1091 | 790D01942A2DB9EF00C5978D /* View */ = { | 1097 | 790D01942A2DB9EF00C5978D /* View */ = { |
| 1092 | isa = PBXGroup; | 1098 | isa = PBXGroup; |
| 1093 | children = ( | 1099 | children = ( |
| @@ -1749,6 +1755,7 @@ | @@ -1749,6 +1755,7 @@ | ||
| 1749 | 1917334C2B2BE9CA007BCC04 /* CNLiveCreateCouponTypeMoneyView.swift in Sources */, | 1755 | 1917334C2B2BE9CA007BCC04 /* CNLiveCreateCouponTypeMoneyView.swift in Sources */, |
| 1750 | 191733002B0B58E5007BCC04 /* CNLiveSelectUploadImageModel.swift in Sources */, | 1756 | 191733002B0B58E5007BCC04 /* CNLiveSelectUploadImageModel.swift in Sources */, |
| 1751 | 19F1C2332AB5728B0083D06C /* CNIDCardView.swift in Sources */, | 1757 | 19F1C2332AB5728B0083D06C /* CNIDCardView.swift in Sources */, |
| 1758 | + 19C0F7692BD9F9F70097CC8F /* CNThreeLoginViewController.swift in Sources */, | ||
| 1752 | 191732F32B084DBC007BCC04 /* CNLiveShopClassifySwitchTableViewCell.swift in Sources */, | 1759 | 191732F32B084DBC007BCC04 /* CNLiveShopClassifySwitchTableViewCell.swift in Sources */, |
| 1753 | 191732E72B0615C1007BCC04 /* UIScrollView+CNLiveExtensions.swift in Sources */, | 1760 | 191732E72B0615C1007BCC04 /* UIScrollView+CNLiveExtensions.swift in Sources */, |
| 1754 | 1917328E2B032583007BCC04 /* CNLiveRoundedRectView.swift in Sources */, | 1761 | 1917328E2B032583007BCC04 /* CNLiveRoundedRectView.swift in Sources */, |
| @@ -1929,6 +1936,7 @@ | @@ -1929,6 +1936,7 @@ | ||
| 1929 | 1938BD262B479D3400390A34 /* UILabel+FormattedText.swift in Sources */, | 1936 | 1938BD262B479D3400390A34 /* UILabel+FormattedText.swift in Sources */, |
| 1930 | 79DC67642B5FB60900261A94 /* CNLiveMineAuthFormViewController.swift in Sources */, | 1937 | 79DC67642B5FB60900261A94 /* CNLiveMineAuthFormViewController.swift in Sources */, |
| 1931 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, | 1938 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, |
| 1939 | + 19C0F7672BD8DC4D0097CC8F /* CNThreeLoginModel.swift in Sources */, | ||
| 1932 | 794FF1092B02131300385E85 /* CNLiveSaveSearchDB.swift in Sources */, | 1940 | 794FF1092B02131300385E85 /* CNLiveSaveSearchDB.swift in Sources */, |
| 1933 | 79396EED2A319F220053E1AF /* NSObject+CNLiveExtensions.swift in Sources */, | 1941 | 79396EED2A319F220053E1AF /* NSObject+CNLiveExtensions.swift in Sources */, |
| 1934 | 1917331B2B10A0EF007BCC04 /* CNLivePlayerLoadingView.swift in Sources */, | 1942 | 1917331B2B10A0EF007BCC04 /* CNLivePlayerLoadingView.swift in Sources */, |
metaCode/Classes/Main/LoginPage/Controller/CNLiveLoginViewController.swift
| @@ -10,6 +10,7 @@ import UIKit | @@ -10,6 +10,7 @@ import UIKit | ||
| 10 | import SnapKit | 10 | import SnapKit |
| 11 | import APButton | 11 | import APButton |
| 12 | import CNLiveShareToolKit | 12 | import CNLiveShareToolKit |
| 13 | +import AuthenticationServices | ||
| 13 | 14 | ||
| 14 | class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | 15 | class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { |
| 15 | 16 | ||
| @@ -77,9 +78,20 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | @@ -77,9 +78,20 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | ||
| 77 | wxButton.addTarget(self, action: #selector(sendWXLoginActionMothod), for: .touchUpInside) | 78 | wxButton.addTarget(self, action: #selector(sendWXLoginActionMothod), for: .touchUpInside) |
| 78 | return wxButton | 79 | return wxButton |
| 79 | }() | 80 | }() |
| 81 | + | ||
| 82 | + lazy var tipLabel: UILabel = { | ||
| 83 | + let tipLabel = UILabel.init() | ||
| 84 | + tipLabel.text = "未注册的手机号验证后自动为您创建元码账户" | ||
| 85 | + tipLabel.textColor = HexColor("#464646") | ||
| 86 | + tipLabel.textAlignment = .left | ||
| 87 | + tipLabel.font = Font_11_Fit | ||
| 88 | + return tipLabel | ||
| 89 | + }() | ||
| 90 | + | ||
| 80 | 91 | ||
| 81 | var is_agree : Bool = false //是否同意协议 | 92 | var is_agree : Bool = false //是否同意协议 |
| 82 | - var country : String = "86" | 93 | + var countryCode: String = "86" |
| 94 | +// var countryStr: String = "中国大陆" | ||
| 83 | var timeOut = 30//多少秒计时器 | 95 | var timeOut = 30//多少秒计时器 |
| 84 | 96 | ||
| 85 | 97 | ||
| @@ -204,22 +216,95 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | @@ -204,22 +216,95 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | ||
| 204 | make.left.equalTo(verView.snp.left).offset(40) | 216 | make.left.equalTo(verView.snp.left).offset(40) |
| 205 | } | 217 | } |
| 206 | 218 | ||
| 207 | - let tipLabel = UILabel.init() | ||
| 208 | - tipLabel.text = "未注册的手机号验证后自动为您创建元码账户" | ||
| 209 | - tipLabel.textColor = HexColor("#464646") | ||
| 210 | - tipLabel.textAlignment = .left | ||
| 211 | - tipLabel.font = Font_11_Fit | ||
| 212 | self.view.addSubview(tipLabel) | 219 | self.view.addSubview(tipLabel) |
| 213 | tipLabel.snp.makeConstraints { make in | 220 | tipLabel.snp.makeConstraints { make in |
| 214 | - make.centerX.equalTo(self.view) | ||
| 215 | - make.left.right.equalTo(self.view).offset(40) | 221 | + make.centerX.equalToSuperview() |
| 222 | + make.width.equalTo(KSreenWidth-80) | ||
| 216 | make.top.equalTo(verView.snp.bottom).offset(10) | 223 | make.top.equalTo(verView.snp.bottom).offset(10) |
| 217 | } | 224 | } |
| 218 | } | 225 | } |
| 219 | 226 | ||
| 220 | @objc func sendWXLoginActionMothod() { | 227 | @objc func sendWXLoginActionMothod() { |
| 221 | - CNLiveShareImageManager.send(CNLiveSendAuthRespWX) { resp, userInfo, error in | 228 | + if !is_agree { |
| 229 | + showMessage(message: "请先阅读并同意协议") | ||
| 230 | + return | ||
| 231 | + } | ||
| 232 | + self.threeLogin(resp: CNLiveSendAuthRespWX) | ||
| 233 | + } | ||
| 234 | + | ||
| 235 | + @objc func appleButtonAction(sender : UIButton) { | ||
| 236 | + if !is_agree { | ||
| 237 | + showMessage(message: "请先阅读并同意协议") | ||
| 238 | + return | ||
| 239 | + } | ||
| 240 | + self.threeLogin(resp: CNLiveSendAuthRespApple) | ||
| 241 | + } | ||
| 242 | + | ||
| 243 | + //三方登录 | ||
| 244 | + func threeLogin(resp:CNLiveSendAuthResp){ | ||
| 245 | + CNLiveShareImageManager.send(resp) { [weak self] resp, userInfo, error in | ||
| 246 | + if (error != nil){ | ||
| 247 | + if let err = error as? NSError{ | ||
| 248 | +// if err.code == 1001{//苹果登录错误 | ||
| 249 | +// showMessage(message: "取消登录") | ||
| 250 | +// return | ||
| 251 | +// } | ||
| 252 | + if err.code == 10000{//用户取消 | ||
| 253 | + showMessage(message: "取消登录") | ||
| 254 | + }else{ | ||
| 255 | + showMessage(message: "登录失败") | ||
| 256 | + } | ||
| 257 | + return | ||
| 258 | + }else{ | ||
| 259 | + showMessage(message: "登录失败") | ||
| 260 | + } | ||
| 261 | + return | ||
| 262 | + } | ||
| 263 | + if let userModel = userInfo{ | ||
| 264 | + let threeModel = CNThreeLoginModel() | ||
| 265 | + threeModel.thirdPartyId = userModel.thirdPartyId | ||
| 266 | + threeModel.nickName = userModel.nickName ?? "" | ||
| 267 | + threeModel.gender = userModel.gender ?? "" | ||
| 268 | + threeModel.location = userModel.location ?? "" | ||
| 269 | + threeModel.faceUrl = userModel.faceUrl ?? "" | ||
| 270 | + threeModel.access_token = userModel.access_token ?? "" | ||
| 271 | + threeModel.refresh_token = userModel.refresh_token ?? "" | ||
| 272 | + threeModel.type = CNLiveSendAuthRespWX | ||
| 273 | +// threeModel.countryName = self!.countryStr | ||
| 274 | + threeModel.countryCode = self!.countryCode | ||
| 275 | + threeModel.frmId = "Apple"//[CNTools getFrmId] | ||
| 276 | + switch resp { | ||
| 277 | + case CNLiveSendAuthRespApple: | ||
| 278 | + threeModel.thirdPartyPlat = "5" | ||
| 279 | + break | ||
| 280 | + case CNLiveSendAuthRespWX: | ||
| 281 | + threeModel.thirdPartyPlat = "3" | ||
| 282 | + break | ||
| 283 | + default: | ||
| 284 | + threeModel.thirdPartyPlat = "3" | ||
| 285 | + break | ||
| 286 | + } | ||
| 287 | + if resp == CNLiveSendAuthRespApple{ | ||
| 288 | + self!.appleLogin(model: threeModel) | ||
| 289 | + }else{ | ||
| 290 | + self!.thirdPartyLoginWithType(type: resp, model: threeModel) | ||
| 291 | + } | ||
| 292 | + }else{ | ||
| 293 | + | ||
| 294 | + } | ||
| 222 | 295 | ||
| 296 | + | ||
| 297 | + } | ||
| 298 | + } | ||
| 299 | + | ||
| 300 | + func appleLogin(model:CNThreeLoginModel){ | ||
| 301 | + CNLiveLoginViewModel.appleLogin(model: model) { result, status in | ||
| 302 | + if status == .success{ | ||
| 303 | + let window = UIApplication.shared.delegate?.window | ||
| 304 | + window??.rootViewController = CNLiveBaseTabBarViewController.init() | ||
| 305 | + }else{ | ||
| 306 | + | ||
| 307 | + } | ||
| 223 | } | 308 | } |
| 224 | } | 309 | } |
| 225 | 310 | ||
| @@ -258,33 +343,96 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | @@ -258,33 +343,96 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate { | ||
| 258 | make.right.equalTo(view.snp.right).offset(-25) | 343 | make.right.equalTo(view.snp.right).offset(-25) |
| 259 | } | 344 | } |
| 260 | 345 | ||
| 261 | - view.addSubview(wxButton) | ||
| 262 | - wxButton.snp.makeConstraints { make in | ||
| 263 | - make.centerX.equalTo(view) | ||
| 264 | - make.bottom.equalTo(textView.snp.top).offset(-10) | ||
| 265 | - make.left.equalTo(40) | ||
| 266 | - make.right.equalTo(-40) | ||
| 267 | - make.height.equalTo(40) | ||
| 268 | - } | ||
| 269 | view.addSubview(loginButton) | 346 | view.addSubview(loginButton) |
| 270 | loginButton.snp.makeConstraints { make in | 347 | loginButton.snp.makeConstraints { make in |
| 271 | make.centerX.equalTo(view) | 348 | make.centerX.equalTo(view) |
| 272 | - make.bottom.equalTo(wxButton.snp.top).offset(-10) | 349 | + make.top.equalTo(tipLabel.snp.bottom).offset(adapt_length(length: 102)) |
| 273 | make.left.equalTo(40) | 350 | make.left.equalTo(40) |
| 274 | make.right.equalTo(-40) | 351 | make.right.equalTo(-40) |
| 275 | make.height.equalTo(40) | 352 | make.height.equalTo(40) |
| 276 | } | 353 | } |
| 354 | + view.addSubview(wxButton) | ||
| 355 | + | ||
| 356 | + if #available(iOS 13.0, *) { | ||
| 357 | + let appleButton = ASAuthorizationAppleIDButton(type: ASAuthorizationAppleIDButton.ButtonType.default, style: ASAuthorizationAppleIDButton.Style.white) | ||
| 358 | + appleButton.addTarget(self, action: #selector(appleButtonAction), for: .touchUpInside) | ||
| 359 | + appleButton.layer.masksToBounds = true | ||
| 360 | + appleButton.layer.cornerRadius = 20 | ||
| 361 | + appleButton.layer.borderWidth = 1.0 | ||
| 362 | + appleButton.layer.borderColor = UIColor.black.cgColor | ||
| 363 | + view.addSubview(appleButton) | ||
| 364 | + appleButton.snp.makeConstraints { make in | ||
| 365 | + make.left.equalTo(40) | ||
| 366 | + make.right.equalTo(loginButton.snp.centerX).offset(-5) | ||
| 367 | + make.top.equalTo(loginButton.snp.bottom).offset(15) | ||
| 368 | + make.height.equalTo(loginButton.snp.height) | ||
| 369 | + } | ||
| 370 | + | ||
| 371 | + wxButton.snp.makeConstraints { make in | ||
| 372 | + make.right.equalTo(loginButton.snp.right) | ||
| 373 | + make.left.equalTo(loginButton.snp.centerX).offset(5) | ||
| 374 | + make.top.equalTo(loginButton.snp.bottom).offset(15) | ||
| 375 | + make.height.equalTo(loginButton.snp.height) | ||
| 376 | + } | ||
| 377 | + } else { | ||
| 378 | + // Fallback on earlier versions | ||
| 379 | + wxButton.snp.makeConstraints { make in | ||
| 380 | + make.centerX.equalTo(view) | ||
| 381 | + make.top.equalTo(loginButton.snp.bottom).offset(15) | ||
| 382 | + make.left.equalTo(40) | ||
| 383 | + make.right.equalTo(-40) | ||
| 384 | + make.height.equalTo(40) | ||
| 385 | + } | ||
| 386 | + } | ||
| 277 | 387 | ||
| 278 | loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | 388 | loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) |
| 279 | - wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 0.3),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | 389 | + wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 1),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) |
| 390 | +// wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 0.3),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | ||
| 391 | + } | ||
| 392 | + | ||
| 393 | + // MARK: - 三方登录 | ||
| 394 | + func thirdPartyLoginWithType(type:CNLiveSendAuthResp,model:CNThreeLoginModel){ | ||
| 395 | + //test | ||
| 396 | + let vc = CNThreeLoginViewController(model: model) | ||
| 397 | + self.navigationController?.pushViewController(vc, animated: true) | ||
| 398 | + return | ||
| 399 | + | ||
| 400 | +// showLoading(message: "") | ||
| 401 | +// CNLiveLoginViewModel.thirdPartyLoginWithType(type: type, model: model) {[weak self] result, status in | ||
| 402 | +// hiddenLoading() | ||
| 403 | +// if status == .success{ | ||
| 404 | +// //登录成功 | ||
| 405 | +// let window = UIApplication.shared.delegate?.window | ||
| 406 | +// window??.rootViewController = CNLiveBaseTabBarViewController.init() | ||
| 407 | +// }else{ | ||
| 408 | +// if let res = result as? String{ | ||
| 409 | +// if res == "42013"{ | ||
| 410 | +// if (type == CNLiveSendAuthRespApple) { | ||
| 411 | +// let window = UIApplication.shared.delegate?.window | ||
| 412 | +// window??.rootViewController = CNLiveBaseTabBarViewController.init() | ||
| 413 | +// return | ||
| 414 | +// } | ||
| 415 | +// | ||
| 416 | +// //未注册,需要绑定手机号 | ||
| 417 | +// //跳转绑定手机号页面 | ||
| 418 | +// let vc = CNThreeLoginViewController(model: model) | ||
| 419 | +// | ||
| 420 | +// self!.navigationController?.pushViewController(vc, animated: true) | ||
| 421 | +// } | ||
| 422 | +// }else{ | ||
| 423 | +// | ||
| 424 | +// } | ||
| 425 | +// } | ||
| 426 | +// } | ||
| 280 | } | 427 | } |
| 428 | + | ||
| 281 | } | 429 | } |
| 282 | 430 | ||
| 283 | extension CNLiveLoginViewController { | 431 | extension CNLiveLoginViewController { |
| 284 | 432 | ||
| 285 | @objc func changeCityNumberMothod(sender : UIButton) { | 433 | @objc func changeCityNumberMothod(sender : UIButton) { |
| 286 | CNLiveLoginPickerView.showSelectView { [weak self] text in | 434 | CNLiveLoginPickerView.showSelectView { [weak self] text in |
| 287 | - self!.country = text | 435 | + self!.countryCode = text |
| 288 | self!.areaButton.setTitle("+\(text)", for: .normal) | 436 | self!.areaButton.setTitle("+\(text)", for: .normal) |
| 289 | self!.areaButton.setTitle("+\(text)", for: .highlighted) | 437 | self!.areaButton.setTitle("+\(text)", for: .highlighted) |
| 290 | } | 438 | } |
| @@ -292,7 +440,7 @@ extension CNLiveLoginViewController { | @@ -292,7 +440,7 @@ extension CNLiveLoginViewController { | ||
| 292 | 440 | ||
| 293 | @objc func sendVerifiCodeMothod(sender : UIButton) { | 441 | @objc func sendVerifiCodeMothod(sender : UIButton) { |
| 294 | view.endEditing(true) | 442 | view.endEditing(true) |
| 295 | - CNLiveLoginViewModel.requestVerCodeAction(phone: phoneText.text ?? "", code: country) { [weak self] in | 443 | + CNLiveLoginViewModel.requestVerCodeAction(phone: phoneText.text ?? "", code: countryCode) { [weak self] in |
| 296 | self!.setupCountdownAction(sender: sender) | 444 | self!.setupCountdownAction(sender: sender) |
| 297 | } | 445 | } |
| 298 | } | 446 | } |
| @@ -305,7 +453,7 @@ extension CNLiveLoginViewController { | @@ -305,7 +453,7 @@ extension CNLiveLoginViewController { | ||
| 305 | wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 1),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | 453 | wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 1),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) |
| 306 | } else { | 454 | } else { |
| 307 | loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | 455 | loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 0.3),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) |
| 308 | - wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 0.3),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | 456 | +// wxButton.setGradient(colors: [UIColor(red: 35/255.0, green: 203/255.0, blue: 105/255.0, alpha: 0.3),UIColor(red: 13/255.0, green: 179/255.0, blue: 85/255.0, alpha: 0.3)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) |
| 309 | } | 457 | } |
| 310 | } | 458 | } |
| 311 | 459 | ||
| @@ -317,7 +465,7 @@ extension CNLiveLoginViewController { | @@ -317,7 +465,7 @@ extension CNLiveLoginViewController { | ||
| 317 | view.endEditing(true) | 465 | view.endEditing(true) |
| 318 | loginButton.startAnimating() | 466 | loginButton.startAnimating() |
| 319 | 467 | ||
| 320 | - CNLiveLoginViewModel.requestLoginAction(userName: phoneText.text ?? "", countryCode: country, verCode: veriText.text ?? "") {[self] in | 468 | + CNLiveLoginViewModel.requestLoginAction(userName: phoneText.text ?? "", countryCode: countryCode, verCode: veriText.text ?? "") {[self] in |
| 321 | loginButton.stopAnimating() | 469 | loginButton.stopAnimating() |
| 322 | let window = UIApplication.shared.delegate?.window | 470 | let window = UIApplication.shared.delegate?.window |
| 323 | window??.rootViewController = CNLiveBaseTabBarViewController.init() | 471 | window??.rootViewController = CNLiveBaseTabBarViewController.init() |
metaCode/Classes/Main/LoginPage/Controller/CNThreeLoginViewController.swift
0 → 100644
| 1 | +// | ||
| 2 | +// CNThreeLoginViewController.swift | ||
| 3 | +// metaCode | ||
| 4 | +// | ||
| 5 | +// Created by zx on 2024/4/25. | ||
| 6 | +// 三方登录绑定手机号页 | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import APButton | ||
| 10 | +import SnapKit | ||
| 11 | + | ||
| 12 | +class CNThreeLoginViewController:CNLiveBaseViewController{ | ||
| 13 | + | ||
| 14 | + lazy var bindingTitleLabel: UILabel = { | ||
| 15 | + let label = UILabel() | ||
| 16 | + let attrString = NSMutableAttributedString(string: "绑定您的手机号") | ||
| 17 | + label.frame = CGRect(x: 45, y: 150, width: 182, height: 36.5) | ||
| 18 | + label.numberOfLines = 0 | ||
| 19 | + let attr: [NSAttributedString.Key : Any] = [.font: BoldFont(26) ,.foregroundColor: UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1)] | ||
| 20 | + attrString.addAttributes(attr, range: NSRange(location: 0, length: attrString.length)) | ||
| 21 | + label.attributedText = attrString | ||
| 22 | + return label | ||
| 23 | + }() | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + lazy var headerView : UIView = { | ||
| 27 | + let layerView = UIView() | ||
| 28 | + layerView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: 427.5*KSreenWidth/375) | ||
| 29 | + // fillCode | ||
| 30 | + let bgLayer1 = CAGradientLayer() | ||
| 31 | + bgLayer1.colors = [UIColor(red: 0.91, green: 0.94, blue: 1, alpha: 1).cgColor, UIColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor] | ||
| 32 | + bgLayer1.locations = [0, 1] | ||
| 33 | + bgLayer1.frame = layerView.bounds | ||
| 34 | + bgLayer1.startPoint = CGPoint(x: 0.5, y: 0) | ||
| 35 | + bgLayer1.endPoint = CGPoint(x: 1, y: 1) | ||
| 36 | + layerView.layer.addSublayer(bgLayer1) | ||
| 37 | + return layerView | ||
| 38 | + }() | ||
| 39 | + | ||
| 40 | + lazy var areaButton : UIButton = { | ||
| 41 | + let areaButton = UIButton(type: .custom) | ||
| 42 | + areaButton.backgroundColor = .white | ||
| 43 | + areaButton.setTitle("+86", for: .normal) | ||
| 44 | + areaButton.setTitle("+86", for: .highlighted) | ||
| 45 | + areaButton.titleLabel?.font = BoldFont_16 | ||
| 46 | + areaButton.setTitleColor(HexColor("#333333"), for: .normal) | ||
| 47 | + areaButton.setTitleColor(HexColor("#333333"), for: .highlighted) | ||
| 48 | + areaButton.addTarget(self, action: #selector(changeCityNumberMothod), for: .touchUpInside) | ||
| 49 | + return areaButton | ||
| 50 | + }() | ||
| 51 | + | ||
| 52 | + lazy var phoneText : UITextField = { | ||
| 53 | + let phoneText = UITextField.init() | ||
| 54 | + phoneText.backgroundColor = .white | ||
| 55 | + phoneText.placeholder = "输入手机号" | ||
| 56 | + phoneText.font = BoldFont_16_Fit | ||
| 57 | + phoneText.keyboardType = .numberPad | ||
| 58 | + phoneText.clearButtonMode = .whileEditing | ||
| 59 | + return phoneText | ||
| 60 | + }() | ||
| 61 | + | ||
| 62 | + lazy var veriText: UITextField = { | ||
| 63 | + let veriText = UITextField.init() | ||
| 64 | + veriText.backgroundColor = .white | ||
| 65 | + veriText.placeholder = "输入验证码" | ||
| 66 | + veriText.font = BoldFont_16_Fit | ||
| 67 | + veriText.keyboardType = .numberPad | ||
| 68 | + veriText.clearButtonMode = .whileEditing | ||
| 69 | + return veriText | ||
| 70 | + }() | ||
| 71 | + | ||
| 72 | + lazy var loginButton: APButton = { | ||
| 73 | + let loginButton = APButton() | ||
| 74 | + loginButton.setTitle("绑 定", for: .normal) | ||
| 75 | + loginButton.setTitleColor(.white, for: .normal) | ||
| 76 | + loginButton.titleLabel?.font = BoldFont_16_Fit | ||
| 77 | + loginButton.layer.cornerRadius = 20 | ||
| 78 | + loginButton.activityIndicator.color = .white | ||
| 79 | + loginButton.layer.masksToBounds = true | ||
| 80 | + loginButton.addTarget(self, action: #selector(sendLoginActionMothod), for: .touchUpInside) | ||
| 81 | + return loginButton | ||
| 82 | + }() | ||
| 83 | + | ||
| 84 | + var countryCode: String = "86" | ||
| 85 | + var timeOut = 30//多少秒计时器 | ||
| 86 | + var model:CNThreeLoginModel? | ||
| 87 | + | ||
| 88 | + init(model:CNThreeLoginModel) { | ||
| 89 | + super.init(nibName: nil, bundle: nil) | ||
| 90 | + self.model = model | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + required init?(coder: NSCoder) { | ||
| 94 | + fatalError("init(coder:) has not been implemented") | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + override func viewDidLoad() { | ||
| 98 | + super.viewDidLoad() | ||
| 99 | + setNeedsStatusBarAppearanceUpdate() | ||
| 100 | + view.backgroundColor = .white | ||
| 101 | + navigationBarHidden = false | ||
| 102 | + | ||
| 103 | + //添加主视图 | ||
| 104 | + self.view.addSubview(self.headerView) | ||
| 105 | + self.view.sendSubviewToBack(self.headerView) | ||
| 106 | + self.headerView.snp.makeConstraints { make in | ||
| 107 | + make.centerX.equalTo(self.view) | ||
| 108 | + make.left.right.equalTo(self.view) | ||
| 109 | + make.top.equalTo(KNavigationHeight) | ||
| 110 | + make.height.equalTo(427.5*KSreenWidth/375) | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + self.view.addSubview(self.bindingTitleLabel) | ||
| 114 | + self.bindingTitleLabel.snp.makeConstraints { make in | ||
| 115 | + make.left.equalToSuperview().offset(45) | ||
| 116 | + make.top.equalTo(KNavigationHeight+adapt_length(length: 100)) | ||
| 117 | + make.width.equalTo(KSreenWidth-90) | ||
| 118 | + make.height.equalTo(40) | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + self.setupPhoneView() | ||
| 122 | + self.setupVeriCodeView() | ||
| 123 | + self.setupLoginButtonView() | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + deinit { | ||
| 127 | + print("已经销毁了") | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + override var preferredStatusBarStyle: UIStatusBarStyle { | ||
| 131 | + return .lightContent | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + func setupPhoneView() { | ||
| 135 | + | ||
| 136 | + let phoneV = UIView.init() | ||
| 137 | + phoneV.backgroundColor = .white | ||
| 138 | + view.addSubview(phoneV) | ||
| 139 | + phoneV.snp.makeConstraints { make in | ||
| 140 | + make.left.right.equalToSuperview() | ||
| 141 | + make.top.equalTo(self.bindingTitleLabel.snp.bottom).offset(adapt_length(length: 60)) | ||
| 142 | + make.height.equalTo(50) | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + phoneV.addSubview(areaButton) | ||
| 146 | + areaButton.snp.makeConstraints { make in | ||
| 147 | + make.centerY.equalTo(phoneV) | ||
| 148 | + make.left.equalTo(phoneV.left).offset(40) | ||
| 149 | + make.width.lessThanOrEqualTo(50) | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + let v_line = UILabel.init() | ||
| 153 | + v_line.backgroundColor = HexColor("#EBEBEB") | ||
| 154 | + phoneV.addSubview(v_line) | ||
| 155 | + v_line.snp.makeConstraints { make in | ||
| 156 | + make.centerY.equalTo(phoneV) | ||
| 157 | + make.left.equalTo(areaButton.snp.right).offset(10) | ||
| 158 | + make.width.equalTo(1) | ||
| 159 | + make.height.equalTo(areaButton.snp.height).multipliedBy(0.35) | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + let h_line = UILabel.init() | ||
| 163 | + h_line.backgroundColor = HexColor("#EBEBEB") | ||
| 164 | + phoneV.addSubview(h_line) | ||
| 165 | + h_line.snp.makeConstraints { make in | ||
| 166 | + make.left.equalTo(phoneV.left).offset(40) | ||
| 167 | + make.right.equalTo(phoneV.right).offset(-40) | ||
| 168 | + make.height.equalTo(v_line.snp.width) | ||
| 169 | + make.bottom.equalTo(phoneV.snp.bottom).offset(-1) | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + phoneV.addSubview(phoneText) | ||
| 173 | + phoneText.snp.makeConstraints { make in | ||
| 174 | + make.centerY.equalTo(phoneV) | ||
| 175 | + make.left.equalTo(areaButton.snp.right).offset(21) | ||
| 176 | + make.height.equalTo(areaButton.snp.height) | ||
| 177 | + make.right.equalTo(phoneV.right).offset(-40) | ||
| 178 | + } | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + func setupVeriCodeView() { | ||
| 182 | + | ||
| 183 | + let verView = UIView.init() | ||
| 184 | + verView.backgroundColor = .white | ||
| 185 | + self.view.addSubview(verView) | ||
| 186 | + verView.snp.makeConstraints { make in | ||
| 187 | + make.left.right.equalTo(self.view) | ||
| 188 | + make.top.equalTo(self.phoneText.snp.bottom).offset(adapt_length(length: 40)) | ||
| 189 | + make.height.equalTo(50) | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + let h_line = UILabel.init() | ||
| 193 | + h_line.backgroundColor = HexColor("#EBEBEB") | ||
| 194 | + verView.addSubview(h_line) | ||
| 195 | + h_line.snp.makeConstraints { make in | ||
| 196 | + make.left.equalTo(verView.left).offset(40) | ||
| 197 | + make.right.equalTo(verView.right).offset(-40) | ||
| 198 | + make.height.equalTo(1) | ||
| 199 | + make.bottom.equalTo(verView.snp.bottom).offset(-1) | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + let codeButton = UIButton(type: .custom) | ||
| 203 | + codeButton.backgroundColor = .white | ||
| 204 | + codeButton.setTitle("获取验证码", for: .normal) | ||
| 205 | + codeButton.setTitle("获取验证码", for: .highlighted) | ||
| 206 | + codeButton.titleLabel?.font = Font_16 | ||
| 207 | + codeButton.setTitleColor(HexColor("#0066FE"), for: .normal) | ||
| 208 | + codeButton.setTitleColor(HexColor("#0066FE"), for: .highlighted) | ||
| 209 | + codeButton.addTarget(self, action: #selector(sendVerifiCodeMothod), for: .touchUpInside) | ||
| 210 | + verView.addSubview(codeButton) | ||
| 211 | + codeButton.snp.makeConstraints { make in | ||
| 212 | + make.centerY.equalTo(verView) | ||
| 213 | + make.right.equalTo(verView.snp.right).offset(-40) | ||
| 214 | + make.width.lessThanOrEqualTo(100) | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + verView.addSubview(veriText) | ||
| 218 | + veriText.snp.makeConstraints { make in | ||
| 219 | + make.centerY.equalTo(verView) | ||
| 220 | + make.right.equalTo(codeButton.snp.left).offset(-20) | ||
| 221 | + make.height.equalTo(codeButton.snp.height) | ||
| 222 | + make.left.equalTo(verView.snp.left).offset(40) | ||
| 223 | + } | ||
| 224 | + } | ||
| 225 | + func setupLoginButtonView() { | ||
| 226 | + | ||
| 227 | + view.addSubview(loginButton) | ||
| 228 | + loginButton.snp.makeConstraints { make in | ||
| 229 | + make.centerX.equalTo(view) | ||
| 230 | + make.top.equalTo(veriText.snp.bottom).offset(adapt_length(length: 105)) | ||
| 231 | + make.left.equalTo(40) | ||
| 232 | + make.right.equalTo(-40) | ||
| 233 | + make.height.equalTo(40) | ||
| 234 | + } | ||
| 235 | + | ||
| 236 | + loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5)) | ||
| 237 | + | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + @objc func changeCityNumberMothod(sender : UIButton) { | ||
| 241 | + CNLiveLoginPickerView.showSelectView { [weak self] text in | ||
| 242 | + self!.countryCode = text | ||
| 243 | + self!.areaButton.setTitle("+\(text)", for: .normal) | ||
| 244 | + self!.areaButton.setTitle("+\(text)", for: .highlighted) | ||
| 245 | + } | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + @objc func sendVerifiCodeMothod(sender : UIButton) { | ||
| 249 | + view.endEditing(true) | ||
| 250 | + CNLiveLoginViewModel.requestVerCodeAction(phone: phoneText.text ?? "", code: countryCode) { [weak self] in | ||
| 251 | + self!.setupCountdownAction(sender: sender) | ||
| 252 | + } | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + @objc func sendLoginActionMothod(sender : UIButton) { | ||
| 256 | + view.endEditing(true) | ||
| 257 | + if phoneText.text ?? "" == ""{ | ||
| 258 | + showMessage(message: "请输入手机号") | ||
| 259 | + return | ||
| 260 | + } | ||
| 261 | + if veriText.text ?? "" == ""{ | ||
| 262 | + showMessage(message: "请输入验证码") | ||
| 263 | + return | ||
| 264 | + } | ||
| 265 | + showLoading(message: "") | ||
| 266 | + // 绑定手机号请求登录 | ||
| 267 | + CNLiveLoginViewModel.thirdPartyLoginBindingTel(mobile: phoneText.text ?? "", verificationCode: veriText.text ?? "", model: self.model!) { result, status in | ||
| 268 | + hiddenLoading() | ||
| 269 | + if status == .success{ | ||
| 270 | + let window = UIApplication.shared.delegate?.window | ||
| 271 | + window??.rootViewController = CNLiveBaseTabBarViewController.init() | ||
| 272 | + } | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + | ||
| 276 | + | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + /// 设置发送验证码按钮 | ||
| 280 | + /// - Parameter sender: 按钮 | ||
| 281 | + private func setupCountdownAction(sender : UIButton) { | ||
| 282 | + var timeOut = self.timeOut | ||
| 283 | + let queue: DispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default) | ||
| 284 | + let _timer: DispatchSource = DispatchSource.makeTimerSource(flags: [], queue: queue) as! DispatchSource | ||
| 285 | + _timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1)) | ||
| 286 | + //一秒执行 | ||
| 287 | + _timer.setEventHandler(handler: { () -> Void in | ||
| 288 | + if timeOut <= 0 { | ||
| 289 | + _timer.cancel() | ||
| 290 | + DispatchQueue.main.sync(execute: { () -> Void in | ||
| 291 | + sender.setTitle("获取验证码", for: .normal) | ||
| 292 | + sender.isEnabled = true | ||
| 293 | + }) | ||
| 294 | + } else { | ||
| 295 | + let seconds = timeOut | ||
| 296 | + DispatchQueue.main.sync(execute: {() -> Void in | ||
| 297 | + let str = String(describing: seconds) | ||
| 298 | + sender.setTitle("\(str)s重新获取", for: .normal) | ||
| 299 | + sender.isEnabled = false | ||
| 300 | + }) | ||
| 301 | + timeOut -= 1 | ||
| 302 | + } | ||
| 303 | + }) | ||
| 304 | + _timer.resume() | ||
| 305 | + } | ||
| 306 | + | ||
| 307 | +} |
metaCode/Classes/Main/LoginPage/Model/CNThreeLoginModel.swift
0 → 100644
| 1 | +// | ||
| 2 | +// CNThreeLoginModel.swift | ||
| 3 | +// metaCode | ||
| 4 | +// | ||
| 5 | +// Created by zx on 2024/4/24. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import Foundation | ||
| 9 | +import CNLiveShareToolKit | ||
| 10 | + | ||
| 11 | +class CNThreeLoginModel:BaseModel{ | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + /* | ||
| 15 | + mobile true string 手机号 | ||
| 16 | + countryCode true string 手机号国家码;中国为86 | ||
| 17 | + verificationCode true string 手机验证码 | ||
| 18 | + thirdPartyPlat true int 第三方平台编号 [platform : 1:sina 2:qq 3:weixin 4:renren] | ||
| 19 | + thirdPartyId true string 第三方用户ID | ||
| 20 | + [qq: 建议使用openid, wx: 建议使用unionid, sina: 建议使用idstr]; | ||
| 21 | + 注意:同一用户在登录Sp下不同app时,thirdPartyId必须相同 | ||
| 22 | + | ||
| 23 | + frmId true string 渠道ID | ||
| 24 | + clientPlat true string 客户端平台[i:IOS客户端,a:Android客户端, w: 网页] | ||
| 25 | + nickName true string 用户昵称 | ||
| 26 | + gender false string 性别,m:男、f:女、n:未知 | ||
| 27 | + location false string 用户所在地 | ||
| 28 | + faceUrl false string 头像,约100*100 | ||
| 29 | + */ | ||
| 30 | + var countryName = "" | ||
| 31 | + var countryCode = "" | ||
| 32 | + var thirdPartyPlat = "" | ||
| 33 | + var thirdPartyId = "" | ||
| 34 | + var frmId = "" | ||
| 35 | + var nickName = "" | ||
| 36 | + var gender = "" | ||
| 37 | + var location = "" | ||
| 38 | + var faceUrl = "" | ||
| 39 | + var access_token = "" | ||
| 40 | + var refresh_token = "" | ||
| 41 | + var type:CNLiveSendAuthResp = CNLiveSendAuthRespWX | ||
| 42 | +} |
metaCode/Classes/Main/LoginPage/View/CNLiveLoginPickerView.swift
| @@ -179,6 +179,11 @@ extension CNLiveLoginPickerView { | @@ -179,6 +179,11 @@ extension CNLiveLoginPickerView { | ||
| 179 | 179 | ||
| 180 | @objc func setupDoneButtonAction(){ | 180 | @objc func setupDoneButtonAction(){ |
| 181 | if let resutBlock = resutBlock { | 181 | if let resutBlock = resutBlock { |
| 182 | + if result_string == ""{ | ||
| 183 | + let param = country_array[0] as! NSDictionary | ||
| 184 | + let code = param["code"] as? String | ||
| 185 | + result_string = code ?? "" | ||
| 186 | + } | ||
| 182 | resutBlock(result_string) | 187 | resutBlock(result_string) |
| 183 | } | 188 | } |
| 184 | disMissView() | 189 | disMissView() |
metaCode/Classes/Main/LoginPage/ViewModel/CNLiveLoginViewModel.swift
| @@ -9,6 +9,8 @@ import Foundation | @@ -9,6 +9,8 @@ import Foundation | ||
| 9 | import CNLiveRequestBastKit | 9 | import CNLiveRequestBastKit |
| 10 | import HandyJSON | 10 | import HandyJSON |
| 11 | import RangersAPM | 11 | import RangersAPM |
| 12 | +import CNLiveShareToolKit | ||
| 13 | +import CNLiveBusinessTools | ||
| 12 | 14 | ||
| 13 | //验证码发送成功回调 | 15 | //验证码发送成功回调 |
| 14 | typealias resultCodeBlock = () -> Void | 16 | typealias resultCodeBlock = () -> Void |
| @@ -137,4 +139,133 @@ class CNLiveLoginViewModel : NSObject { | @@ -137,4 +139,133 @@ class CNLiveLoginViewModel : NSObject { | ||
| 137 | } | 139 | } |
| 138 | } | 140 | } |
| 139 | } | 141 | } |
| 142 | + | ||
| 143 | + /** | ||
| 144 | + * @abstract 三方登录 | ||
| 145 | + * | ||
| 146 | + * @param type 三方类型 | ||
| 147 | + * @param model 模型 | ||
| 148 | + * @param block 回调 | ||
| 149 | + */ | ||
| 150 | + static func thirdPartyLoginWithType(type: CNLiveSendAuthResp, model: CNThreeLoginModel, resultBlock: @escaping downSlideResultBlock) { | ||
| 151 | + showLoading(message: "") | ||
| 152 | + | ||
| 153 | + let param = ["thirdPartyPlat":model.thirdPartyPlat,"thirdPartyId":model.thirdPartyId,"frmId":model.frmId,"clientPlat":"i"] | ||
| 154 | + let custom_param = NSMutableDictionary() | ||
| 155 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | ||
| 156 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | ||
| 157 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 158 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 159 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 160 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPLoginHost+"/open/api2/user/loginIn3rdForMetaCode", param: param, cacheType: .networkOnly) { task, result, error in | ||
| 161 | + hiddenLoading() | ||
| 162 | + if (error == nil) { | ||
| 163 | + let resp = result as! NSDictionary | ||
| 164 | + let errorCode = resp["errorCode"] | ||
| 165 | + if (errorCode as! String == "0") { | ||
| 166 | + if resp.allKeys.contains(where: { item in | ||
| 167 | + return item as! String == "data" | ||
| 168 | + }) { | ||
| 169 | + let userInfoModel = dictionaryToModel(resp as! [String : Any], UserInfoModel.self,"data") | ||
| 170 | + UserInfoManager.cacheUserInfo(userInfo: userInfoModel as! UserInfoModel) | ||
| 171 | + UserDefaults.standard.set(true,forKey: "is_login") | ||
| 172 | + RangersAPM.setUserID(UserInfoManager.shared.userInfo.uid) | ||
| 173 | + resultBlock(userInfoModel, .success) | ||
| 174 | + } | ||
| 175 | + } else { | ||
| 176 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 177 | + if errorCode as? String == "42013"{ | ||
| 178 | + resultBlock(errorCode ?? "", .failed) | ||
| 179 | + }else{ | ||
| 180 | + resultBlock(NSNull(), .failed) | ||
| 181 | + } | ||
| 182 | + } | ||
| 183 | + } else { | ||
| 184 | + showMessage(message: "登录失败") | ||
| 185 | + resultBlock(NSNull(), .failed) | ||
| 186 | + } | ||
| 187 | + } | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + /** | ||
| 191 | + * @abstract 绑定手机号请求登录 | ||
| 192 | + * | ||
| 193 | + * @param block 回调 | ||
| 194 | + */ | ||
| 195 | + static func thirdPartyLoginBindingTel(mobile: String,verificationCode:String, model: CNThreeLoginModel, resultBlock: @escaping downSlideResultBlock) { | ||
| 196 | + showLoading(message: "") | ||
| 197 | + | ||
| 198 | + let param = ["mobile":mobile,"countryCode":model.countryCode,"verificationCode":verificationCode,"thirdPartyPlat":model.thirdPartyPlat,"thirdPartyId":model.thirdPartyId,"frmId":model.frmId,"clientPlat":"i","nickName":model.nickName,"gender":model.gender,"location":model.location,"faceUrl":model.faceUrl] | ||
| 199 | + let custom_param = NSMutableDictionary() | ||
| 200 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | ||
| 201 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | ||
| 202 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 203 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 204 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 205 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPLoginHost+"/open/api2/user/loginIn3rdAndMobileForMetaCode", param: param, cacheType: .networkOnly) { task, result, error in | ||
| 206 | + hiddenLoading() | ||
| 207 | + if (error == nil) { | ||
| 208 | + let resp = result as! NSDictionary | ||
| 209 | + let errorCode = resp["errorCode"] | ||
| 210 | + if (errorCode as! String == "0") { | ||
| 211 | + if resp.allKeys.contains(where: { item in | ||
| 212 | + return item as! String == "data" | ||
| 213 | + }) { | ||
| 214 | + let userInfoModel = dictionaryToModel(resp as! [String : Any], UserInfoModel.self,"data") | ||
| 215 | + UserInfoManager.cacheUserInfo(userInfo: userInfoModel as! UserInfoModel) | ||
| 216 | + UserDefaults.standard.set(true,forKey: "is_login") | ||
| 217 | + RangersAPM.setUserID(UserInfoManager.shared.userInfo.uid) | ||
| 218 | + resultBlock(userInfoModel, .success) | ||
| 219 | + } | ||
| 220 | + } else { | ||
| 221 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 222 | + resultBlock(NSNull(), .failed) | ||
| 223 | + } | ||
| 224 | + } else { | ||
| 225 | + showMessage(message: "登录失败") | ||
| 226 | + resultBlock(NSNull(), .failed) | ||
| 227 | + } | ||
| 228 | + } | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + /** | ||
| 232 | + * @abstract 苹果登录 | ||
| 233 | + * | ||
| 234 | + * @param block 回调 | ||
| 235 | + */ | ||
| 236 | + static func appleLogin(model: CNThreeLoginModel, resultBlock: @escaping downSlideResultBlock) { | ||
| 237 | + showLoading(message: "") | ||
| 238 | + | ||
| 239 | + let param = ["thirdPartyPlat":model.thirdPartyPlat,"thirdPartyId":model.thirdPartyId,"frmId":model.frmId,"clientPlat":"i","nickName":model.nickName,"gender":model.gender,"location":model.location,"faceUrl":model.faceUrl,"uuid": CNLiveBusinessTools.getUidForStat(Date()),"accessToken":model.access_token,"appId":CNLiveMCEnvironmentManager.shared.appId] | ||
| 240 | + let custom_param = NSMutableDictionary() | ||
| 241 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | ||
| 242 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | ||
| 243 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 244 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 245 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 246 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPLoginHost+"/open/api2/user/loginIn3rdForMetaCodeApple", param: param, cacheType: .networkOnly) { task, result, error in | ||
| 247 | + hiddenLoading() | ||
| 248 | + if (error == nil) { | ||
| 249 | + let resp = result as! NSDictionary | ||
| 250 | + let errorCode = resp["errorCode"] | ||
| 251 | + if (errorCode as! String == "0") { | ||
| 252 | + if resp.allKeys.contains(where: { item in | ||
| 253 | + return item as! String == "data" | ||
| 254 | + }) { | ||
| 255 | + let userInfoModel = dictionaryToModel(resp as! [String : Any], UserInfoModel.self,"data") | ||
| 256 | + UserInfoManager.cacheUserInfo(userInfo: userInfoModel as! UserInfoModel) | ||
| 257 | + UserDefaults.standard.set(true,forKey: "is_login") | ||
| 258 | + RangersAPM.setUserID(UserInfoManager.shared.userInfo.uid) | ||
| 259 | + resultBlock(userInfoModel, .success) | ||
| 260 | + } | ||
| 261 | + } else { | ||
| 262 | + showMessage(message: resp["errorMessage"] as! String) | ||
| 263 | + resultBlock(NSNull(), .failed) | ||
| 264 | + } | ||
| 265 | + } else { | ||
| 266 | + showMessage(message: "登录失败") | ||
| 267 | + resultBlock(NSNull(), .failed) | ||
| 268 | + } | ||
| 269 | + } | ||
| 270 | + } | ||
| 140 | } | 271 | } |
metaCode/Classes/Other/AppDelegate.swift
| @@ -49,7 +49,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { | @@ -49,7 +49,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { | ||
| 49 | window = UIWindow.init(frame: UIScreen.main.bounds) | 49 | window = UIWindow.init(frame: UIScreen.main.bounds) |
| 50 | window?.backgroundColor = KVCBackgroupColor | 50 | window?.backgroundColor = KVCBackgroupColor |
| 51 | let is_login = UserDefaults.standard.bool(forKey: "is_login") | 51 | let is_login = UserDefaults.standard.bool(forKey: "is_login") |
| 52 | - window?.rootViewController = is_login ? CNLiveBaseTabBarViewController.init() : CNLiveLoginViewController.init() | 52 | + window?.rootViewController = is_login ? CNLiveBaseTabBarViewController.init() : UINavigationController(rootViewController: CNLiveLoginViewController.init()) |
| 53 | window?.makeKeyAndVisible() | 53 | window?.makeKeyAndVisible() |
| 54 | 54 | ||
| 55 | ///设置APM监控SDK | 55 | ///设置APM监控SDK |