两种iOS调用系统发短信的方法

preview
需积分: 0 0 下载量 37 浏览量 更新于2020-09-01 收藏 36KB PDF 举报
在iOS应用开发中,有时需要调用系统的短信功能来实现快速发送短信的功能。根据不同的需求,iOS提供了两种调用方式:程序外调用系统发短信和程序内调用系统发短信。这两种方法各有特点,下面将详细介绍它们的实现原理及代码示例。 一、程序外调用系统发短信 程序外调用系统发短信是指用户离开应用,进入系统短信应用进行发送。这种方式相对简单,通过`openURL:`方法可以直接唤起短信应用。以下是如何实现的: ```objc NSURL *url = [NSURL URLWithString:@"sms://15888888888"]; [[UIApplication sharedApplication] openURL:url]; ``` 这段代码会启动一个到短信应用的URL,其中`sms://`是协议,`15888888888`是接收短信的电话号码。用户发送完短信后,不会自动返回到你的应用,而是留在系统短信应用中。 二、程序内调用系统发短信 程序内调用系统发短信允许用户在应用内部填写和发送短信,发送完成后还能返回应用。这种方式需要使用`MessageUI`框架。在项目中导入`MessageUI.framework`,并在需要使用的地方引入头文件: ```objc #import <MessageUI/MessageUI.h> ``` 接着,你的类需要遵循`MFMessageComposeViewControllerDelegate`代理协议,并实现相关代理方法: ```objc @interface YourViewController () <MFMessageComposeViewControllerDelegate> @end // 代理方法 - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { [self dismissViewControllerAnimated:YES completion:nil]; switch (result) { case MessageComposeResultSent: // 信息传送成功 break; case MessageComposeResultFailed: // 信息传送失败 break; case MessageComposeResultCancelled: // 信息被用户取消传送 break; default: break; } } ``` 实现发送短信的方法: ```objc - (void)showMessageView:(NSArray *)phones title:(NSString *)title body:(NSString *)body { if ([MFMessageComposeViewController canSendText]) { MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; controller.recipients = phones; // 接收者电话号码数组 controller.navigationBar.tintColor = [UIColor redColor]; // 自定义导航栏颜色 controller.body = body; // 短信内容 controller.messageComposeDelegate = self; // 设置代理 [self presentViewController:controller animated:YES completion:nil]; [[[controller viewControllers] lastObject] navigationItem].title = title; // 修改短信界面标题 } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"该设备不支持短信功能" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alert show]; } } ``` 调用`showMessageView: title: body:`方法来显示并发送短信: ```objc [self showMessageView:@[@"15888888888",@"12399999999"] title:@"test" body:@"这是测试用短信,勿回复!"]; ``` 总结来说,程序外调用适合快速触发发送短信,但用户体验可能不如程序内调用流畅;而程序内调用则能提供更好的用户体验,用户可以在完成操作后返回应用,因此在多数情况下更受欢迎。不过,需要注意的是,`MessageUI`框架仅在iOS 3.2及以上版本可用,且需确保设备具有发送短信的能力。