两种iOS调用系统发短信的方法
需积分: 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及以上版本可用,且需确保设备具有发送短信的能力。
weixin_38677725
- 粉丝: 5
- 资源: 932
最新资源
- 基于java+springboot+vue+mysql的线上医院挂号系统设计与实现.docx
- 基于java+springboot+vue+mysql的箱包存储系统设计与实现.docx
- 基于java+springboot+vue+mysql的校园二手书交易平台设计与实现.docx
- 基于java+springboot+vue+mysql的校园健康驿站管理系统设计与实现.docx
- 02-【名企案例】-08-微软员工手册.doc
- 基于java+springboot+vue+mysql的校园竞赛管理系统设计与实现.docx
- 基于java+springboot+vue+mysql的校园生活服务平台设计与实现.docx
- 02-【名企案例】-15-龙湖地产员工手册.doc
- 基于java+springboot+vue+mysql的校园外卖服务系统设计与实现.docx
- 基于java+springboot+vue+mysql的校园新闻管理系统设计与实现.docx
- 基于java+springboot+vue+mysql的校园食堂订餐系统设计与实现.docx
- 06-【制造企业】-03-员工手册.doc
- 11-【管桩公司】-01-员工手册.doc
- 10-【装饰公司】-01-员工手册.doc
- 18-【餐饮公司】-02-员工手册.doc
- 基于java+springboot+vue+mysql的学生选课系统设计与实现.docx