在本篇博客开头呢,先说一下写本篇的博客的原因吧。目前在做一个小项目,要用到在本应用程序内发验证码给其他用户,怎么在应用内发送短信的具体细节想不大起来了,于是就百度了一下,发现也有关于这方面的博客,点进去看了看,个人感到有点小失望,写的太不详细,只是简单的代码罗列,而且代码也没注释,大概是因为太简单了吧。今天在做完项目的发短信功能后感觉有必要把这部分内容整理一下,做个纪念也是好的不是吗。废话少说,切入今天的正题。下面的发短信,打电话当然需要真机测试了。

  一、调用系统功能

    在iOS中打开系统本身的打电话和发短信功能还是比较简单的,之前在SSO中也提了一嘴,iOS中可以由一个应用打开另一个应用,只需要一行代码,打电话,发短信,发email,开网页也是一样的 ,只是用的协议不一样。

    1.打电话

      这个还是比较简单的,下面是打电话的代码:%@的内容是手机号self.myApplication是Application的单例。

    2.发短信

      发送短信只是和打电话用的协议不一样改一下协议就可以打电话了

    3、发email

      也是换一下协议即可

    

    4.打开网址

  二、在本应用中打开

    上面的方法都是打开相应的应用程序,然后做相应的事情,那么我们如何在本应用中就可以给我们的用户发送短信呢?下面就让我们来实现这个功能

    1.引入我们要用的framework(其实在应用程序内发送短信和ImagePickerViewController的用法极为的相似,没有什么困难的地方),我们需要引入MessageUI.framework,入下图

    2.在pch文件导入相应头文件

    3.下面是实现发送短信的核心代码

      (1)判断设备是否有发送短信的功能代码如下:

 //发送短信的方法
-(void)sendMessage
{
//用于判断是否有发送短信的功能(模拟器上就没有短信功能)
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); //判断是否有短信功能
if (messageClass != nil) {
//有发送功能要做的事情
}
else
{ UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"iOS版本过低(iOS4.0以后)" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil]; [alterView show];
} }

  

    (2).如果有发送短信功能的话,就得判断iOS版本释放支持"MFMessageComposeViewController". iOS4.0之后支持

     //有短信功能
if ([messageClass canSendText]) {
//发送短信
}
else
{
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"该设备没有发送短信的功能~" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil]; [alterView show];
}

    (3)、经过各种验证后确定设备可以使用MFMessageComposeViewController,我们就开始用了

          //实例化MFMessageComposeViewController,并设置委托
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.delegate = self; //拼接并设置短信内容
NSString *messageContent = [NSString stringWithFormat:@"亲爱的,这个是专属属你我应用的邀请码:%@",self.authCodeLabel.text];
messageController.body = messageContent; //设置发送给谁
messageController.recipients = @[self.phoneNumberTextField.text]; //推到发送试图控制器
[self presentViewController:messageController animated:YES completion:^{ }];

    (4),差点给忘了,实现相应的委托回调协议是少不了的~要实现MFMessageComposeViewControllerDelegate,UINavigationControllerDelegate这两个协议。发送后的回调如下:

 //发送短信后回调的方法
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
NSString *tipContent;
switch (result) {
case MessageComposeResultCancelled:
tipContent = @"发送短信已";
break; case MessageComposeResultFailed:
tipContent = @"发送短信失败";
break; case MessageComposeResultSent:
tipContent = @"发送成功";
break; default:
break;
} UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:tipContent delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[alterView show];
}

  到此就可以发送短信了,本篇博客先就到这儿吧~

iOS开发之调用系统打电话发短信接口以及程序内发短信的更多相关文章

  1. iphone开发中调用系统打电话功能

    iphone开发中调用打电话功能,一般有2种: 1.系统的打电话代码,不返回当前程序: Java代码 [[UIApplication sharedApplication] openURL:[NSURL ...

  2. ios开发之 -- 调用系统定位获取当前经纬度与地理信息

    ios 10定位: 在info.plist中加入: //允许在前台使用时获取GPS的描述 定位权限:Privacy - Location When In Use Usage Description / ...

  3. ios开发之 --调用系统的页面,显示中文

    在开发的过程中,我们会接入很多的sdk,比如相机,相册,是否允许获取位置等,大多数的情况下是默认显示英文, 在plist文件里面添加一个key就可以了,如下图: key:Localization na ...

  4. IOS 开发,调用打电话,发短信,打开网址

    IOS 开发,调用打电话,发短信,打开网址   1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString: ...

  5. iOS开发——高级技术&系统应用于系统服务

    系统应用于系统服务 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenURL:方法指定特定的协议来打开不同的 ...

  6. IOS程序内发短信 MFMessageComposeViewController

    文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...

  7. 转: IOS程序内发短信 MFMessageComposeViewController

    文章转载地址:http://www.headsky.org/?p=63 iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewCon ...

  8. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

    前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...

  9. iOS开发之--调用打电话,发邮件,发短信的系统功能的代码

    1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hz ...

随机推荐

  1. 无法连接虚拟设别 ide1:0.

    安装虚拟机时出现提示:无法连接虚拟设备 ide1:0,因为主机上没有相应的设备.您要在每次开启此虚拟机时都尝试连接此虚拟设备吗? ide1:0一般是虚拟机的光驱,配置选项是“使用物理驱动器”,而宿主机 ...

  2. 【Beta】Daily Scrum Meeting第一次

    1.任务进度 学号 已完成 接下去要做 502 更换网络框架为okHttp 搭建好PHP单元测试环境,写出PHP测试的demo 509 PHP的login返回值:插入数据改为单行插入:系负责人更新单行 ...

  3. jQuery整理

    近几日总是在用js写一些东西,jq用的反而少了,最近在工作中总是会用到不常用的jQuery方法,之前觉得可能用到的情况比较少,便没在意这些方法,结果吃了亏,现在准备重新总结一些jQuery中的一些常用 ...

  4. 常用类-StringBuffer

    总结:凡是要频繁的修改字符串内容的时候,都要使用StringBuffer类来完成,而且在StringBuffer类里提供了一些在String类中没有的,包括:delete(),insert()等等 / ...

  5. ScrollView嵌套RecyclerView时滑动出现的卡顿

    原文连接:http://zhanglu0574.blog.163.com/blog/static/113651073201641853532259/   现象: 一个界面有多个RecyclerView ...

  6. VS2012 2013 显示查找功能 无法具体定位 解决方法

    问题的现象:通过使用 Ctrl + Shift + F 也就是Find In Files功能,使用之后只能显示统计结果,不显示具体行.如下图     regedit 中在注册表中查找:HKEY_CLA ...

  7. 安卓工具箱:color of Style

    <?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...

  8. 启动App的Intent

    类似桌面图标打开App的Intent 程序中需要一种通知,点击后的效果需要像点击桌面图标那样: 程序在前台就什么也不干. 程序在后台,就切换到前台. 程序未启动,就启动程序. 点击通知后,通知本身跳转 ...

  9. ASP.NET Core 十种方式扩展你的 Views

    原文地址:http://asp.net-hacker.rocks/2016/02/18/extending-razor-views.html 作者:Jürgen Gutsch 翻译:杨晓东(Savor ...

  10. 使用密码记录工具keepass来保存密码

    在第一章,曾经给过您建议,密码不要保存在文档中,那样不安全,如果密码很多而且又很复杂,人的大脑是不可能很容易记住的,只能记录下来,如果不能记在文档中那记在哪里呢?下面介绍给您一款记录密码的软件,使用. ...