iOS中发送短信

在开发过程中,有时会需要调用原生的发送短信功能,用来实现自己应用中的一些业务处理流程,对此,官方开放了两个API可以供开发者调用

OpenURL方式

首先,最简单的方式是调用OpenURL,代码如下:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086&&body=123"]];

iOS10之后苹果官方建议使用下面的方法:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086&&body=123"] options:@{} completionHandler:^(BOOL success) {
    if (success) {
        NSLog(@"调用成功");
    }else{
        NSLog(@"调用失败");
    }
}];

注意:当URL中有中文时,需要进行转码

urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

这种方式是调用原生组件的方式,打电话,发短信,调用原生地图,甚至进入相应app的设置页面也可以使用这种方式,但使用这种方式需要跳出当前app,且无法监听用户操作。

MessageUI

系统还提供了页面调用方式,不用跳出当前app也能使用发送短信的功能,而且可以监听用户操作。

下面是调用步骤:

1.导入MessageUI头文件

#import 

2.调用时先判断当前设备是否支持该调用方式

if ([MFMessageComposeViewController canSendText]) {
    //  判断一下是否支持发送短信,比如模拟器
    MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
    messageVC.recipients = @[@"10086"]; //需要发送的手机号数组
    messageVC.body = @"发送的内容";
    messageVC.messageComposeDelegate = self; //指定代理
    [self presentViewController:messageVC animated:YES completion:nil];
} else {
    NSLog(@"该设备不支持发送短信功能");
}

3.遵循MessageUI的代理方法

进入头文件后可以看到,MessageUI只有一个代理方法

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result ;

按住command,点击

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result ;

按住command,点击MessageComposeResult类,可以看到,代理返回的result是个枚举类型

typedef NS_ENUM(NSInteger, MessageComposeResult) {
    MessageComposeResultCancelled, // 用户取消发送
    MessageComposeResultSent, // 点击了发送按钮,但并不一定发送成功
    MessageComposeResultFailed // 发送失败
} API_AVAILABLE(ios(4.0)) ;
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    switch (result) {
        case MessageComposeResultSent:
            NSLog(@"发送");
            break;
        case MessageComposeResultCancelled:
            NSLog(@"用户取消发送");
            break;
        default:
            NSLog(@"发送失败");
            break;
    }
    [controller dismissViewControllerAnimated:YES completion:nil];
}

你可能感兴趣的:(iOS)