免费开源的iOS开发学习平台

系统应用调用:2-发送短信功能

在iOS4中,苹果官方提供了MFMessageComposeViewController类,为App应用内提供了发送短信功能。

MFMessageComposeViewController简介

MFMessageComposeViewController是MessageUI框架中提供的用于发送短信的类,它可以为用户快速的创建一个用于短信发送的界面。在MFMessageComposeViewController 类中,定义了MFMessageComposeViewControllerDelegate代理协议,该代理协议中提供了当用户完成短信发送后的回调方法。

  • 设置短信发送对象。由于recipients是一个数组,因此,可以提供短信群发功能。
@property(nonatomic,copy,nullable) NSArray<NSString *> *recipients;
  • 设置短信内容。
@property(nonatomic,copy,nullable) NSString *body;
  • 代理对象。
@property(nonatomic,assign,nullable) id<MFMessageComposeViewControllerDelegate> messageComposeDelegate;
  • 检查运行终端是否支持发送短信
+ (BOOL)canSendText;
  • MFMessageComposeViewControllerDelegate代理协议中定义的用于短信发送完成后调用的代理方法。该代理方法中的result参数会返回短信发送的结果,其取值包括:MessageComposeResultSent(发送成功)、MessageComposeResultFailed(发送失败)、MessageComposeResultCancelled(取消发送)。
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result;

代码实现

在上一节拨打电话案例的基础上,再添加一个发送短信的按钮,并与控制器连线创建点击方法。

由于MFMessageComposeViewController类是MessageUI框架中的类,因此,我们需要在工程中添加MessageUI框架。

在我们需要使用到MessageUI框架的地方,需要引入对应的头文件。

#import <MessageUI/MessageUI.h>

使用MFMessageComposeViewController类创建一个短信发送的界面,并设置短信的收信人以及短信内容。需要注意的是,我们需要在真机中测试,模拟器由于不支持短信发送,因此不能够实现短信发送的功能。

- (IBAction)sendMessage:(id)sender {
    if( [MFMessageComposeViewController canSendText] ){
        MFMessageComposeViewController * messageController = [[MFMessageComposeViewController alloc]init];
        messageController.recipients = [NSArray arrayWithObject:self.textField.text];
        messageController.body = @"来自99iOS的短信!";
        messageController.messageComposeDelegate = self;
        //显示发送信息界面的控制器
        [self presentViewController:messageController animated:YES completion:nil];
    }else{
        NSLog(@"设备不具备短信功能");
    }
}

短信发送完成后,在代理协议中提供的方法中实现返回程序。

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    [controller dismissViewControllerAnimated:YES completion:nil];
    if (result ==  MessageComposeResultSent) {
        NSLog(@"发送成功");
    }
}

示例代码

https://github.com/99ios/17.6.2