iOS BMOB-登錄注冊(cè)手機(jī)驗(yàn)證碼盗迟、郵箱驗(yàn)證

在項(xiàng)目中很多時(shí)候需要登錄注冊(cè)功能坤邪,手機(jī)發(fā)送驗(yàn)證碼,郵箱驗(yàn)證等功能罚缕,也有第三方登錄的功能艇纺,第三方登錄單獨(dú)放在一章來(lái)說(shuō)一下,這里先說(shuō)一下其他的功能邮弹。
我們選用的第三方工具是BMOB黔衡,其實(shí)也有MOB,友盟等可以實(shí)現(xiàn)腌乡,具體看這里盟劫。今天我們使用bmob給我們提供的SDK來(lái)完成這個(gè)功能。

要使用第三方有兩種辦法

  • 下載官方的SDK導(dǎo)入工程与纽,然后導(dǎo)入我們要使用的frameworks框架

  • 使用cocoa pods進(jìn)行導(dǎo)入捞高,如果有同學(xué)不會(huì)使用cocoapods 可以點(diǎn)擊這里,cocoa pods是個(gè)很好用的工具渣锦。

  • 還有很重要一點(diǎn)硝岗,使用第三方的時(shí)候記得一定要在你的info里面添加App Transport Security Settings這樣一個(gè)鍵值,同時(shí)把它設(shè)置成字典袋毙,然后把里面的key換成Allow Arbitrary Loads型檀,然后把他的bool值設(shè)置成YES,不然你是無(wú)法請(qǐng)求獲取到網(wǎng)絡(luò)數(shù)據(jù)的听盖。有很多時(shí)候發(fā)現(xiàn)自己沒(méi)寫錯(cuò)胀溺,但是就是無(wú)法發(fā)送郵箱驗(yàn)證等,就是因?yàn)檫@個(gè)緣故

首先我們看一下官方文檔如何導(dǎo)入SDK皆看,如果有同學(xué)知道如何導(dǎo)入就可以跳過(guò)這一步仓坞。

  • 首先注冊(cè)一個(gè)bmob的賬號(hào),然后創(chuàng)建一個(gè)應(yīng)用腰吟,名字可以起為你的項(xiàng)目名无埃。
  • 然后點(diǎn)擊下載SDK,選擇iOS毛雇,下載完成之后返回你的項(xiàng)目嫉称。把里面的BmobSDK.framework拖到你的工程里面的工具文件夾內(nèi)。
  • 接下來(lái)我們返回bmob看一下官方文檔介紹是如何使用BMOB的SDK的灵疮。
  • 我們選擇iOS快速入門然后我們按照步驟來(lái)進(jìn)行操作织阅。
  • 里面的Application ID是一個(gè)很重要的東西,他可以和你的工程進(jìn)行連接起來(lái)震捣,要記好它荔棉。
  • 接下來(lái)要導(dǎo)入要使用到的系統(tǒng)框架
第一步.jpg
  • 然后我們來(lái)添加要使用的庫(kù)闹炉,在官方文檔里寫的有我們需要引入哪些庫(kù)
導(dǎo)入frameworks.png
  • Xcode更新之后dylib后綴的已經(jīng)更新后綴為tbd的文件格式了,所以不要因?yàn)榘l(fā)愁找錯(cuò)文件润樱,一定要導(dǎo)全才行剩胁,不然會(huì)有很多報(bào)紅。

  • 最后一步祥国,在你應(yīng)用的APPdelegate里面導(dǎo)入#import <BmobSDK/Bmob.h>同時(shí)把你應(yīng)用的APPid拷貝進(jìn)來(lái)

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
     [self.window makeKeyAndVisible];
     UINavigationController *nac = [[UINavigationController alloc]initWithRootViewController:[[RegisterViewController alloc]init]];
    self.window.rootViewController = nac;
    [Bmob registerWithAppKey:@"你的APPid"];
    
    return YES;
    }  
    

http://docs.bmob.cn/ios/developdoc/index.html?menukey=develop_doc&key=develop_ios#index_(7%A1%06

好,我們導(dǎo)入完成之后就可以開(kāi)始使用第三方工具了晾腔,再次點(diǎn)擊
官方文檔好吧舌稀,這個(gè)傲嬌的鏈接后面有半個(gè)括號(hào)不讓我用鏈接,體諒一下灼擂。然后找到用戶管理壁查。

