发短信的功能对于一个需要渠道扩展的应用来说,必不可少。但是,当第一次看到这个需求时,我却一脸懵逼,因为之前并没有接触过,出于对未知事物的恐惧,被分配做这个任务的时候其实我是拒绝的,但是,没办法谁让我是小兵一个呢,只能硬着头皮强上了。在查阅了一番资料之后,发现这个功能做起来其实非常简单,不到十分钟就可以解决。下面我们就来聊一下如何实现这个功能。
首先,我们来介绍一个最为简单的方法,只需要一行代码就可以搞的定,代码如下:
[[UIApplication sharedApplication] openURL:(NSURL URLWithString: @“短信://800888”]],
但是,这段代码虽然简单,缺陷却也明显,这段代码属于程序外部调用,也就是跳出应用程序本身,利用手机短信功能发送短信,在发送短信页面点击取消按钮时,回到的是手机短信功能页面,而不是应用程序,而且,此方法也不能传入默认的短信文本,需要自己手动输入,很可能无法满足需求,所以:
我们需要知道的一点是,苹果官方在发送短信功能方面有一个框架,叫做MessageUI,此框架可以解决上述一切问题,而且轻松方便容易实现,下面我们就来介绍一下这个框架的使用:
在吃大餐之前,让我们先来几道前菜:
导入框架:MessageUI.framework
2。导入头文件:#进口& lt; MessageUI/MessageUI.h>
3。添加协议:& lt; MFMessageComposeViewControllerDelegate>
- (void) showSMSPicker:发送者(id) {/* * 您必须检查当前设备是否可以在尝试创建一个MFMessageComposeViewController的实例之前发送短信 。如果设备无法发送短信, [[MFMessageComposeViewController alloc] init)将返回零。您的应用程式用一个空视图控制器调用 -presentViewController时会导致崩溃。 * */如果([MFMessageComposeViewController canSendText])//设备可以发送电子邮件。 { (自我displaySMSComposerSheet); } 其他的//设备不能发送电子邮件。 { self.feedbackMsg。隐藏=没有; self.feedbackMsg。文本=@“设备配置为发送SMS。”; } } - (void) displaySMSComposerSheet { MFMessageComposeViewController *选择=[[MFMessageComposeViewController alloc] init); 选择器。messageComposeDelegate=自我;//您可以指定一个或多个预配置的收件人。用户有从消息编辑器视图中删除或添加收件人的选项控制器//您可以指定将出现在消息编辑器视图控制器中的初始消息文本。 选择器。收件人=@[@“电话号码”);//发短信的手机号码的数组,数组中是一个即单发,多个即群发。 选择器。来自加州的身体=@“你好!”;//短信主体内容 【自我presentViewController:选择动画:是的完成:零); } >之前
检测是否可以发送短信,还是需要有一个触发事件的,代码如下:
- (void) viewDidLoad { (超级viewDidLoad);//做任何额外的设置加载视图后,通常从笔尖。 UIButton *按钮=[[UIButton alloc] initWithFrame: CGRectMake (140, 100, 100, 100)]; 按钮。写成backgroundColor=[用户界面颜色blackColor]; (按钮setTitle: @”发送短信“forState: UIControlStateNormal); [按钮setTitleColor:[用户界面颜色whiteColor] forState: UIControlStateNormal); 【按钮addTarget:自我行动:@ selector (showSMSPicker:) forControlEvents: UIControlEventTouchUpInside); (自我。视图addSubview:按钮); UILabel * feedbackMsg=[[UILabel alloc] initWithFrame: CGRectMake(300, -20年self.view.frame.size.width 30)]; feedbackMsg。textAlignment=NSTextAlignmentCenter; (自我。视图addSubview feedbackMsg):; 自我。feedbackMsg=feedbackMsg; } >之前嗯,到了实现协议方法的时候了:
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//messageComposeViewController: didFinishWithResult://驳斥了复合界面,当用户点击取消或发送的消息。//继续更新反馈消息字段的结果//操作。//当用户点击取消或发送时,关闭消息组合界面。//收到更新反馈消息字段的结果操作。//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (void) messageComposeViewController: (MFMessageComposeViewController *)控制器 didFinishWithResult:(MessageComposeResult)的结果 { self.feedbackMsg。隐藏=没有;//通知用户与界面相关的错误//通知用户与界面相关的错误 开关(结果) { 案例MessageComposeResultCancelled://取消 self.feedbackMsg。文本=@“结果:短信发送取消”; 打破; 案例MessageComposeResultSent://发送 self.feedbackMsg。文本=@”结果:短信发送”; 打破; 案例MessageComposeResultFailed://失败 self.feedbackMsg。文本=@“结果:短信发送失败”; 打破; 默认值://默认 self.feedbackMsg。文本=@“结果:短信没有发送”; 打破; } (自我dismissViewControllerAnimated:是的完成:零); }iOS发送短信功能的实现代码