1. 程式人生 > >iOS開發之呼叫系統打電話發簡訊介面以及程式內發簡訊

iOS開發之呼叫系統打電話發簡訊介面以及程式內發簡訊

  在本篇部落格開頭呢,先說一下寫本篇的部落格的原因吧。目前在做一個小專案,要用到在本應用程式內發驗證碼給其他使用者,怎麼在應用內傳送簡訊的具體細節想不大起來了,於是就百度了一下,發現也有關於這方面的部落格,點進去看了看,個人感到有點小失望,寫的太不詳細,只是簡單的程式碼羅列,而且程式碼也沒註釋,大概是因為太簡單了吧。今天在做完專案的發簡訊功能後感覺有必要把這部分內容整理一下,做個紀念也是好的不是嗎。廢話少說,切入今天的正題。下面的發簡訊,打電話當然需要真機測試了。

  一、呼叫系統功能

    在iOS中開啟系統本身的打電話和發簡訊功能還是比較簡單的,之前在SSO中也提了一嘴,iOS中可以由一個應用開啟另一個應用,只需要一行程式碼,打電話,發簡訊,發email,開網頁也是一樣的 ,只是用的協議不一樣。

    1.打電話

      這個還是比較簡單的,下面是打電話的程式碼:%@的內容是手機號self.myApplication是Application的單例。

    2.發簡訊

      傳送簡訊只是和打電話用的協議不一樣改一下協議就可以打電話了

    3、發email

      也是換一下協議即可

    4.開啟網址

  二、在本應用中開啟

    上面的方法都是開啟相應的應用程式,然後做相應的事情,那麼我們如何在本應用中就可以給我們的使用者傳送簡訊呢?下面就讓我們來實現這個功能

    1.引入我們要用的framework(其實在應用程式內傳送簡訊和ImagePickerViewController的用法極為的相似,沒有什麼困難的地方),我們需要引入MessageUI.framework,入下圖

    2.在pch檔案匯入相應標頭檔案

    3.下面是實現傳送簡訊的核心程式碼

      (1)判斷裝置是否有傳送簡訊的功能程式碼如下:

複製程式碼
 1 //傳送簡訊的方法
 2 -(void)sendMessage
 3 {
 4     //用於判斷是否有傳送簡訊的功能(模擬器上就沒有簡訊功能)
 5     Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
 6     
 7     //判斷是否有簡訊功能
 8     if (messageClass != nil) {
9 //有傳送功能要做的事情 10 } 11 else 12 { 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).如果有傳送簡訊功能的話,就得判斷iOS版本釋放支援"MFMessageComposeViewController". iOS4.0之後支援

複製程式碼
 1     //有簡訊功能
 2         if ([messageClass canSendText]) {
 3               //傳送簡訊
 4         }
 5         else
 6         {
 7             UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"該裝置沒有傳送簡訊的功能~" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
 8             
 9             [alterView show];
10         }
11     
複製程式碼

    (3)、經過各種驗證後確定裝置可以使用MFMessageComposeViewController,我們就開始用了

複製程式碼
 1          //例項化MFMessageComposeViewController,並設定委託
 2             MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
 3             messageController.delegate = self;
 4             
 5             
 6             //拼接並設定簡訊內容
 7             NSString *messageContent = [NSString stringWithFormat:@"親愛的,這個是專屬屬你我應用的邀請碼:%@",self.authCodeLabel.text];
 8             messageController.body = messageContent;
 9             
10             //設定傳送給誰
11             messageController.recipients = @[self.phoneNumberTextField.text];
12             
13             //推到傳送試圖控制器
14             [self presentViewController:messageController animated:YES completion:^{
15                 
16             }];
複製程式碼

    (4),差點給忘了,實現相應的委託回撥協議是少不了的~要實現MFMessageComposeViewControllerDelegate,UINavigationControllerDelegate這兩個協議。傳送後的回撥如下:

複製程式碼
 1 //傳送簡訊後回撥的方法
 2 -(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
 3 {
 4     NSString *tipContent;
 5     switch (result) {
 6         case MessageComposeResultCancelled:
 7             tipContent = @"傳送簡訊已";
 8             break;
 9         
10         case MessageComposeResultFailed:
11             tipContent = @"傳送簡訊失敗";
12             break;
13         
14         case MessageComposeResultSent:
15             tipContent = @"傳送成功";
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 }
複製程式碼

  到此就可以傳送簡訊了,本篇部落格先就到這兒吧~