里面有注冊(cè)用戶的方法,它使用的類名是BmobUser剔应,可以點(diǎn)進(jìn)去看一下睡腿,因?yàn)槲臋n可能有的時(shí)候過(guò)時(shí)它使用了新的方法屬性來(lái)代替了這個(gè)屬性,我們這里直接拷貝

BmobUser *bUser = [[BmobUser alloc] init];
[bUser setUserName:@"小明"];
[bUser setPassword:@"123456"];
[bUser setObject:@18 forKey:@"age"];
[bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){
    if (isSuccessful){
    NSLog(@"Sign up successfully");
} else {
    NSLog(@"%@",error);
}
}];

我們運(yùn)行就可以直接創(chuàng)建了一個(gè)小明的用戶峻贮,密碼是123456席怪。當(dāng)然不能固定的創(chuàng)建,然后我們創(chuàng)建3個(gè)TextField纤控,一個(gè)是賬號(hào)挂捻,一個(gè)是密碼,一個(gè)是郵箱船万,來(lái)獲取注冊(cè)人的3個(gè)信息刻撒,要設(shè)置郵箱的時(shí)候記得進(jìn)入你的應(yīng)用里面,打開(kāi)郵箱驗(yàn)證耿导,才能實(shí)現(xiàn)声怔。

好,我們把上面那些代碼給刪掉舱呻,沒(méi)用的東西醋火,然后進(jìn)入你的注冊(cè)頁(yè)面

BmobUser *bUser = [[BmobUser alloc] init];
bUser.username = self.UserNumber.text;
bUser.email = self.Email.text;
[bUser setPassword:self.passworld.text];
[bUser signUpInBackgroundWithBlock:^ (BOOL isSuccessful, NSError *error){
  if (isSuccessful){
  NSLog(@"注冊(cè)成功");
} else {
  NSLog(@"注冊(cè)失敗可能有重復(fù)用戶,錯(cuò)誤信息:%@",error);
}
}];

通過(guò)這三個(gè)方法來(lái)設(shè)置用戶的賬號(hào)名箱吕,密碼名胎撇,郵箱,我的三個(gè)TextField設(shè)置的都是屬性殖氏,我們來(lái)做一個(gè)簡(jiǎn)單的判斷晚树,比如輸入的值不能為空,然后如果注冊(cè)成功雅采,就寫一個(gè)Alert提示框來(lái)提示一下用戶注冊(cè)成功爵憎,如果注冊(cè)失敗慨亲,就提示一下可能有重復(fù)用戶等,如果想要賬號(hào)的一些格式宝鼓,都可以對(duì)對(duì)應(yīng)的TextField的格式進(jìn)行判斷刑棵。注冊(cè)成功,提示請(qǐng)到郵箱進(jìn)行驗(yàn)證愚铡,然后返回登錄蛉签。

然后是登錄頁(yè)面,登錄頁(yè)面其實(shí)只有一句方法沥寥,其他都是一些做的判斷

[BmobUser loginWithUsernameInBackground:self.UserNumber.text password:self.passworld.text block:^(BmobUser *user, NSError *error) {
//登陸后返回的用戶信息
NSLog(@"%@",user.email);
if (user!=nil) {
NSLog(@"登陸成功");
//跳轉(zhuǎn)控制器
}else{
NSLog(@"沒(méi)有該用戶");
}
}

如果遺忘了密碼碍舍,來(lái)進(jìn)行找回密碼操作,這里我們直接在設(shè)置一個(gè)找回密碼的控制器邑雅。

在這里我們?cè)O(shè)置兩個(gè)TextField片橡,分別是用戶名和郵箱名。來(lái)進(jìn)行審核淮野,如果審核通過(guò)捧书,bmob會(huì)給他的郵箱發(fā)一封郵件,讓它重置密碼骤星,如果審核不通過(guò)经瓷,就提示錯(cuò)誤。

    - (void)backPass
  {
//獲得到當(dāng)前用戶
BmobUser *bUser = [BmobUser getCurrentUser];
  //確認(rèn)賬號(hào)名正確
bUser.username = self.UserNumber.text;
if (bUser) {
    //進(jìn)行操作 
//bmob中重置密碼的方法
    [BmobUser requestPasswordResetInBackgroundWithEmail:self.email.text];
    [BmobUser requestPasswordResetInBackgroundWithEmail:bUser.email];
    UIAlertController *alertcontroller = [UIAlertController alertControllerWithTitle:@"提示" message:@"請(qǐng)進(jìn)入郵箱驗(yàn)證" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *alert = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
    }];
    [self presentViewController:alertcontroller animated:YES completion:^{
        
    }];
    [alertcontroller addAction:alert];
}else{
    //對(duì)象為空時(shí)洞难,可打開(kāi)用戶注冊(cè)界面
    
    UIAlertController *alertcontroller = [UIAlertController alertControllerWithTitle:@"提示" message:@"賬號(hào)或郵箱不正確" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *alert = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
    }];
    [self presentViewController:alertcontroller animated:YES completion:^{
        
    }];
    [alertcontroller addAction:alert];
}

  }

