翻译自: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这个类。
Demo App
我们将会使用上一次的demo app,但是会更改一下。app仍然显示一个文件列表。然而,当用户点击table view的某一行的时候,app将会跳转到对应的信息界面,并附带上短信类容。
Getting Started
在这个地方下载项目模板 download the project template ,已经创建好Storyboard,加载好tableview。
Importing the MessageUI Framework
第一步,导入Message UI框架。
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协议定义了一个方法,该方法在短信结束时调用。实现此方法,并处理各种不同的状况。
- 用户取消编辑SMS
- 用户点击了发送按钮,SMS发送成功
- 用户点击了发送按钮,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在真机上测试,如下:
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.