BogoJHLogin.m 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657
  1. //
  2. // BogoJHLogin.m
  3. // BuguLive
  4. //
  5. // Created by 宋晨光 on 2021/9/24.
  6. // Copyright © 2021 xfg. All rights reserved.
  7. //
  8. #import "BogoJHLogin.h"
  9. #import "BogoThirdLoginViewController.h"
  10. #import "XYCountryCodeViewController.h"
  11. #import "AppleIDManager.h"
  12. //#import <FBSDKCoreKit/FBSDKCoreKit.h>
  13. //#import <FBSDKLoginKit/FBSDKLoginKit.h>
  14. #import "BGFirebaseSMS.h"
  15. #import "BogoLoginViewController.h"
  16. #import <QCloudCore/QCloudFCUUID.h>
  17. @import FirebaseCore;
  18. @import GoogleSignIn;
  19. @import FirebaseAuth;
  20. @interface BogoJHLogin ()<UITextFieldDelegate,UITextViewDelegate>{
  21. AppleIDManager *manager;
  22. }
  23. @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
  24. @property (weak, nonatomic) IBOutlet UITextField *phoneT;
  25. @property (weak, nonatomic) IBOutlet UITextField *passwordT;
  26. @property (weak, nonatomic) IBOutlet UITextField *confirmPasswordT;
  27. @property (weak, nonatomic) IBOutlet QMUIButton *codeBtn;
  28. @property (weak, nonatomic) IBOutlet QMUIButton *areaBtn;
  29. @property (weak, nonatomic) IBOutlet UIButton *confirmBtn;
  30. @property (weak, nonatomic) IBOutlet UITextView *agreeT;
  31. @property(nonatomic, assign) BOOL isSelect;
  32. @property (weak, nonatomic) IBOutlet UIButton *selectBtn;
  33. @property (weak, nonatomic) IBOutlet UIButton *passwordLoginBtn;
  34. @property (weak, nonatomic) IBOutlet UILabel *phoneTitleL;
  35. @property (weak, nonatomic) IBOutlet UILabel *titleL;
  36. @property (weak, nonatomic) IBOutlet UILabel *subTitleL;
  37. @property (weak, nonatomic) IBOutlet UIButton *forgetBtn;
  38. @property (weak, nonatomic) IBOutlet UIView *passwordView;
  39. @property (weak, nonatomic) IBOutlet UIView *confirmPasswordView;
  40. @property (weak, nonatomic) IBOutlet UIView *navView;
  41. @property (weak, nonatomic) IBOutlet UILabel *navTitleLabel;
  42. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;
  43. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *phoneLeftConstraint;
  44. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *phoneTopConstraint;
  45. @property (weak, nonatomic) IBOutlet UIView *thirdView;
  46. @property (weak, nonatomic) IBOutlet QMUIFillButton *googleBtn;
  47. //只在更换手机号界面显示 BOGO_LOGIN_TYPE_PHONE_CHANGE
  48. @property (weak, nonatomic) IBOutlet UIView *codeView;
  49. @property (weak, nonatomic) IBOutlet QMUIButton *codeAreaBtn;
  50. @property (weak, nonatomic) IBOutlet UITextField *codePhoneT;
  51. @property (weak, nonatomic) IBOutlet QMUIFillButton *wxBtn;
  52. @property (weak, nonatomic) IBOutlet UIButton *qqBtn;
  53. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qqConstraint;
  54. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *wxConstraint;
  55. @property (weak, nonatomic) IBOutlet QMUIFillButton *facebookBtn;
  56. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *facebookConstraint;
  57. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *agreeTWidthConstraint;
  58. @property (weak, nonatomic) IBOutlet UILabel *thirdLoginL;
  59. //@property(nonatomic, strong) FBSDKLoginManager *fbManager;
  60. //fbManager = [[FBSDKLoginManager alloc] init];
  61. @property(nonatomic, assign) int tryCount;
  62. @property (weak, nonatomic) IBOutlet UIImageView *logo;
  63. @property (nonatomic,strong) UILabel *AppleLabel;
  64. @end
  65. @implementation BogoJHLogin{
  66. NSTimer *_timer; //定时器
  67. int _timeCount; //定时器时间
  68. }
  69. - (void)viewDidLoad {
  70. [super viewDidLoad];
  71. // Do any additional setup after loading the view from its nib.
  72. UITapGestureRecognizer *tapView = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickBgView:)];
  73. [self.view addGestureRecognizer:tapView];
  74. self.isSelect = NO;
  75. self.selectBtn.hidden = YES;
  76. // [self.selectBtn setImage:[UIImage imageNamed:@"mg_circle_select_normal"] forState:UIControlStateNormal];
  77. self.thirdLoginL.text = ASLocalizedString(@"第三方登录");
  78. [self.forgetBtn setTitle:ASLocalizedString(@"忘记密码?") forState:UIControlStateNormal];
  79. if (!self.areaModel) {
  80. self.areaModel = [BogoChoiceAreaModel new];
  81. self.areaModel.area_code = @"+86";
  82. }
  83. self.tryCount = 0;
  84. self.phoneT.delegate = self;
  85. [self.phoneT addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  86. self.phoneT.keyboardType = UIKeyboardTypeNumberPad;
  87. self.areaBtn.imagePosition = QMUIButtonImagePositionRight;
  88. self.areaBtn.spacingBetweenImageAndTitle = 3;
  89. self.codeAreaBtn.imagePosition = QMUIButtonImagePositionRight;
  90. self.codeAreaBtn.spacingBetweenImageAndTitle = 3;
  91. [self setAgreeTextView];
  92. self.thirdView.backgroundColor = UIColor.whiteColor;
  93. [self.thirdView.layer setCornerRadius:22.5];
  94. [self.thirdView.layer setMasksToBounds:YES];
  95. [self setPlaceholderTextWithTextfield:self.phoneT];
  96. [self setPlaceholderTextWithTextfield:self.passwordT];
  97. [self setPlaceholderTextWithTextfield:self.confirmPasswordT];
  98. [self setPlaceholderTextWithTextfield:self.codePhoneT];
  99. //四个界面布局修改
  100. [self changeLoginStatusView];
  101. self.topConstraint.constant = kStatusBarHeight;
  102. if (_loginType == BOGO_LOGIN_TYPE_PHONE_CONFIRM || _loginType == BOGO_LOGIN_TYPE_PHONE_CHANGE) {
  103. self.confirmBtn.enabled = NO;
  104. return;
  105. }
  106. if (isIPhone6()) {
  107. self.agreeTWidthConstraint.constant = 275;
  108. }else{
  109. self.agreeTWidthConstraint.constant = 275;
  110. }
  111. self.googleBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;
  112. //设置logo为appicon
  113. // NSString *iconName = [[[NSBundle mainBundle] infoDictionary] valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"][0];
  114. ViewRadius(self.logo, 4);
  115. self.logo.image = [UIImage imageNamed:@"com_preload_head_img"];
  116. }
  117. - (void)setPhoneNum:(NSString *)phoneNum{
  118. _phoneNum = phoneNum;
  119. _timeCount = 60;
  120. [self changeLoginStatusView];
  121. //只有验证码登录界面自动发送
  122. if (self.loginType != BOGO_LOGIN_TYPE_CODE_LOGIN) {
  123. return;
  124. }
  125. [self getConfirmCodeBtn:self.codeBtn];
  126. }
  127. - (void)setTel_code:(NSString *)tel_code{
  128. _tel_code = tel_code;
  129. self.areaModel = [BogoChoiceAreaModel new];
  130. self.areaModel.area_code = tel_code;
  131. }
  132. -(void)textFieldDidChange:(UITextField *)textField{
  133. if (textField.text.length > 11) {
  134. self.phoneT.text = [textField.text substringToIndex:11];
  135. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  136. }
  137. if (self.loginType == BOGO_LOGIN_TYPE_PHONE_CONFIRM){
  138. if (self.phoneT.text.length > 3) {
  139. self.confirmBtn.enabled = YES;
  140. }else{
  141. self.confirmBtn.enabled = NO;
  142. }
  143. }
  144. if (self.loginType == BOGO_LOGIN_TYPE_PHONE_CHANGE){
  145. if (self.phoneT.text.length > 3 && self.codePhoneT.text.length > 10) {
  146. self.confirmBtn.enabled = YES;
  147. }else{
  148. self.confirmBtn.enabled = NO;
  149. }
  150. }
  151. }
  152. -(void)clickBgView:(UITapGestureRecognizer *)sender{
  153. [self.view endEditing:YES];
  154. }
  155. -(void)changeLoginStatusView{
  156. self.codeBtn.hidden = YES;
  157. self.passwordView.hidden = YES;
  158. self.passwordLoginBtn.hidden = self.forgetBtn.hidden = YES;
  159. self.navView.hidden = NO;
  160. self.thirdView.hidden = NO;
  161. self.phoneTitleL.hidden = YES;
  162. self.codePhoneT.hidden = self.codeView.hidden = self.codeAreaBtn.hidden =YES;
  163. self.selectBtn.hidden = self.agreeT.hidden = YES;
  164. // self.qqBtn.hidden = self.wxBtn.hidden = YES;
  165. [self changeThirdView];
  166. if (self.loginType == BOGO_LOGIN_TYPE_CODE) {
  167. self.navView.hidden = YES;
  168. self.phoneT.placeholder = ASLocalizedString(@"请输入手机号");
  169. self.titleL.text = ASLocalizedString(@"手机验证码登录");
  170. self.subTitleL.text = ASLocalizedString(@"未注册的用户验证后将自动创建账户");
  171. self.passwordLoginBtn.hidden = NO;
  172. self.thirdView.hidden = NO;
  173. self.selectBtn.hidden = self.agreeT.hidden = NO;
  174. }else if (self.loginType == BOGO_LOGIN_TYPE_CODE_LOGIN){
  175. self.navTitleLabel.hidden = YES;
  176. self.areaBtn.hidden = YES;
  177. self.phoneLeftConstraint.constant = 15;
  178. self.phoneT.placeholder = ASLocalizedString(@"请输入验证码");
  179. [self.confirmBtn setTitle:ASLocalizedString(@"登录") forState:UIControlStateNormal];
  180. self.titleL.text = ASLocalizedString(@"手机验证码登录");
  181. self.subTitleL.text = [NSString stringWithFormat:@"%@%@ %@",ASLocalizedString(@"验证码将发送至"),self.areaModel.area_code,_phoneNum];
  182. self.passwordLoginBtn.hidden = self.codeBtn.hidden = NO;
  183. }else if (self.loginType == BOGO_LOGIN_TYPE_PHONE){
  184. if (self.loginType == BOGO_LOGIN_TYPE_PHONE) {
  185. self.phoneT.text = _phoneNum;
  186. }
  187. self.thirdView.hidden = NO;
  188. self.navView.hidden = YES;
  189. self.passwordView.hidden = NO;
  190. self.phoneT.placeholder = ASLocalizedString(@"请输入手机号");
  191. self.titleL.text = ASLocalizedString(@"账号密码登录");
  192. self.codeBtn.hidden = YES;
  193. self.subTitleL.hidden = YES;
  194. self.forgetBtn.hidden = NO;
  195. self.forgetBtn.hidden = self.passwordLoginBtn.hidden = NO;
  196. [self.passwordLoginBtn setTitle:ASLocalizedString(@"手机验证码登录") forState:UIControlStateNormal];
  197. [self.confirmBtn setTitle:ASLocalizedString(@"登录") forState:UIControlStateNormal];
  198. self.selectBtn.hidden = self.agreeT.hidden = NO;
  199. }else if (self.loginType == BOGO_LOGIN_TYPE_FORGET){
  200. self.navTitleLabel.text = ASLocalizedString(@"忘记密码");
  201. self.phoneT.placeholder = ASLocalizedString(@"请输入手机号");
  202. self.titleL.text = ASLocalizedString(@"请输入忘记密码的账号");
  203. [self.confirmBtn setTitle:ASLocalizedString(@"下一步") forState:UIControlStateNormal];
  204. self.subTitleL.hidden = YES;
  205. }else if (self.loginType == BOGO_LOGIN_TYPE_FORGET_CODE){
  206. self.navTitleLabel.text = ASLocalizedString(@"设置登录密码");
  207. self.confirmPasswordView.hidden = self.passwordView.hidden = NO;
  208. self.phoneTitleL.hidden = NO;
  209. self.phoneTopConstraint.constant = 20;
  210. self.phoneLeftConstraint.constant = 15;
  211. self.phoneT.placeholder = ASLocalizedString(@"请输入验证码");
  212. if (_phoneNum.length < 10) {
  213. return;
  214. }
  215. self.phoneTitleL.text = [NSString stringWithFormat:@"%@%@ %@****%@",ASLocalizedString(@"当前手机号"),self.areaModel.area_code,[_phoneNum substringToIndex:3],[_phoneNum substringFromIndex:_phoneNum.length - 4]];
  216. [self.confirmBtn setTitle:ASLocalizedString(@"确定") forState:UIControlStateNormal];
  217. self.titleL.hidden = self.subTitleL.hidden = self.thirdView.hidden = YES;
  218. self.areaBtn.hidden = YES;
  219. self.codeBtn.hidden = NO;
  220. }else if(_loginType == BOGO_LOGIN_TYPE_PHONE_CONFIRM){
  221. self.navTitleLabel.text = ASLocalizedString(@"手机号验证");
  222. self.phoneTitleL.hidden = NO;
  223. self.phoneTopConstraint.constant = 20;
  224. self.phoneLeftConstraint.constant = 15;
  225. self.phoneT.placeholder = ASLocalizedString(@"请输入验证码");
  226. self.phoneTitleL.text = [NSString stringWithFormat:@"%@%@ %@****%@",ASLocalizedString(@"当前手机号"),self.areaModel.area_code,[_phoneNum substringToIndex:3],[_phoneNum substringFromIndex:_phoneNum.length - 4]];
  227. [self.confirmBtn setTitle:ASLocalizedString(@"下一步") forState:UIControlStateNormal];
  228. self.titleL.hidden = self.subTitleL.hidden = self.thirdView.hidden = YES;
  229. self.areaBtn.hidden = YES;
  230. self.codeBtn.hidden = NO;
  231. }else if(_loginType == BOGO_LOGIN_TYPE_PHONE_CHANGE){
  232. self.navTitleLabel.text = ASLocalizedString(@"更换手机号");
  233. self.phoneTopConstraint.constant = 0;
  234. self.phoneLeftConstraint.constant = 15;
  235. self.phoneT.placeholder = ASLocalizedString(@"请输入验证码");
  236. [self.confirmBtn setTitle:ASLocalizedString(@"确定") forState:UIControlStateNormal];
  237. self.titleL.hidden = self.subTitleL.hidden = self.thirdView.hidden = YES;
  238. self.codeAreaBtn.hidden = NO;
  239. self.codeBtn.hidden = NO;
  240. self.codePhoneT.hidden = NO;
  241. self.codeView.hidden = NO;
  242. self.areaBtn.hidden = YES;
  243. }
  244. }
  245. -(void)changeThirdView{
  246. //第三方
  247. NSMutableArray *thirdArr = [NSMutableArray array];
  248. if ([GlobalVariables sharedInstance].appModel.has_qq_login == 1)//QQ
  249. {
  250. [thirdArr addObject:@"1"];
  251. self.qqBtn.hidden = NO;
  252. }
  253. if ([GlobalVariables sharedInstance].appModel.has_wx_login == 1)//微信
  254. {
  255. [thirdArr addObject:@"2"];
  256. self.wxBtn.hidden = NO;
  257. }
  258. if (@available(iOS 13.0, *) && self.thirdView) {
  259. manager = [AppleIDManager defaultManager];
  260. manager.window = [AppDelegate sharedAppDelegate].window;
  261. [self.thirdView addSubview:manager.loginBtn];
  262. manager.loginBtn.layer.cornerRadius = 15;
  263. manager.loginBtn.clipsToBounds = YES;
  264. // manager.loginBtn.backgroundColor = kgrar
  265. [manager.loginBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  266. make.left.equalTo(self.thirdView).offset(30);
  267. make.height.width.mas_equalTo(@30);
  268. make.centerY.equalTo(self.thirdView);
  269. }];
  270. self.AppleLabel = [[UILabel alloc] init];
  271. self.AppleLabel.text = ASLocalizedString(@"苹果登录");
  272. self.AppleLabel.font = [UIFont systemFontOfSize:16];
  273. self.AppleLabel.textColor = UIColor.blackColor;
  274. [self.thirdView addSubview:self.AppleLabel];
  275. [self.AppleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  276. make.centerX.equalTo(self.thirdView);
  277. make.centerY.equalTo(self.thirdView);
  278. }];
  279. // .frame = button.frame;
  280. [self.thirdView addSubview:manager.loginBtn];
  281. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
  282. [tap addTarget:self action:@selector(appleLogin)];
  283. [self.thirdView addGestureRecognizer:tap];
  284. [thirdArr addObject:@"3"];
  285. self.wxBtn.hidden = NO;
  286. [AppleIDManager defaultManager].successBlock = ^(NSString * _Nonnull authorizationCode, NSString * _Nonnull identityToken, NSString * _Nonnull user) {
  287. // if (self.isSelect == NO) {
  288. // [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  289. // return;
  290. // }
  291. // http://livev2020.bogokj.com/mapi/index.php?ctl=login&act=apple_login&user_id=001872.a22fc8cc2d0a4d0bacaf109007e19351.0650&verify_token=&nickname=
  292. FWWeakify(self)
  293. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  294. [parmDict setObject:@"login" forKey:@"ctl"];
  295. [parmDict setObject:@"apple_login" forKey:@"act"];
  296. [parmDict setObject:user forKey:@"user_id"];
  297. [parmDict setObject:identityToken forKey:@"verify_token"];
  298. [parmDict setObject:@"" forKey:@"nickname"];
  299. [self showMyHud];
  300. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  301. {
  302. FWStrongify(self)
  303. [self hideMyHud];
  304. if ([responseJson toInt:@"status"] == 1)
  305. {
  306. UserModel *model = [UserModel modelWithDictionary:responseJson[@"user_info"]];
  307. model.need_bind_mobile = [responseJson[@"need_bind_mobile"] integerValue];
  308. // model.access_token = resp.accessToken;
  309. // if (model.need_bind_mobile == 0) {
  310. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  311. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  312. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  313. // self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  314. // self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  315. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  316. [[BGIMLoginManager sharedInstance] getUserSig:^{
  317. [[AppDelegate sharedAppDelegate] enterMainUI];
  318. [self hideMyHud];
  319. } failed:^(int errId, NSString *errMsg) {
  320. [self hideMyHud];
  321. }];
  322. }
  323. // }else{
  324. // [FanweMessage alertHUD:[responseJson toString:@"error"]];
  325. // }
  326. } FailureBlock:^(NSError *error) {
  327. // FWStrongify(self)
  328. [self showMyHud];
  329. [FanweMessage alertHUD:error];
  330. }];
  331. };
  332. [AppleIDManager defaultManager].failureBlock = ^(NSString * _Nonnull errorMsg) {
  333. // [[HUDHelper sharedInstance] tipMessage:errorMsg];
  334. [FanweMessage alertHUD:errorMsg];
  335. };
  336. }
  337. if (thirdArr.count == 1) {
  338. self.wxConstraint.constant = 0;
  339. self.qqConstraint.constant = 0;
  340. }
  341. // self.wxBtn.hidden = self.qqBtn.hidden = YES;
  342. self.facebookBtn.hidden = YES;
  343. }
  344. -(void)appleLogin{
  345. if (self.isSelect == NO) {
  346. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  347. return;
  348. }
  349. [manager loginAction];
  350. }
  351. - (void)viewWillAppear:(BOOL)animated {
  352. [super viewWillAppear:animated];
  353. self.navigationController.navigationBar.hidden = YES;
  354. [self changeThirdView];
  355. }
  356. - (IBAction)clickFacebookBtn:(UIButton *)sender {
  357. /*
  358. if (self.isSelect == NO) {
  359. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  360. return;
  361. }
  362. if ([FBSDKAccessToken currentAccessToken]){
  363. [FanweMessage alertHUD:ASLocalizedString(@"User is logged in")];
  364. }
  365. // Objective-C // // 将下列代码添加到文件的头文件中,例如:在 ViewController.m 中 // 在 #import "ViewController.h" 之后 #import <FBSDKCoreKit/FBSDKCoreKit.h> #import <FBSDKLoginKit/FBSDKLoginKit.h> // 将下列代码添加到正文:@implementation ViewController - (void)viewDidLoad { [super viewDidLoad];
  366. // FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; // Optional: Place the button in the center of your view.
  367. // loginButton.center = self.view.center;
  368. //
  369. // [self.view addSubview:loginButton];
  370. [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_Facebook currentViewController:nil completion:^(id result, NSError *error) {
  371. if (error) {
  372. } else {
  373. UMSocialUserInfoResponse *resp = result;
  374. // 授权信息
  375. NSLog(@"Wechat uid: %@", resp.uid);
  376. NSLog(@"Wechat openid: %@", resp.openid);
  377. NSLog(@"Wechat unionid: %@", resp.unionId);
  378. NSLog(@"Wechat accessToken: %@", resp.accessToken);
  379. NSLog(@"Wechat refreshToken: %@", resp.refreshToken);
  380. NSLog(@"Wechat expiration: %@", resp.expiration);
  381. // 用户信息
  382. NSLog(@"Wechat name: %@", resp.name);
  383. NSLog(@"Wechat iconurl: %@", resp.iconurl);
  384. NSLog(@"Wechat gender: %@", resp.unionGender);
  385. // 第三方平台SDK源数据
  386. NSLog(@"Wechat originalResponse: %@", resp.originalResponse);
  387. // [self thirdLoginPlatform:UMSocialPlatformType_Facebook resp:resp];
  388. NSLog(@"Facebook登录成功:%@",resp.openid);
  389. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  390. [parmDict setObject:@"login" forKey:@"ctl"];
  391. [parmDict setObject:resp.openid forKey:@"openid"];
  392. [parmDict setObject:@"fb_login" forKey:@"act"];
  393. [parmDict setObject:resp.accessToken forKey:@"access_token"];
  394. // NSString *loginId = token.userID;
  395. UMSocialUserInfoResponse *userInfo = [UMSocialUserInfoResponse new];
  396. // userInfo.name = result.
  397. FWWeakify(self)
  398. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  399. {
  400. FWStrongify(self)
  401. if ([responseJson toInt:@"status"] == 1)
  402. {
  403. UserModel *model = [UserModel modelWithDictionary:responseJson[@"user_info"]];
  404. model.need_bind_mobile = [responseJson[@"need_bind_mobile"] integerValue];
  405. model.access_token = resp.accessToken;
  406. if (model.need_bind_mobile == 0) {
  407. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  408. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  409. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  410. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  411. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  412. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  413. [[BGIMLoginManager sharedInstance] getUserSig:^{
  414. [[AppDelegate sharedAppDelegate] enterMainUI];
  415. [self hideMyHud];
  416. } failed:^(int errId, NSString *errMsg) {
  417. [self hideMyHud];
  418. }];
  419. }else{
  420. [self hideMyHud];
  421. BogoThirdLoginViewController *vc = [BogoThirdLoginViewController new];
  422. // vc.userInfo = resp;
  423. vc.model = model;
  424. [self.navigationController pushViewController:vc animated:YES];
  425. }
  426. }
  427. else
  428. {
  429. [self hideMyHud];
  430. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  431. }
  432. } FailureBlock:^(NSError *error)
  433. {
  434. [FanweMessage alertHUD:ASLocalizedString(@"获取登录参数失败,请稍后尝试")];
  435. }];
  436. }
  437. }];
  438. */
  439. // [self getWxLoginUserinfo];
  440. #warning Facebook登录,暂时注释
  441. // self.fbManager = [[FBSDKLoginManager alloc] init];
  442. //// [self.fbManager logOut];
  443. // [self.fbManager logInWithPermissions:@[@"public_profile"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult * _Nullable result, NSError * _Nullable error) {
  444. // if (error) {
  445. // NSLog(@"Facebook登陆失败 error:%@",error);
  446. // } else if (result.isCancelled) {
  447. // NSLog(@"Facebook取消登录");
  448. // } else {
  449. // NSLog(@"Facebook登录成功:%@",result.token.userID);
  450. //
  451. // NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  452. // [parmDict setObject:@"login" forKey:@"ctl"];
  453. // [parmDict setObject:result.token.userID forKey:@"openid"];
  454. // [parmDict setObject:@"fb_login" forKey:@"act"];
  455. //
  456. // [parmDict setObject:result.token.tokenString forKey:@"access_token"];
  457. //
  458. //// NSString *loginId = token.userID;
  459. // UMSocialUserInfoResponse *userInfo = [UMSocialUserInfoResponse new];
  460. //// userInfo.name = result.
  461. //
  462. //
  463. //
  464. // FWWeakify(self)
  465. //
  466. // [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  467. // {
  468. // FWStrongify(self)
  469. //
  470. // if ([responseJson toInt:@"status"] == 1)
  471. // {
  472. // UserModel *model = [UserModel modelWithDictionary:responseJson[@"user_info"]];
  473. // model.need_bind_mobile = [responseJson[@"need_bind_mobile"] integerValue];
  474. // model.access_token = result.token.tokenString;
  475. // if (model.need_bind_mobile == 0) {
  476. // [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  477. // [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  478. //
  479. // self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  480. // self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  481. // self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  482. // [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  483. // [[BGIMLoginManager sharedInstance] getUserSig:^{
  484. //
  485. // [[AppDelegate sharedAppDelegate] enterMainUI];
  486. //
  487. // [self hideMyHud];
  488. //
  489. // } failed:^(int errId, NSString *errMsg) {
  490. // [self hideMyHud];
  491. //
  492. // }];
  493. // }else{
  494. // [self hideMyHud];
  495. // BogoThirdLoginViewController *vc = [BogoThirdLoginViewController new];
  496. //// vc.userInfo = resp;
  497. // vc.model = model;
  498. // [self.navigationController pushViewController:vc animated:YES];
  499. // }
  500. // }
  501. // else
  502. // {
  503. // [self hideMyHud];
  504. // [FanweMessage alertHUD:[responseJson toString:@"error"]];
  505. // }
  506. //
  507. // } FailureBlock:^(NSError *error)
  508. // {
  509. //
  510. //
  511. // [FanweMessage alertHUD:ASLocalizedString(@"获取登录参数失败,请稍后尝试")];
  512. // }];
  513. //
  514. // }
  515. // }];
  516. }
  517. - (IBAction)clickCancleBtn:(QMUIButton *)sender {
  518. [self.navigationController popViewControllerAnimated:YES];
  519. }
  520. - (IBAction)clickConfirmBtn:(UIButton *)sender {
  521. if (_loginType == BOGO_LOGIN_TYPE_CODE) {
  522. if (self.isSelect == NO) {
  523. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  524. return;
  525. }
  526. if (self.phoneT.text.length == 0)
  527. {
  528. [FanweMessage alertHUD:ASLocalizedString(@"请输入手机号!")];
  529. return;
  530. }
  531. if (self.phoneT.text.length < 1)
  532. {
  533. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  534. return;
  535. }
  536. BogoJHLogin *vc = [BogoJHLogin new];
  537. vc.loginType = BOGO_LOGIN_TYPE_CODE_LOGIN;
  538. vc.tel_code = self.areaModel.area_code;
  539. vc.phoneNum = self.phoneT.text;
  540. vc.areaModel = self.areaModel;
  541. [self.navigationController pushViewController:vc animated:YES];
  542. }else if (_loginType == BOGO_LOGIN_TYPE_CODE_LOGIN){
  543. [self phoneCodeLogin];
  544. }else if (_loginType == BOGO_LOGIN_TYPE_PHONE){
  545. if (self.isSelect == NO) {
  546. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  547. return;
  548. }
  549. _phoneNum = self.phoneT.text;
  550. [self phonePasswordLogin];
  551. }else if (_loginType == BOGO_LOGIN_TYPE_FORGET){
  552. if (self.phoneT.text.length == 0)
  553. {
  554. [FanweMessage alertHUD:ASLocalizedString(@"请输入手机号!")];
  555. return;
  556. }
  557. if (self.phoneT.text.length < 1)
  558. {
  559. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  560. return;
  561. }
  562. [self forgetCheckMobilPhone];
  563. }else if (_loginType == BOGO_LOGIN_TYPE_FORGET_CODE){
  564. [self forgetPasswordLogin];
  565. }else if(_loginType == BOGO_LOGIN_TYPE_PHONE_CONFIRM){
  566. [self verificationMobilPhone];
  567. }else if(_loginType == BOGO_LOGIN_TYPE_PHONE_CHANGE){
  568. [self changePhoneNum];
  569. }
  570. }
  571. //验证手机号
  572. -(void)verificationMobilPhone{
  573. FWWeakify(self)
  574. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  575. [parmDict setObject:@"login" forKey:@"ctl"];
  576. [parmDict setObject:@"verification_mobile" forKey:@"act"];
  577. [parmDict setObject:_phoneNum forKey:@"mobile"];
  578. [parmDict setObject:self.phoneT.text forKey:@"code"];
  579. [self showMyHud];
  580. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  581. {
  582. FWStrongify(self)
  583. [self hideMyHud];
  584. if ([responseJson toInt:@"status"] == 1)
  585. {
  586. //验证手机号
  587. BogoJHLogin *vc = [BogoJHLogin new];
  588. vc.loginType = BOGO_LOGIN_TYPE_PHONE_CHANGE;
  589. vc.phoneNum = self.phoneT.text;
  590. [self.navigationController pushViewController:vc animated:YES];
  591. }else{
  592. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  593. }
  594. } FailureBlock:^(NSError *error) {
  595. // FWStrongify(self)
  596. [FanweMessage alertHUD:error];
  597. }];
  598. }
  599. - (IBAction)clickGoogleLogin:(id)sender {
  600. if (self.isSelect == NO) {
  601. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  602. return;
  603. }
  604. [self showMyHud];
  605. //20231123 改为原生登录
  606. [GIDSignIn.sharedInstance signInWithPresentingViewController:self
  607. completion:^(GIDSignInResult * _Nullable signInResult,
  608. NSError * _Nullable error) {
  609. if (error) {
  610. [self hideMyHud];
  611. return;
  612. }
  613. if (signInResult == nil) {
  614. [self hideMyHud];
  615. return;
  616. }
  617. [signInResult.user refreshTokensIfNeededWithCompletion:^(GIDGoogleUser * _Nullable user,
  618. NSError * _Nullable error) {
  619. if (error) { [self hideMyHud]; return; }
  620. if (user == nil) { [self hideMyHud]; return; }
  621. [self hideMyHud];
  622. NSString *idToken = user.idToken.tokenString;
  623. FWWeakify(self)
  624. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  625. [parmDict setObject:@"login" forKey:@"ctl"];
  626. [parmDict setObject:@"google_verify_login" forKey:@"act"];
  627. [parmDict setObject:@"google" forKey:@"login_type"];
  628. [parmDict setObject:idToken forKey:@"google_token"];
  629. [parmDict setObject:SafeStr([QCloudFCUUID uuidForDevice]) forKey:@"device_id"];
  630. //
  631. [self showMyHud];
  632. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  633. {
  634. FWStrongify(self)
  635. [self hideMyHud];
  636. if ([responseJson toInt:@"status"] == 1)
  637. {
  638. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  639. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  640. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  641. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  642. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  643. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  644. [[BGIMLoginManager sharedInstance] getUserSig:^{
  645. [[AppDelegate sharedAppDelegate] enterMainUI];
  646. [self hideMyHud];
  647. } failed:^(int errId, NSString *errMsg) {
  648. [self hideMyHud];
  649. }];
  650. }
  651. else
  652. {
  653. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  654. // 需要延迟执行的代码
  655. [self clickGoogleLogin:nil];
  656. });
  657. }
  658. } FailureBlock:^(NSError *error) {
  659. // FWStrongify(self)
  660. [FanweMessage alertHUD:error.description];
  661. }];
  662. NSLog(@"google login");
  663. // ...
  664. // Send ID token to backend (example below).
  665. }];
  666. }];
  667. /*
  668. return;
  669. GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
  670. __weak __auto_type weakSelf = self;
  671. [GIDSignIn.sharedInstance signInWithConfiguration:config presentingViewController:self callback:^(GIDGoogleUser * _Nullable user, NSError * _Nullable error) {
  672. __auto_type strongSelf = weakSelf;
  673. if (strongSelf == nil) { return; }
  674. FIRUser *currentUser = [FIRAuth auth].currentUser;
  675. [currentUser getIDTokenForcingRefresh:YES completion:^(NSString * _Nullable token, NSError * _Nullable error) {
  676. if (error == nil) {
  677. GIDAuthentication *authentication = user.authentication;
  678. // FIRAuthCredential *credential =
  679. // [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
  680. // accessToken:authentication.accessToken];
  681. FWWeakify(self)
  682. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  683. [parmDict setObject:@"login" forKey:@"ctl"];
  684. [parmDict setObject:@"firebase_login" forKey:@"act"];
  685. [parmDict setObject:@"google" forKey:@"login_type"];
  686. [parmDict setObject:token forKey:@"firebase_token"];
  687. //
  688. [self showMyHud];
  689. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  690. {
  691. FWStrongify(self)
  692. [self hideMyHud];
  693. if ([responseJson toInt:@"status"] == 1)
  694. {
  695. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  696. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  697. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  698. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  699. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  700. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  701. [[BGIMLoginManager sharedInstance] getUserSig:^{
  702. [[AppDelegate sharedAppDelegate] enterMainUI];
  703. [self hideMyHud];
  704. } failed:^(int errId, NSString *errMsg) {
  705. [self hideMyHud];
  706. }];
  707. }
  708. else
  709. {
  710. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  711. // 需要延迟执行的代码
  712. [self clickGoogleLogin:nil];
  713. });
  714. }
  715. } FailureBlock:^(NSError *error) {
  716. // FWStrongify(self)
  717. [FanweMessage alertHUD:error.description];
  718. }];
  719. NSLog(@"google login");
  720. // ...
  721. } else {
  722. // ...
  723. }
  724. }];
  725. // [currentUser getIDTokenForcingRefresh:^(NSString * _Nullable token, NSError * _Nullable error) {
  726. //
  727. // }];
  728. }];*/
  729. }
  730. //忘记密码-之前的下一步界面
  731. -(void)forgetCheckMobilPhone{
  732. FWWeakify(self)
  733. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  734. [parmDict setObject:@"login" forKey:@"ctl"];
  735. [parmDict setObject:@"check_mobile" forKey:@"act"];
  736. [parmDict setObject:self.phoneT.text forKey:@"mobile"];
  737. [parmDict setObject:self.areaModel.area_code forKey:@"tel_code"];
  738. [self showMyHud];
  739. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  740. {
  741. FWStrongify(self)
  742. [self hideMyHud];
  743. if ([responseJson toInt:@"status"] == 1)
  744. {
  745. //验证手机号
  746. BogoJHLogin *vc = [BogoJHLogin new];
  747. vc.loginType = BOGO_LOGIN_TYPE_FORGET_CODE;
  748. vc.phoneNum = self.phoneT.text;
  749. vc.tel_code = self.areaModel.area_code;
  750. [self.navigationController pushViewController:vc animated:YES];
  751. }else{
  752. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  753. }
  754. } FailureBlock:^(NSError *error) {
  755. // FWStrongify(self)
  756. [FanweMessage alertHUD:error];
  757. }];
  758. }
  759. - (IBAction)clickAreaPhoneBtn:(QMUIButton *)sender {
  760. // BogoCountryChoiceViewController *vc = [BogoCountryChoiceViewController new];
  761. if (@available(iOS 15.0, *)) {
  762. UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
  763. appearance.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular];
  764. appearance.backgroundColor = kWhiteColor;
  765. self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
  766. }
  767. XYCountryCodeViewController *vc = [[XYCountryCodeViewController alloc] initWithShowType:XYCountryCodeShowTypeNone];
  768. [vc showViewController:self];
  769. __weak __typeof(self)weakSelf = self;
  770. [vc setChooseCodeRespose:^(NSString *code) {
  771. BogoChoiceAreaModel *model = [BogoChoiceAreaModel new];
  772. model.area_code = [NSString stringWithFormat:@"+%@",code];
  773. self.areaModel = model;
  774. [sender setTitle:[NSString stringWithFormat:@"+%@",code] forState:UIControlStateNormal];
  775. // weakSelf.labCountryCode.text = [NSString stringWithFormat:@"+%@",code];
  776. // weakSelf.countryCode = code;
  777. }];
  778. // vc.clickAreaBlock = ^(BogoChoiceAreaModel * _Nonnull model) {
  779. // [sender setTitle:model.area_code forState:UIControlStateNormal];
  780. // self.areaModel = model;
  781. // };
  782. // [self.navigationController pushViewController:vc animated:YES];
  783. }
  784. - (IBAction)clickForgetBtn:(UIButton *)sender {
  785. BogoJHLogin *vc = [BogoJHLogin new];
  786. vc.loginType = BOGO_LOGIN_TYPE_FORGET;
  787. [self.navigationController pushViewController:vc animated:YES];
  788. }
  789. - (IBAction)clickPasswordLoginBtn:(UIButton *)sender {
  790. BogoJHLogin *vc = [BogoJHLogin new];
  791. if (_loginType == BOGO_LOGIN_TYPE_PHONE) {
  792. if (self.returnPhoneNumBlock) {
  793. self.returnPhoneNumBlock(self.phoneT.text);
  794. }
  795. [self.navigationController popViewControllerAnimated:YES];
  796. return;
  797. }else{
  798. vc.loginType = BOGO_LOGIN_TYPE_PHONE;
  799. vc.phoneNum = self.phoneT.text;
  800. vc.returnPhoneNumBlock = ^(NSString * _Nonnull phone) {
  801. self.phoneT.text = phone;
  802. };
  803. }
  804. [self.navigationController pushViewController:vc animated:YES];
  805. }
  806. - (IBAction)clickSelectBtn:(UIButton *)sender {
  807. self.isSelect = !self.isSelect;
  808. if (self.isSelect) {
  809. [self.selectBtn setImage:[UIImage imageNamed:@"bogo_regiset_select"] forState:UIControlStateNormal];
  810. }else{
  811. [self.selectBtn setImage:[UIImage imageNamed:@"bogo_regiset_normal"] forState:UIControlStateNormal];
  812. }
  813. }
  814. - (IBAction)clickWxBtn:(UIButton *)sender {
  815. // if (self.isSelect == NO) {
  816. // [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  817. // return;
  818. // }
  819. BogoLoginViewController *login = [BogoLoginViewController new];
  820. [self.navigationController pushViewController:login animated:NO];
  821. // [self getWxLoginUserinfo];
  822. }
  823. - (IBAction)clickQQBtn:(UIButton *)sender {
  824. if (self.isSelect == NO) {
  825. [FanweMessage alertHUD:ASLocalizedString(@"请先阅读并勾选协议")];
  826. return;
  827. }
  828. [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_QQ currentViewController:nil completion:^(id result, NSError *error) {
  829. if (error) {
  830. } else {
  831. UMSocialUserInfoResponse *resp = result;
  832. [self thirdLoginPlatform:UMSocialPlatformType_QQ resp:resp];
  833. }
  834. }];
  835. }
  836. -(void)getWxLoginUserinfo{
  837. [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:nil completion:^(id result, NSError *error) {
  838. if (error) {
  839. } else {
  840. UMSocialUserInfoResponse *resp = result;
  841. // 授权信息
  842. NSLog(@"Wechat uid: %@", resp.uid);
  843. NSLog(@"Wechat openid: %@", resp.openid);
  844. NSLog(@"Wechat unionid: %@", resp.unionId);
  845. NSLog(@"Wechat accessToken: %@", resp.accessToken);
  846. NSLog(@"Wechat refreshToken: %@", resp.refreshToken);
  847. NSLog(@"Wechat expiration: %@", resp.expiration);
  848. // 用户信息
  849. NSLog(@"Wechat name: %@", resp.name);
  850. NSLog(@"Wechat iconurl: %@", resp.iconurl);
  851. NSLog(@"Wechat gender: %@", resp.unionGender);
  852. // 第三方平台SDK源数据
  853. NSLog(@"Wechat originalResponse: %@", resp.originalResponse);
  854. [self thirdLoginPlatform:UMSocialPlatformType_WechatSession resp:resp];
  855. }
  856. }];
  857. }
  858. -(void)thirdLoginPlatform:(UMSocialPlatformType)platformType resp:(UMSocialUserInfoResponse *)resp{
  859. NSString *loginId = @"";
  860. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  861. [parmDict setObject:@"login" forKey:@"ctl"];
  862. if (platformType == UMSocialPlatformType_QQ)
  863. {
  864. [parmDict setObject:@"qq_login" forKey:@"act"];
  865. [parmDict setObject:resp.openid forKey:@"openid"];
  866. [parmDict setObject:resp.accessToken forKey:@"access_token"];
  867. // self.loginType = @"qq_login";
  868. loginId = resp.openid;
  869. }
  870. else if (platformType == UMSocialPlatformType_WechatSession)
  871. {
  872. [parmDict setObject:@"wx_login" forKey:@"act"];
  873. [parmDict setObject:resp.openid forKey:@"openid"];
  874. [parmDict setObject:resp.accessToken forKey:@"access_token"];
  875. loginId = resp.openid;
  876. }
  877. [self showMyHud];
  878. FWWeakify(self)
  879. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  880. {
  881. FWStrongify(self)
  882. if ([responseJson toInt:@"status"] == 1)
  883. {
  884. UserModel *model = [UserModel modelWithDictionary:responseJson[@"user_info"]];
  885. model.need_bind_mobile = [responseJson[@"need_bind_mobile"] integerValue];
  886. model.access_token = resp.accessToken;
  887. if (model.need_bind_mobile == 0) {
  888. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  889. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  890. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  891. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  892. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  893. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  894. [[BGIMLoginManager sharedInstance] getUserSig:^{
  895. [[AppDelegate sharedAppDelegate] enterMainUI];
  896. [self hideMyHud];
  897. } failed:^(int errId, NSString *errMsg) {
  898. [self hideMyHud];
  899. }];
  900. }else{
  901. [self hideMyHud];
  902. BogoThirdLoginViewController *vc = [BogoThirdLoginViewController new];
  903. vc.userInfo = resp;
  904. vc.model = model;
  905. [self.navigationController pushViewController:vc animated:YES];
  906. }
  907. }
  908. else
  909. {
  910. [self hideMyHud];
  911. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  912. }
  913. } FailureBlock:^(NSError *error)
  914. {
  915. [self hideMyHud];
  916. [FanweMessage alertHUD:ASLocalizedString(@"获取登录参数失败,请稍后尝试")];
  917. }];
  918. }
  919. -(void)firbaseApiRequest:(NSString *)token
  920. {
  921. FWWeakify(self)
  922. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  923. [parmDict setObject:@"login" forKey:@"ctl"];
  924. [parmDict setObject:@"firebase_login" forKey:@"act"];
  925. [parmDict setObject:_phoneNum forKey:@"mobile"];
  926. [parmDict setObject:self.phoneT.text forKey:@"verify_coder"];
  927. [parmDict setObject:self.areaModel.area_code forKey:@"tel_code"];
  928. [parmDict setObject:@"phone" forKey:@"login_type"];
  929. [parmDict setObject:token forKey:@"firebase_token"];
  930. //
  931. [self showMyHud];
  932. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  933. {
  934. FWStrongify(self)
  935. [self hideMyHud];
  936. if ([responseJson toInt:@"status"] == 1)
  937. {
  938. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  939. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  940. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  941. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  942. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  943. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  944. [[BGIMLoginManager sharedInstance] getUserSig:^{
  945. [[AppDelegate sharedAppDelegate] enterMainUI];
  946. [self hideMyHud];
  947. } failed:^(int errId, NSString *errMsg) {
  948. [self hideMyHud];
  949. }];
  950. }
  951. else
  952. {
  953. self.tryCount++;
  954. if(self.tryCount < 20)
  955. {
  956. [self firbaseApiRequest:token];
  957. NSLog(@"自动重试");
  958. }
  959. else
  960. {
  961. NSLog(@"超过20次");
  962. }
  963. }
  964. } FailureBlock:^(NSError *error) {
  965. [self firbaseApiRequest:token];
  966. // FWStrongify(self)
  967. // [FanweMessage alertHUD:error.description];
  968. }];
  969. }
  970. //验证码登录
  971. -(void)phoneCodeLogin{
  972. if (!StrValid(self.phoneT.text)) {
  973. [FanweMessage alertHUD:ASLocalizedString(@"请填写验证码")];
  974. return;
  975. }
  976. if([GlobalVariables sharedInstance].openFirebaseSMS)
  977. {
  978. [[BGFirebaseSMS new] verifyCode:self.phoneT.text block:^(AppBlockModel *blockModel) {
  979. NSString *token = blockModel.retDict[@"token"];
  980. self.tryCount = 0;
  981. [self firbaseApiRequest:token];
  982. }];
  983. return;
  984. }
  985. FWWeakify(self)
  986. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  987. [parmDict setObject:@"login" forKey:@"ctl"];
  988. [parmDict setObject:@"do_login_new" forKey:@"act"];
  989. [parmDict setObject:_phoneNum forKey:@"mobile"];
  990. [parmDict setObject:self.phoneT.text forKey:@"verify_coder"];
  991. [parmDict setObject:self.areaModel.area_code forKey:@"tel_code"];
  992. //
  993. [self showMyHud];
  994. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  995. {
  996. FWStrongify(self)
  997. [self hideMyHud];
  998. if ([responseJson toInt:@"status"] == 1)
  999. {
  1000. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  1001. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  1002. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  1003. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  1004. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  1005. [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  1006. [[BGIMLoginManager sharedInstance] getUserSig:^{
  1007. [[AppDelegate sharedAppDelegate] enterMainUI];
  1008. [self hideMyHud];
  1009. } failed:^(int errId, NSString *errMsg) {
  1010. [self hideMyHud];
  1011. }];
  1012. }
  1013. } FailureBlock:^(NSError *error) {
  1014. // FWStrongify(self)
  1015. [FanweMessage alertHUD:error.description];
  1016. }];
  1017. }
  1018. //账号密码登录
  1019. -(void)phonePasswordLogin{
  1020. if (_phoneNum.length == 0)
  1021. {
  1022. [FanweMessage alertHUD:ASLocalizedString(@"请输入手机号!")];
  1023. return;
  1024. }
  1025. if (_phoneNum.length < 1)
  1026. {
  1027. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  1028. return;
  1029. }
  1030. FWWeakify(self)
  1031. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  1032. [parmDict setObject:@"login" forKey:@"ctl"];
  1033. [parmDict setObject:@"password_login" forKey:@"act"];
  1034. // [parmDict setObject:@"1" forKey:@"wx_binding"];
  1035. [parmDict setObject:self.phoneT.text forKey:@"mobile"];
  1036. [parmDict setObject:self.passwordT.text forKey:@"password"];
  1037. //
  1038. [self showMyHud];
  1039. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  1040. {
  1041. FWStrongify(self)
  1042. [self hideMyHud];
  1043. if ([responseJson toInt:@"status"] == 1)
  1044. {
  1045. [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  1046. [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  1047. self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  1048. self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  1049. self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  1050. NSDictionary *userDic = [responseJson valueForKey:@"user_info"];
  1051. [GlobalVariables sharedInstance].token = [userDic toString:@"token"];
  1052. [[BGIMLoginManager sharedInstance] getUserSig:^{
  1053. [[AppDelegate sharedAppDelegate] enterMainUI];
  1054. [self hideMyHud];
  1055. } failed:^(int errId, NSString *errMsg) {
  1056. [self hideMyHud];
  1057. }];
  1058. }else{
  1059. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  1060. }
  1061. } FailureBlock:^(NSError *error) {
  1062. [FanweMessage alertHUD:error.description];
  1063. }];
  1064. }
  1065. //忘记密码登录
  1066. -(void)forgetPasswordLogin{
  1067. //这里验证码用_phoneT
  1068. if (_phoneT.text.length == 0)
  1069. {
  1070. [FanweMessage alertHUD:ASLocalizedString(@"请输入验证码!")];
  1071. return;
  1072. }
  1073. FWWeakify(self)
  1074. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  1075. [parmDict setObject:@"login" forKey:@"ctl"];
  1076. [parmDict setObject:@"update_password_new" forKey:@"act"];
  1077. // [parmDict setObject:@"1" forKey:@"wx_binding"];
  1078. [parmDict setObject:_phoneNum forKey:@"mobile"];
  1079. [parmDict setObject:self.phoneT.text forKey:@"verify_coder"];
  1080. [parmDict setObject:self.passwordT.text forKey:@"password"];
  1081. [parmDict setObject:self.confirmPasswordT.text forKey:@"confirm_password"];
  1082. [parmDict setObject:self.areaModel.area_code forKey:@"tel_code"];
  1083. [self showMyHud];
  1084. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  1085. {
  1086. FWStrongify(self)
  1087. [self hideMyHud];
  1088. if ([responseJson toInt:@"status"] == 1)
  1089. {
  1090. // [BGIMLoginManager sharedInstance].loginParam.identifier = [responseJson toString:@"user_id"];
  1091. // [BGIMLoginManager sharedInstance].loginParam.isAgree = [responseJson toInt:@"is_agree"];
  1092. //
  1093. // self.BuguLive.appModel.first_login = [responseJson toString:@"first_login"];
  1094. // self.BuguLive.appModel.new_level = [responseJson toInt:@"new_level"];
  1095. // self.BuguLive.appModel.login_send_score = [responseJson toString:@"login_send_score"];
  1096. // [GlobalVariables sharedInstance].token = [responseJson toString:@"token"];
  1097. //
  1098. [self.navigationController popToRootViewControllerAnimated:YES];
  1099. }
  1100. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  1101. } FailureBlock:^(NSError *error) {
  1102. // FWStrongify(self)
  1103. [FanweMessage alertHUD:error.description];
  1104. }];
  1105. }
  1106. //更换新的手机号
  1107. -(void)changePhoneNum{
  1108. if (self.codePhoneT.text.length == 0)
  1109. {
  1110. [FanweMessage alertHUD:ASLocalizedString(@"请输入手机号!")];
  1111. return;
  1112. }
  1113. if (self.codePhoneT.text.length < 1)
  1114. {
  1115. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  1116. return;
  1117. }
  1118. FWWeakify(self)
  1119. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  1120. [parmDict setObject:@"login" forKey:@"ctl"];
  1121. [parmDict setObject:@"exchange_mobile" forKey:@"act"];
  1122. [parmDict setObject:self.codePhoneT.text forKey:@"mobile"];
  1123. [parmDict setObject:self.phoneT.text forKey:@"code"];
  1124. [parmDict setObject:self.areaModel.area_code forKey:@"tel_code"];
  1125. [self showMyHud];
  1126. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  1127. {
  1128. FWStrongify(self)
  1129. [self hideMyHud];
  1130. if ([responseJson toInt:@"status"] == 1)
  1131. {
  1132. [self.navigationController popViewControllerAnimated:YES];
  1133. }
  1134. [FanweMessage alertHUD:[responseJson toString:@"error"]];
  1135. } FailureBlock:^(NSError *error) {
  1136. // FWStrongify(self)
  1137. [FanweMessage alertHUD:error];
  1138. }];
  1139. }
  1140. - (IBAction)getConfirmCodeBtn:(QMUIButton *)codeBtn {
  1141. if (_phoneNum.length == 0)
  1142. {
  1143. [FanweMessage alertHUD:ASLocalizedString(@"请输入手机号!")];
  1144. return;
  1145. }
  1146. if (_phoneNum.length < 1)
  1147. {
  1148. [FanweMessage alertHUD:ASLocalizedString(@"手机号限制11位数!")];
  1149. return;
  1150. }
  1151. codeBtn.enabled = NO;
  1152. _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timego) userInfo:nil repeats:YES];
  1153. [self timego];
  1154. //google sms
  1155. if([GlobalVariables sharedInstance].openFirebaseSMS)
  1156. {
  1157. NSString *phoneSMS = [NSString stringWithFormat:@"+%@%@",self.areaModel.area_code,_phoneNum];
  1158. [[[BGFirebaseSMS alloc] init] sendSMS:phoneSMS block:^(AppBlockModel *blockModel) {
  1159. }];
  1160. return;
  1161. }
  1162. FWWeakify(self)
  1163. NSMutableDictionary *parmDict = [NSMutableDictionary dictionary];
  1164. [parmDict setObject:@"login" forKey:@"ctl"];
  1165. [parmDict setObject:@"send_mobile_verify_international" forKey:@"act"];
  1166. // [parmDict setObject:@"1" forKey:@"wx_binding"];
  1167. [parmDict setObject:_phoneNum forKey:@"mobile"];
  1168. [parmDict setObject:[NSString stringWithFormat:@"%@",self.areaModel.area_code] forKey:@"area_code"];
  1169. [self showMyHud];
  1170. [self.httpsManager POSTWithParameters:parmDict SuccessBlock:^(NSDictionary *responseJson)
  1171. {
  1172. FWStrongify(self)
  1173. [self hideMyHud];
  1174. [GlobalVariables sharedInstance].otp_message_id = [NSString stringWithFormat:@"%@",[responseJson toString:@"otp_message_id"]];
  1175. if ([responseJson toInt:@"status"] != 1)
  1176. {
  1177. codeBtn.enabled = YES;
  1178. [codeBtn setTitle:ASLocalizedString(@"发送验证码") forState:UIControlStateNormal];
  1179. [_timer invalidate];
  1180. _timer = nil;
  1181. }else{
  1182. }
  1183. } FailureBlock:^(NSError *error) {
  1184. FWStrongify(self)
  1185. [self hideMyHud];
  1186. [codeBtn setTitle:ASLocalizedString(@"发送验证码") forState:UIControlStateNormal];
  1187. [FanweMessage alert:ASLocalizedString(@"发送失败")];
  1188. codeBtn.enabled = YES;
  1189. }];
  1190. }
  1191. #pragma mark 获取验证码的倒计时
  1192. - (void)timego
  1193. {
  1194. [self timerDec:_timeCount];
  1195. }
  1196. - (void)timerDec:(NSInteger)time
  1197. {
  1198. if(time > 0)
  1199. {
  1200. [self.codeBtn setTitle:[NSString stringWithFormat:@"%@(%lds)",ASLocalizedString(@"重新获取"),(long)time] forState:UIControlStateNormal];
  1201. // [self.loginView.codeBtn setTitleColor:kAppGrayColor1 forState:UIControlStateDisabled];
  1202. _timeCount --;
  1203. }else if(time == 0)
  1204. {
  1205. self.codeBtn.enabled = YES;
  1206. [self.codeBtn setTitle:[NSString stringWithFormat:ASLocalizedString(@"重新获取验证码")] forState:UIControlStateNormal];
  1207. [_timer invalidate];
  1208. _timeCount = 60;
  1209. }
  1210. }
  1211. -(void)setPlaceholderTextWithTextfield:(UITextField *)textField{
  1212. if (@available(iOS 13.0,*)) {
  1213. // Ivar ivar = class_getInstanceVariable([UITextField class],@"_placeholderLabel");
  1214. UILabel *placeholderLabel = [self getIvar:textField ivarName:@"_placeholderLabel"];
  1215. // object_getIvar(textField, ivar);
  1216. placeholderLabel.textColor = [UIColor colorWithHexString:@"#AAAAAA"];
  1217. placeholderLabel.font = [UIFont boldSystemFontOfSize:14];
  1218. placeholderLabel.alpha = 0.8;
  1219. }else{
  1220. [textField setValue:[UIColor colorWithHexString:@"#AAAAAA"] forKeyPath:@"_placeholderLabel.textColor"];
  1221. [textField setValue:[UIFont systemFontOfSize:14]forKeyPath:@"_placeholderLabel.font"];
  1222. }
  1223. }
  1224. - (id)getIvar:(id)obj ivarName:(NSString *)name {
  1225. unsigned int numIvars; // 成员变量个数
  1226. Ivar *vars = class_copyIvarList([obj class], &numIvars);
  1227. id resultObj;
  1228. for(int i =0; i < numIvars; i++) {
  1229. if ([[NSString stringWithUTF8String:ivar_getName(vars[i])] isEqualToString:name]) {
  1230. ptrdiff_t offset = ivar_getOffset(vars[i]);
  1231. // 核心代码就只有下面这一句,类似的其他类的其他变量,你懂的...
  1232. resultObj = (__bridge id)((void *)(*((long *)((__bridge void *)obj + offset))));
  1233. break;
  1234. }
  1235. }
  1236. free(vars);
  1237. return resultObj;
  1238. }
  1239. //我已阅读并同意《用户服务协议》、《隐私权政策》
  1240. -(void)setAgreeTextView{
  1241. [self.agreeT setText:ASLocalizedString(@"已阅读并同意《用户服务协议》和《隐私政策》")];
  1242. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:ASLocalizedString(self.agreeT.text)];
  1243. //设置行间距以及字体大小、颜色
  1244. NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
  1245. paragraphStyle.lineSpacing = 4;// 字体的行间距
  1246. NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:12.0],
  1247. NSForegroundColorAttributeName:[UIColor colorWithHexString:@"#FFFFFF"],
  1248. NSParagraphStyleAttributeName:paragraphStyle};
  1249. [attributedString setAttributes:attributes range:NSMakeRange(0, attributedString.length)];
  1250. [attributedString addAttribute:NSLinkAttributeName
  1251. value:@"action1://"
  1252. range:[[attributedString string] rangeOfString:ASLocalizedString(@"《用户服务协议》")]];
  1253. [attributedString addAttribute:NSLinkAttributeName
  1254. value:@"action2://"
  1255. range:[[attributedString string] rangeOfString:ASLocalizedString(@"《隐私政策》")]];
  1256. NSDictionary *linkAttributes = @{NSForegroundColorAttributeName:[UIColor colorWithHexString:@"#FFFFFF"]};
  1257. self.agreeT.backgroundColor = [UIColor clearColor];
  1258. self.agreeT.linkTextAttributes = linkAttributes;
  1259. self.agreeT.attributedText = attributedString;
  1260. self.agreeT.scrollEnabled = NO;
  1261. self.agreeT.font = [UIFont systemFontOfSize:12.0];
  1262. self.agreeT.textAlignment = NSTextAlignmentCenter;
  1263. self.agreeT.editable = NO;
  1264. self.agreeT.delegate = self;
  1265. // [self.view addSubview:self.agreeT];
  1266. }
  1267. #pragma mark -
  1268. - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
  1269. {
  1270. BGMainWebViewController *tmpController = [BGMainWebViewController webControlerWithUrlStr:self.BuguLive.appModel.privacy_link isShowIndicator:YES isShowNavBar:YES isShowBackBtn:YES];
  1271. [[AppDelegate sharedAppDelegate] pushViewController:tmpController animated:YES];
  1272. tmpController.navigationController.navigationBar.hidden = NO;
  1273. return YES;
  1274. }
  1275. @end