翻译自:http://www.appcoda.com/ios-programming-send-sms-text-message

Message UI框架不仅可以来发送email,它也为开发者提供了在app中发送短息的界面。使用MFMailComposeViewController类来处理email,使用MFMessageComposeViewController来处理短信。

使用MFMessageComposeViewController与使用邮件很类似。如果你阅读过sending email 和 creating email with attachment,这两篇教程的话,使用这个不过小菜一碟。总之,我们将会通过一个简单地例子,来展示如实使用MFMessageComposeViewController这个类。

iOS 发送通知 apple发消息_UI

Demo App

我们将会使用上一次的demo app,但是会更改一下。app仍然显示一个文件列表。然而,当用户点击table view的某一行的时候,app将会跳转到对应的信息界面,并附带上短信类容。

Getting Started

在这个地方下载项目模板 download the project template ,已经创建好Storyboard,加载好tableview。

Importing the MessageUI Framework


第一步,导入Message UI框架。




iOS 发送通知 apple发消息_message_02



Implementing the Delegate

在“AttachmentTableViewController.m”文件中,加入如下的代码:导入Message UI头文件,并遵守MFMessageComposeViewControllerDelegate协议。


<span style="font-family:System;font-size:14px;">#import <MessageUI/MessageUI.h>

@interface AttachmentTableViewController () <MFMessageComposeViewControl></span>



MFMessageComposeViewControllerDelegate协议定义了一个方法,该方法在短信结束时调用。实现此方法,并处理各种不同的状况。

  1. 用户取消编辑SMS
  2. 用户点击了发送按钮,SMS发送成功
  3. 用户点击了发送按钮,SMS发送失败

在“AttachmentTableViewController.m”文件中,加入如下的代码。在这里,我们显示一个alert信息,当出现第3中状况的时候。对于其它的状况,则dimiss掉信息界面。


<span style="font-family:System;font-size:14px;">- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult) result
{
    switch (result) {
        case MessageComposeResultCancelled:
            break;
            
        case MessageComposeResultFailed:
        {
            UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to send SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [warningAlert show];
            break;
        }
            
        case MessageComposeResultSent:
            break;
            
        default:
            break;
    }
    
    [self dismissViewControllerAnimated:YES completion:nil];
}</span>




Bring Up the Message Composer


当用户点击某一行的时候,来弹出message composer,如下:


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selectedFile = [_files objectAtIndex:indexPath.row];
    [self showSMS:selectedFile];
}


“showSMS:”方法是初始话SMS内容的核心代码,如下:


- (void)showSMS:(NSString*)file {
    
    if(![MFMessageComposeViewController canSendText]) {
        UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [warningAlert show];
        return;
    }

    NSArray *recipents = @[@"12345678", @"72345524"];
    NSString *message = [NSString stringWithFormat:@"Just sent the %@ file to your email. Please check!", file];
    
    MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
    messageController.messageComposeDelegate = self;
    [messageController setRecipients:recipents];
    [messageController setBody:message];
    
    // Present message view controller on screen
    [self presentViewController:messageController animated:YES completion:nil];
}


虽然大部分iOS设备都能发送短信,但作为一个coder,要考虑到异常情况。如果你的app在iPod touch上使用,但iMessage却不支持。在这种情况下,设备明显不能发送短信。所以在代码的开始位置,我们要确定设备是否允许发送短息,使用MFMessageComposeViewController的canSendText方法。




Compile and Run the App


例子简单,运行app在真机上测试,如下:




iOS 发送通知 apple发消息_message_03

What if You Don’t Want In-App SMS

上面的方法可以在你的app中无缝整合短信功能。但是如果你想直接调用短信app来发送短信,可以使用如下的代码:


<span style="font-family:System;font-size:14px;">[[UIApplication sharedApplication] openURL: @"sms:98765432"];
</span>



最终完整的代码:download the full source code here.