然后可以看到bmob已經(jīng)給你發(fā)送了一封郵件

忘記密碼.png

點(diǎn)開(kāi)就可以重設(shè)密碼了嚎。

然后我們看一下BMOB是如何給手機(jī)發(fā)短信,進(jìn)行驗(yàn)證碼驗(yàn)證的廊营。

  • 好歪泳,讓我們?cè)俅未蜷_(kāi)官方文檔,點(diǎn)擊短信服務(wù)露筒。

  • 首先呐伞,他告訴我們,如果你要使用短信服務(wù)的時(shí)候慎式,請(qǐng)點(diǎn)擊你的應(yīng)用伶氢,然后在短信里面設(shè)置一個(gè)短信的格式

短信.png
  • 設(shè)置好模板,我們返回繼續(xù)看文檔

  • 里面有一個(gè)可以直接給用戶發(fā)短信的方法瘪吏,驗(yàn)證碼格式就是你在云端寫的一個(gè)模板癣防,要傳的參數(shù),就是你具體要發(fā)送給哪個(gè)手機(jī)用戶的字符串掌眠。好蕾盯,我們就先試試能不能發(fā)短信。

      UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(100, 200, 200, 45)];
     field.tag = 100;
     field.placeholder = @"請(qǐng)輸入手機(jī)號(hào)";
    field.borderStyle = UITextBorderStyleRoundedRect;
    field.clearButtonMode = YES;
    [self.view addSubview:field];
    UITextField *smsField = [[UITextField alloc]initWithFrame:CGRectMake(100, 350, 200, 45)];
    smsField.placeholder = @"請(qǐng)輸入驗(yàn)證碼";
    smsField.tag = 101;
    smsField.borderStyle =UITextBorderStyleRoundedRect;
    smsField.clearButtonMode = YES;
    smsField.hidden = YES;
    smsField.alpha = 0;
    [self.view addSubview:smsField];
    

在這里我們最好把這個(gè)發(fā)送方法放在一個(gè)按鈕的觸發(fā)方法里蓝丙,不然他沒(méi)辦法在輸入完成之后獲得這個(gè)電話號(hào)碼

我送你們個(gè)按鈕吧级遭。望拖。

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor = [UIColor colorWithRed:0.522 green:1.000 blue:0.846 alpha:1.000];
button.highlighted = YES;
[button setTitle:@"發(fā)送驗(yàn)證碼" forState:UIControlStateNormal];
button.frame = CGRectMake(100, 280, 100, 45);
[self.view addSubview:button];
[button addTarget:self action:@selector(request:) forControlEvents:UIControlEventTouchUpInside];

好,我們把發(fā)送短信的方法放進(jìn)去挫鸽。

  - (void)request:(UIButton *)sender
  {
UITextField *field = [self.view viewWithTag:100];
UITextField *smsField = [self.view viewWithTag:101];

//請(qǐng)求驗(yàn)證碼
[BmobSMS requestSMSCodeInBackgroundWithPhoneNumber:field.text andTemplate:@"你在BMOB里面設(shè)置的短信模板的名字" resultBlock:^(int number, NSError *error) {
    if (error) {
        NSLog(@"%@",error);
    } else {
        //獲得smsID
        UIButton *button = [self.view viewWithTag:103];
[UIView animateWithDuration:1 animations:^{
    button.hidden = NO;
    smsField.hidden = NO;
    button.alpha = 1;
    smsField.alpha = 1;
} completion:^(BOOL finished) {
    
}];

    }
}];
}

