在本篇博客開頭呢,先說一下寫本篇的博客的原因吧。目前在做一個小項目,要用到在本應(yīng)用程序內(nèi)發(fā)驗證碼給其他用戶,怎么在應(yīng)用內(nèi)發(fā)送短信的具體細節(jié)想不大起來了,于是就百度了一下,發(fā)現(xiàn)也有關(guān)于這方面的博客,點進去看了看,個人感到有點小失望,寫的太不詳細,只是簡單的代碼羅列,而且代碼也沒注釋,大概是因為太簡單了吧。今天在做完項目的發(fā)短信功能后感覺有必要把這部分內(nèi)容整理一下,做個紀念也是好的不是嗎。廢話少說,切入今天的正題。下面的發(fā)短信,打電話當(dāng)然需要真機測試了。
一、調(diào)用系統(tǒng)功能
在iOS中打開系統(tǒng)本身的打電話和發(fā)短信功能還是比較簡單的,之前在SSO中也提了一嘴,iOS中可以由一個應(yīng)用打開另一個應(yīng)用,只需要一行代碼,打電話,發(fā)短信,發(fā)email,開網(wǎng)頁也是一樣的 ,只是用的協(xié)議不一樣。
1.打電話
這個還是比較簡單的,下面是打電話的代碼:%@的內(nèi)容是手機號self.myapplication是Application的單例。
2.發(fā)短信
發(fā)送短信只是和打電話用的協(xié)議不一樣改一下協(xié)議就可以打電話了
3、發(fā)email
也是換一下協(xié)議即可
4.打開網(wǎng)址
二、在本應(yīng)用中打開
上面的方法都是打開相應(yīng)的應(yīng)用程序,然后做相應(yīng)的事情,那么我們?nèi)绾卧诒緫?yīng)用中就可以給我們的用戶發(fā)送短信呢?下面就讓我們來實現(xiàn)這個功能
1.引入我們要用的framework(其實在應(yīng)用程序內(nèi)發(fā)送短信和ImagePickerViewController的用法極為的相似,沒有什么困難的地方),我們需要引入MessageUI.framework,入下圖
2.在pch文件導(dǎo)入相應(yīng)頭文件
3.下面是實現(xiàn)發(fā)送短信的核心代碼
(1)判斷設(shè)備是否有發(fā)送短信的功能代碼如下:
1 //發(fā)送短信的方法 2 -(void)sendMessage 3 { 4 //用于判斷是否有發(fā)送短信的功能(模擬器上就沒有短信功能) 5 Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); 6 7 //判斷是否有短信功能 8 if (messageClass != nil) { 9 //有發(fā)送功能要做的事情10 }11 else12 {13 14 UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"iOS版本過低(iOS4.0以后)" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];15 16 [alterView show];17 }18 19 20 }
(2).如果有發(fā)送短信功能的話,就得判斷iOS版本釋放支持"MFMessageComposeViewController". iOS4.0之后支持
1 //有短信功能 2 if ([messageClass canSendText]) { 3 //發(fā)送短信 4 } 5 else 6 { 7 UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"該設(shè)備沒有發(fā)送短信的功能~" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil]; 8 9 [alterView show];10 }11
(3)、經(jīng)過各種驗證后確定設(shè)備可以使用MFMessageComposeViewController,我們就開始用了
1 //實例化MFMessageComposeViewController,并設(shè)置委托 2 MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init]; 3 messageController.delegate = self; 4 5 6 //拼接并設(shè)置短信內(nèi)容 7 NSString *messageContent = [NSString stringWithFormat:@"親愛的,這個是專屬屬你我應(yīng)用的邀請碼:%@",self.authCodeLabel.text]; 8 messageController.body = messageContent; 9 10 //設(shè)置發(fā)送給誰11 messageController.recipients = @[self.phoneNumberTextField.text];12 13 //推到發(fā)送試圖控制器14 [self PResentViewController:messageController animated:YES completion:^{15 16 }];
(4),差點給忘了,實現(xiàn)相應(yīng)的委托回調(diào)協(xié)議是少不了的~要實現(xiàn)MFMessageComposeViewControllerDelegate,UINavigationControllerDelegate這兩個協(xié)議。發(fā)送后的回調(diào)如下:
1 //發(fā)送短信后回調(diào)的方法 2 -(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 3 { 4 NSString *tipContent; 5 switch (result) { 6 case MessageComposeResultCancelled: 7 tipContent = @"發(fā)送短信已"; 8 break; 9 10 case MessageComposeResultFailed:11 tipContent = @"發(fā)送短信失敗";12 break;13 14 case MessageComposeResultSent:15 tipContent = @"發(fā)送成功";16 break;17 18 default:19 break;20 }21 22 UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:tipContent delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];23 [alterView show];24 }
到此就可以發(fā)送短信了,本篇博客先就到這兒吧~
新聞熱點
疑難解答