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代码示例)