輸完手機(jī)號(hào)之后點(diǎn)擊確認(rèn)就可以給手機(jī)發(fā)送一條固定的短信说敏,內(nèi)容都是定義好的(不要發(fā)著玩,只有100條丢郊,后面要收費(fèi)的)盔沫。

如果輸入手機(jī)有誤,就提示手機(jī)號(hào)不存在枫匾。

那接下來(lái)我們看手機(jī)驗(yàn)證碼架诞,bmob系統(tǒng)會(huì)在后臺(tái)把你在輸入框里填寫的驗(yàn)證碼和后臺(tái)發(fā)送的驗(yàn)證碼進(jìn)行比較,來(lái)判斷婿牍,所以設(shè)置一個(gè)驗(yàn)證碼的輸入框,在這里來(lái)進(jìn)行比較惩歉。

  UIButton *enable = [UIButton buttonWithType:UIButtonTypeCustom];
  enable.backgroundColor = [UIColor colorWithRed:0.522   green:1.000 blue:0.846 alpha:1.000];
  enable.highlighted = YES;
  enable.hidden = YES;
  enable.alpha = 0;
  [enable setTitle:@"確認(rèn)" forState:UIControlStateNormal];
  enable.frame = CGRectMake(100, 430, 100, 45);
  [self.view addSubview:enable];

  [enable addTarget:self action:@selector(enable:) forControlEvents:UIControlEventTouchUpInside];

  
  - (void)enable:(UIButton *)sender
{
UITextField *field = [self.view viewWithTag:100];
UITextField *smsField = [self.view viewWithTag:101];
//驗(yàn)證

    [BmobSMS verifySMSCodeInBackgroundWithPhoneNumber:field.text andSMSCode:smsField.text resultBlock:^(BOOL isSuccessful, NSError *error) {
    if (isSuccessful) {
        NSLog(@"成功");
        LoginViewController *nac = [[LoginViewController alloc]init];
        [self.navigationController pushViewController:nac animated:YES];
        
    } else {
        NSLog(@"%@",error);
    }
}];

 
}

這樣我們就能做個(gè)簡(jiǎn)單的驗(yàn)證碼判斷了等脂,如果要使用到驗(yàn)證身份,比如我長(zhǎng)時(shí)間沒(méi)有登錄淘寶了撑蚌,或者我在異地登錄的時(shí)候上遥,可以設(shè)置給用戶設(shè)置的綁定的手機(jī)號(hào)發(fā)送一個(gè)驗(yàn)證碼來(lái)進(jìn)行驗(yàn)證登錄,判斷身份争涌,或者驗(yàn)證碼申請(qǐng)注冊(cè)賬號(hào)里面都可以來(lái)做一些判斷粉楚。

然后給大家附上demo,自己隨便寫的亮垫,不要嫌棄丑陋
這里是鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末模软,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饮潦,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旧找,死亡現(xiàn)場(chǎng)離奇詭異苍蔬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)稀并,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門仅颇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碘举,你說(shuō)我怎么就攤上這事忘瓦。” “怎么了引颈?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵政冻,是天一觀的道長(zhǎng)枚抵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)明场,這世上最難降的妖魔是什么汽摹? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮苦锨,結(jié)果婚禮上逼泣,老公的妹妹穿的比我還像新娘。我一直安慰自己舟舒,他們只是感情好拉庶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著秃励,像睡著了一般氏仗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夺鲜,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天皆尔,我揣著相機(jī)與錄音,去河邊找鬼币励。 笑死慷蠕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的食呻。 我是一名探鬼主播流炕,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仅胞!你這毒婦竟也來(lái)了每辟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤干旧,失蹤者是張志新(化名)和其女友劉穎影兽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體莱革,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峻堰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盅视。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捐名。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闹击,靈堂內(nèi)的尸體忽然破棺而出镶蹋,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布贺归,位于F島的核電站淆两,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拂酣。R本人自食惡果不足惜秋冰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婶熬。 院中可真熱鬧剑勾,春花似錦、人聲如沸赵颅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饺谬。三九已至捂刺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間募寨,已是汗流浹背族展。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绪商,地道東北人苛谷。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓辅鲸,卻偏偏與公主長(zhǎng)得像格郁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子独悴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容