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

时间:2022-09-19 23:01:01

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

首先,我们来介绍一个最为简单的方法,只需要一行代码就可以搞定,代码如下:

?
1
[[uiapplication sharedapplication] openurl:[nsurl urlwithstring:@"sms://800888"]];

但是,这段代码虽然简单,缺陷却也明显,这段代码属于程序外部调用,也就是跳出app程序本身,利用手机短信功能发送短信,在发送短信页面点击取消按钮时,回到的是手机短信功能页面,而不是app程序。而且,此方法也不能传入默认的短信文本,需要自己手动输入,很可能无法满足需求。所以:

我们需要知道的一点是,苹果官方在发送短信功能方面有一个框架,叫做messageui,此框架可以解决上述一切问题,而且轻松方便容易实现,下面我们就来介绍一下这个框架的使用:

在吃大餐之前,让我们先来几道前菜:

导入框架:messageui.framework

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

2.导入头文件:#import <messageui/messageui.h>

3.添加协议:<mfmessagecomposeviewcontrollerdelegate>

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

添加完协议之后,我们首先想到的就是实现协议方法,可是还不能急,我们还得检测一下设备是否可以发送短信。如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- (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];
}

检测是否可以发送短信,还是需要有一个触发事件的,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (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;
}

嗯,到了实现协议方法的时候了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// -------------------------------------------------------------------------------
// 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发送短信功能的实现代码

至此,我们的发送短信功能就实现了,是不是很简单!但是,当年也是怂过啊,所以,特写此文,以纪念当年怂过的日子。

参考文章

官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.jianshu.com/p/0c661ac22ba3?utm_source=tuicool&utm_medium=referral