全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

iOS发送短信功能的实现代码

发短信的功能对于一个需要渠道扩展的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 中的图片资源的实例详解  # 发送短信  # 短信功能  # 我是  # 多个  # 您可以  # 这段  # 就来  # 发短信  # 编辑器  # 就可以  # 有一个  # 的是  # 是一个  # 您的  # 当年  # 让我们  # 上了  # 出现在  # 一脸  # 没办法 


相关文章: 广平建站公司哪家专业可靠?如何选择?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  网站制作说明怎么写,简述网页设计的流程并说明原因?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何在云主机上快速搭建多站点网站?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站主机服务器选购指南:轻量应用与VPS配置解析  南京网站制作费用,南京远驱官方网站?  网站制作的步骤包括,正确网址格式怎么写?  如何访问已购建站主机并解决登录问题?  网站制作公司排行榜,抖音怎样做个人官方网站  c# 在ASP.NET Core中管理和取消后台任务  如何零成本快速生成个人自助网站?  建站主机是什么?如何选择适合的建站主机?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何零基础在云服务器搭建WordPress站点?  山东网站制作公司有哪些,山东大源集团官网?  相册网站制作软件,图片上的网址怎么复制?  如何选择高效稳定的ISP建站解决方案?  如何选择适配移动端的WAP自助建站平台?  Swift中循环语句中的转移语句 break 和 continue  如何生成腾讯云建站专用兑换码?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  ,如何利用word制作宣传手册?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站主机选购指南:核心配置优化与品牌推荐方案  建站之星伪静态规则如何正确配置?  如何在IIS管理器中快速创建并配置网站?  如何选择PHP开源工具快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  建站VPS配置与SEO优化指南:关键词排名提升策略  如何挑选最适合建站的高性能VPS主机?  建站之星收费标准详解:套餐费用及年费价格表一览  如何在宝塔面板中修改默认建站目录?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何选择靠谱的建站公司加盟品牌?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  TestNG的testng.xml配置文件怎么写  如何快速搭建个人网站并优化SEO?  如何用AWS免费套餐快速搭建高效网站?  如何彻底删除建站之星生成的Banner?  为什么Go需要go mod文件_Go go mod文件作用说明  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  自助网站制作软件,个人如何自助建网站?  Swift中switch语句区间和元组模式匹配  香港服务器部署网站为何提示未备案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。