您好,登錄后才能下訂單哦!
發(fā)短信的功能對(duì)于一個(gè)需要渠道擴(kuò)展的APP來說,必不可少。但是,當(dāng)?shù)谝淮慰吹竭@個(gè)需求時(shí),我卻一臉懵逼,因?yàn)橹安]有接觸過,出于對(duì)未知事物的恐懼,被分配做這個(gè)任務(wù)的時(shí)候其實(shí)我是拒絕的,但是,沒辦法誰讓我是小兵一個(gè)呢,只能硬著頭皮強(qiáng)上了。在查閱了一番資料之后,發(fā)現(xiàn)這個(gè)功能做起來其實(shí)非常簡(jiǎn)單,不到十分鐘就可以解決。下面我們就來聊一下如何實(shí)現(xiàn)這個(gè)功能。
首先,我們來介紹一個(gè)最為簡(jiǎn)單的方法,只需要一行代碼就可以搞定,代碼如下:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
但是,這段代碼雖然簡(jiǎn)單,缺陷卻也明顯,這段代碼屬于程序外部調(diào)用,也就是跳出app程序本身,利用手機(jī)短信功能發(fā)送短信,在發(fā)送短信頁面點(diǎn)擊取消按鈕時(shí),回到的是手機(jī)短信功能頁面,而不是app程序。而且,此方法也不能傳入默認(rèn)的短信文本,需要自己手動(dòng)輸入,很可能無法滿足需求。所以:
我們需要知道的一點(diǎn)是,蘋果官方在發(fā)送短信功能方面有一個(gè)框架,叫做MessageUI,此框架可以解決上述一切問題,而且輕松方便容易實(shí)現(xiàn),下面我們就來介紹一下這個(gè)框架的使用:
在吃大餐之前,讓我們先來幾道前菜:
導(dǎo)入框架:MessageUI.framework
2.導(dǎo)入頭文件:#import <MessageUI/MessageUI.h>
3.添加協(xié)議:<MFMessageComposeViewControllerDelegate>
添加完協(xié)議之后,我們首先想到的就是實(shí)現(xiàn)協(xié)議方法,可是還不能急,我們還得檢測(cè)一下設(shè)備是否可以發(fā)送短信。如下:
- (void)showSMSPicker:(id)sender { /** 您必須檢查當(dāng)前設(shè)備是否可以在嘗試創(chuàng)建一個(gè)MFMessageComposeViewController的實(shí)例之前發(fā)送短信 。 如果設(shè)備無法發(fā)送短信, [[MFMessageComposeViewController alloc] init]將返回nil。 您的應(yīng)用程式用一個(gè)空視圖控制器調(diào)用 -presentViewController時(shí)會(huì)導(dǎo)致崩潰。 **/ if ([MFMessageComposeViewController canSendText]) // The device can send email. { [self displaySMSComposerSheet]; } else // The device can not send email. { self.feedbackMsg.hidden = NO; self.feedbackMsg.text = @"Device not configured to send SMS."; } } - (void)displaySMSComposerSheet { MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init]; picker.messageComposeDelegate = self; //您可以指定一個(gè)或多個(gè)預(yù)配置的收件人。 用戶有從消息編輯器視圖中刪除或添加收件人的選項(xiàng)控制器 //您可以指定將出現(xiàn)在消息編輯器視圖控制器中的初始消息文本。 picker.recipients = @[@"Phone number here"];//發(fā)短信的手機(jī)號(hào)碼的數(shù)組,數(shù)組中是一個(gè)即單發(fā),多個(gè)即群發(fā)。 picker.body = @"Hello from California!"; //短信主體內(nèi)容 [self presentViewController:picker animated:YES completion:NULL]; }
檢測(cè)是否可以發(fā)送短信,還是需要有一個(gè)觸發(fā)事件的,代碼如下:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(140, 100, 100, 100)]; button.backgroundColor = [UIColor blackColor]; [button setTitle:@"發(fā)送短信" forState:UIControlStateNormal]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [button addTarget:self action:@selector(showSMSPicker:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; UILabel * feedbackMsg = [[UILabel alloc]initWithFrame:CGRectMake(10, 300, self.view.frame.size.width -20, 30)]; feedbackMsg.textAlignment = NSTextAlignmentCenter; [self.view addSubview:feedbackMsg]; self.feedbackMsg = feedbackMsg; }
嗯,到了實(shí)現(xiàn)協(xié)議方法的時(shí)候了:
// ------------------------------------------------------------------------------- // messageComposeViewController:didFinishWithResult: // Dismisses the message composition interface when users tap Cancel or Send. // Proceeds to update the feedback message field with the result of the // operation. // 當(dāng)用戶點(diǎn)擊取消或發(fā)送時(shí),關(guān)閉消息組合界面。 // 收到更新反饋消息字段的結(jié)果操作。 // ------------------------------------------------------------------------------- - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { self.feedbackMsg.hidden = NO; // Notifies users about errors associated with the interface // 通知用戶與界面相關(guān)的錯(cuò)誤 switch (result) { case MessageComposeResultCancelled: //取消 self.feedbackMsg.text = @"Result: SMS sending canceled"; break; case MessageComposeResultSent: //發(fā)送 self.feedbackMsg.text = @"Result: SMS sent"; break; case MessageComposeResultFailed: //失敗 self.feedbackMsg.text = @"Result: SMS sending failed"; break; default: //默認(rèn) self.feedbackMsg.text = @"Result: SMS not sent"; break; } [self dismissViewControllerAnimated:YES completion:NULL]; }
Demo運(yùn)行結(jié)果如下:
至此,我們的發(fā)送短信功能就實(shí)現(xiàn)了,是不是很簡(jiǎn)單!但是,當(dāng)年也是慫過啊,所以,特寫此文,以紀(jì)念當(dāng)年慫過的日子。
參考文章
官方文檔
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。