iOS发送短信功能的实现代码
发布时间 - 2026-01-11 02:50:39 点击率:次发短信的功能对于一个需要渠道扩展的APP来说,必不可少。但是,当第一次看到这个需求时,我却一脸懵逼,因为之前并没有接触过,出于对未知事物的恐惧,被分配做这个任务的时候其实我是拒绝的,但是,没办法谁让我是小兵一个呢,只能硬着头皮强上了。在查阅了一番资料之后,发现这个功能做起来其实非常简单,不到十分钟就可以解决。下面我们就来聊一下如何实现这个功能。

首先,我们来介绍一个最为简单的方法,只需要一行代码就可以搞定,代码如下:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
但是,这段代码虽然简单,缺陷却也明显,这段代码属于程序外部调用,也就是跳出app程序本身,利用手机短信功能发送短信,在发送短信页面点击取消按钮时,回到的是手机短信功能页面,而不是app程序。而且,此方法也不能传入默认的短信文本,需要自己手动输入,很可能无法满足需求。所以:
我们需要知道的一点是,苹果官方在发送短信功能方面有一个框架,叫做MessageUI,此框架可以解决上述一切问题,而且轻松方便容易实现,下面我们就来介绍一下这个框架的使用:
在吃大餐之前,让我们先来几道前菜:
导入框架:MessageUI.framework
2.导入头文件:#import <MessageUI/MessageUI.h>
3.添加协议:<MFMessageComposeViewControllerDelegate>
添加完协议之后,我们首先想到的就是实现协议方法,可是还不能急,我们还得检测一下设备是否可以发送短信。如下:
- (void)showSMSPicker:(id)sender
{
/**
您必须检查当前设备是否可以在尝试创建一个MFMessageComposeViewController的实例之前发送短信
。 如果设备无法发送短信,
[[MFMessageComposeViewController alloc] init]将返回nil。 您的应用程式用一个空视图控制器调用
-presentViewController时会导致崩溃。
**/
if ([MFMessageComposeViewController canSendText])
// The device can send email.
{
[self displaySMSComposerSheet];
}
else
// The device can not send email.
{
self.feedbackMsg.hidden = NO;
self.feedbackMsg.text = @"Device not configured to send SMS.";
}
}
- (void)displaySMSComposerSheet
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
//您可以指定一个或多个预配置的收件人。 用户有从消息编辑器视图中删除或添加收件人的选项控制器
//您可以指定将出现在消息编辑器视图控制器中的初始消息文本。
picker.recipients = @[@"Phone number here"];//发短信的手机号码的数组,数组中是一个即单发,多个即群发。
picker.body = @"Hello from California!"; //短信主体内容
[self presentViewController:picker animated:YES completion:NULL];
}
检测是否可以发送短信,还是需要有一个触发事件的,代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(140, 100, 100, 100)];
button.backgroundColor = [UIColor blackColor];
[button setTitle:@"发送短信" forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button addTarget:self action:@selector(showSMSPicker:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
UILabel * feedbackMsg = [[UILabel alloc]initWithFrame:CGRectMake(10, 300, self.view.frame.size.width -20, 30)];
feedbackMsg.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:feedbackMsg];
self.feedbackMsg = feedbackMsg;
}
嗯,到了实现协议方法的时候了:
// -------------------------------------------------------------------------------
// messageComposeViewController:didFinishWithResult:
// Dismisses the message composition interface when users tap Cancel or Send.
// Proceeds to update the feedback message field with the result of the
// operation.
// 当用户点击取消或发送时,关闭消息组合界面。
// 收到更新反馈消息字段的结果操作。
// -------------------------------------------------------------------------------
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result
{
self.feedbackMsg.hidden = NO;
// Notifies users about errors associated with the interface
// 通知用户与界面相关的错误
switch (result)
{
case MessageComposeResultCancelled: //取消
self.feedbackMsg.text = @"Result: SMS sending canceled";
break;
case MessageComposeResultSent: //发送
self.feedbackMsg.text = @"Result: SMS sent";
break;
case MessageComposeResultFailed: //失败
self.feedbackMsg.text = @"Result: SMS sending failed";
break;
default: //默认
self.feedbackMsg.text = @"Result: SMS not sent";
break;
}
[self dismissViewControllerAnimated:YES completion:NULL];
}
Demo运行结果如下:
至此,我们的发送短信功能就实现了,是不是很简单!但是,当年也是怂过啊,所以,特写此文,以纪念当年怂过的日子。
参考文章
官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# iOS发送短信
# iOS
# 实现发短信功能
# ios原生和react-native各种交互的示例代码
# iOS中Cell的Section展开和收起的示例代码
# 详解iOS 计步器的几种实现方式
# iOS app 右滑返回操作的两种方法
# iOS将地址解析成经纬度的方法
# IOS中Weex 加载 .xcassets 中的图片资源的实例详解
# 发送短信
# 短信功能
# 我是
# 多个
# 您可以
# 这段
# 就来
# 发短信
# 编辑器
# 就可以
# 有一个
# 的是
# 是一个
# 您的
# 当年
# 让我们
# 上了
# 出现在
# 一脸
# 没办法
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现模型属性的自动加密
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何在Ubuntu系统下快速搭建WordPress个人网站?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
三星、SK海力士获美批准:可向中国出口芯片制造设备
HTML 中如何正确使用模板变量为元素的 name 属性赋值
如何快速选择适合个人网站的云服务器配置?
EditPlus中的正则表达式实战(6)
如何在万网利用已有域名快速建站?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Laravel distinct去重查询_Laravel Eloquent去重方法
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel如何升级到最新版本?(升级指南和步骤)
济南网站建设制作公司,室内设计网站一般都有哪些功能?
C#如何调用原生C++ COM对象详解
网站页面设计需要考虑到这些问题
Python进程池调度策略_任务分发说明【指导】
大学网站设计制作软件有哪些,如何将网站制作成自己app?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
如何快速搭建高效服务器建站系统?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
PythonWeb开发入门教程_Flask快速构建Web应用
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
微信小程序制作网站有哪些,微信小程序需要做网站吗?
文字头像制作网站推荐软件,醒图能自动配文字吗?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Bootstrap整体框架之CSS12栅格系统
Laravel怎么清理缓存_Laravel optimize clear命令详解
BootStrap整体框架之基础布局组件
javascript如何操作浏览器历史记录_怎样实现无刷新导航
黑客如何利用漏洞与弱口令入侵网站服务器?
如何快速完成中国万网建站详细流程?
如何安全更换建站之星模板并保留数据?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何快速配置高效服务器建站软件?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
js实现点击每个li节点,都弹出其文本值及修改
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel如何处理表单验证?(Requests代码示例)

