iOS开发 APP 集成本机号码一键注册功能

项目中使用的是阿里的SDK,具体可以看阿里的文档:iOS 客户端接入
我记录下项目中的代码部分:
项目中使用的是授权页全屏模式,在需要弹授权页的控制器导入头文件:

#import <ATAuthSDK/ATAuthSDK.h>

然后定义一个属性:

///是否可以一键注册
@property (nonatomic, assign) BOOL isCanUseOneKey;

以下为代码部分:

//开始状态置为YES,默认当前环境可以使用一键登录
    self.isCanUseOneKey = YES;
    __weak typeof(self) weakSelf = self;
    //环境检查,异步返回
    [[TXCommonHandler sharedInstance] checkEnvAvailableWithAuthType:PNSAuthTypeLoginToken
                                                           complete:^(NSDictionary * _Nullable resultDic) {
        NSLog(@"环境检查返回:%@", resultDic);
        weakSelf.isCanUseOneKey = [PNSCodeSuccess isEqualToString:[resultDic objectForKey:@"resultCode"]]; 
        if (weakSelf.isCanUseOneKey == NO) {//不能使用一键注册时跳转其他方式注册页面
      //其他注册方式

        } else {  
        //设置授权页UI          
            TXCustomModel *model = [[TXCustomModel alloc] init];
            model.supportedInterfaceOrientations = UIInterfaceOrientationMaskPortrait;
            model.navColor = White_Color;
            NSDictionary *attributes = @{
                NSForegroundColorAttributeName : Black_Color,
                NSFontAttributeName : [UIFont systemFontOfSize:20.0]
            };
            model.navTitle = [[NSAttributedString alloc] initWithString:@"一键注册" attributes:attributes];
            model.navBackImage = [UIImage imageNamed:@"icon_nav_back_light"];
            model.logoImage = [UIImage imageNamed:@"applogo_160"];
            model.loginBtnText = [[NSAttributedString alloc] initWithString:@"本机号码一键注册" attributes:@{NSForegroundColorAttributeName:White_Color,NSFontAttributeName:[UIFont systemFontOfSize:18]}];
            UIImage *canImage = [UIImage imageNamed:@"home_screen_register_button"];
            UIImage *NOimage = [[UIImage alloc] changeImage:canImage tintColor:UIColorFromHex(0xDCDCDC)];
            model.loginBtnBgImgs = @[canImage,NOimage,canImage]; 
            model.changeBtnIsHidden = NO;
            model.changeBtnTitle = [[NSAttributedString alloc] initWithString:@"其他手机号注册" attributes:@{NSForegroundColorAttributeName:LightGray_Color,NSFontAttributeName:[UIFont systemFontOfSize:14]}]; 
            model.autoHideLoginLoading = NO;
            model.sloganIsHidden = YES;
            model.checkBoxWH = 24;
            model.checkBoxImages = @[[UIImage imageNamed:@"Icons_checkoff"],[UIImage imageNamed:@"Icons_checkon"]];
            NSURL *file = [[NSUserDefaults standardUserDefaults] URLForKey:yinsiPath];
            NSURL *file1 = [[NSUserDefaults standardUserDefaults] URLForKey:yonghuPath];
            NSString *string = file.absoluteString;
            NSString *string1 = file1.absoluteString;
            //自己的协议,加载服务器下载下来的
            model.privacyOne = @[@"隐私政策",string];
            model.privacyTwo = @[@"用户协议",string1];
            model.presentDirection = PNSPresentationDirectionRight;
            //调整UI
            model.logoFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
                frame.size.width = 98;
                frame.size.height = 99.5;
                frame.origin.x = (superViewSize.width - 98) * 0.5;
                frame.origin.y = superViewSize.height*1/5 ;
                return frame;
            };
            model.loginBtnFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
                frame.size.width = 240;
                frame.size.height = 48;
                frame.origin.x = (superViewSize.width - 240) * 0.5;
                frame.origin.y = superViewSize.height*1/5  + 99.5 + 10 + 20 +20;
                return frame;
            };
            model.changeBtnFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
                frame.size.width = 240;
                frame.size.height = 48;
                frame.origin.x = (superViewSize.width - 240) * 0.5;
                frame.origin.y = superViewSize.height*1/5  + 99.5 + 10 + 20 +20 + 48;
                return frame;
            };
   
            __weak typeof(self) weakSelf = self;
            [[TXCommonHandler sharedInstance] getLoginTokenWithTimeout:3.0
                                                            controller:self
                                                                 model:model
                                                              complete:^(NSDictionary * _Nonnull resultDic) {
                NSString *code = [resultDic objectForKey:@"resultCode"];
                if ([PNSCodeLoginControllerPresentSuccess isEqualToString:code]) {
                    //   [ProgressHUD showSuccess:@"弹起授权⻚成功"];
                } else if ([PNSCodeLoginControllerClickCancel isEqualToString:code]) {
                    //  [ProgressHUD showSuccess:@"点击了授权⻚的返回"];
                } else if ([PNSCodeLoginControllerClickChangeBtn isEqualToString:code]) {
                    //    [ProgressHUD showSuccess:@"点击切换其他注册⽅式按钮"];
                    dispatch_async(dispatch_get_main_queue(), ^{//注销授权页,建议用此方法,对于移动卡授权页的消失会清空一些数据
                        [[TXCommonHandler sharedInstance] cancelLoginVCAnimated:YES complete:nil];
                    });
               //其他注册方式
     
                } else if ([PNSCodeLoginControllerClickLoginBtn isEqualToString:code]) {
                    if ([[resultDic objectForKey:@"isChecked"] boolValue] == YES) {
                        //[ProgressHUD showSuccess:@"点击了登录按钮,check box选 中,SDK内部接着会去获取登陆Token"];
                    } else {
                        // [ProgressHUD showSuccess:@"点击了登录按钮,check box选 中,SDK内部不会去获取登陆Token"];
                    }
                } else if ([PNSCodeLoginControllerClickCheckBoxBtn isEqualToString:code]) {
                    //  [ProgressHUD showSuccess:@"点击check box"];
                } else if ([PNSCodeLoginControllerClickProtocol isEqualToString:code]) {
                    //  [ProgressHUD showSuccess:@"点击了协议富⽂本"];
                } else if ([PNSCodeSuccess isEqualToString:code]) {
                    //点击按钮获取注册Token成功回调
                    NSString *token = [resultDic objectForKey:@"token"];
                    QYLog(@"一键注册token = %@",token);
                    //下⾯拿Token去自己的服务器换⼿机号

                } else {
                    [[TXCommonHandler sharedInstance] hideLoginLoading];
                    [Util toastMessage:@"请检查是否插入SIM卡并打开蜂窝网络" delay:2.0];
                }
            }];
        };
    }];

到这里一键注册代码部分就完成了。
授权页的UI绝大多数是支持更改的,主要看自己项目需求然后在对照属性去更改。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容