APP内部调用短信、电话、邮件
在APP开发中,很多时候需要在APP内部实现短信验证、分享,以及切换电话拨打等功能,这也就会调用到系统相对应得功能体系;
在iOS开发中一般会出现两种模式:
1)在APP中实现短信发送 和 电话拨打功能,完成后会停留在短信 和 电话界面
2)在APP中实现短信发送 和 电话拨打,完成后可以跳转到原来的APP界面,进行下一步操作。
一 、发短信
1)直接拨号,拨号完成后会停留在通话记录中
方法:
NSURL *url = [NSURL URLWithString:@"sms://10010"];
[[UIApplication sharedApplication] openURL:url];
优点 : 简单
缺点 : 不能指定短信内容,而且不能跳转回原APP界面
2)使用MFMessageComposeViewController ---------(需导入MessageUI框架 #import <MessageUI/MessageUI.h>)
方法:(需遵循短信代理----------MFMessageComposeViewControllerDelegate)
//邀请手机联系人
//判断设备能否发送短信
if (![MFMessageComposeViewController canSendText]) {
return;
}
// 初始化短信控制器
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc]init];
// 设置委托对象
messageVC.messageComposeDelegate = self;
NSString *text = [NSString stringWithFormat:@"[%@]邀请你注册IBOS · 酷办公加入“%@”,点击加入http://www.ibos.cn/?corp=%@",
getMyInfo().realname, getMyInfo().corpname, getMyInfo().corpcode];
//短信内容
messageVC.body = text;// (注:如果短信中包含后网址,能自动识别,仍可以发送短信,收件人可以点击触发链接,实现跳转)
//设置收件人(可以不设置,短信界面能跳转到系统通讯录,自行选择人选)
controller.recipients = [@"10010", @"10086"];
//显示短信控制器
[self presentViewController:messageVC animated:YES completion:nil];
短信发送完成后 ,调用代理方法关闭短信界面
:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
switch (result) {
case MessageComposeResultCancelled://取消
{
break;
}
case MessageComposeResultSent://发送
{
break;
}
case MessageComposeResultFailed://失败
{
UIAlertView *alertV = [[UIAlertView alloc]initWithTitle:@"提示" message:@"发送短信错误,请重发!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alertV show];
break;
}
default:
break;
}
// 关闭短信界面
[controller dismissViewControllerAnimated:YES completion:nil];
}
二 、打电话
1)直接拨号,停留在通话记录界面
-(void)telPhoneFirst
{
// 直接拨号,拨号完成后会停留在通话记录中
NSURL *url = [NSURL URLWithString:@"tel://10010"];
[[UIApplication sharedApplication] openURL:url];
}
2)拨号完成可以返回
注 :telprompt协议属于苹果的私有协议,一旦程序中使用了此协议,程序无法上架 ; 针对越狱的机器开发的系统,可以使用此协议
-(void)telPhoneSecond
{
NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
[[UIApplication sharedApplication] openURL:url];
}
3)借助UIWebView拨打电话
注:一般都是用这个方式,解决了不越狱的问题
-(void)telPhoneThird
{
// 提示:不要将webView添加到self.view,如果添加会遮挡原有的视图
// 懒加载
if (_webView == nil)
{
_webView = [[UIWebView alloc] init];
}
NSLog(@"%@", _webView);
// _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// [self.view addSubview:_webView];
NSURL *url = [NSURL URLWithString:@"tel://10010"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
}
三、发邮件
注:使用--MFMailComposeViewController (参照发短信2)
需遵循邮件代理----------MFMessageComposeViewControllerDelegate
- (void)sendMail
{
//判断是否能发送邮件
if (![MFMailComposeViewController canSendMail]) {
// 提示用户设置邮箱
UIAlertView * mailAlert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请查看邮箱设置" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[mailAlert show];
return;
}
// 实例化邮件控制器界面,准备发送邮件
MFMailComposeViewController * mailVC = [[MFMailComposeViewController alloc] init];
//1)设置邮件主题
[mailVC setSubject:@"工作报告"];
//2)设置收件人
[mailVC setToRecipients:@[@"xxxxxxx@163.com"]];
//cc ----抄送 bcc -------密送
// 3)设置正文
[mailVC setMessageBody:@"这是我的<font color=\"blue\">工作报告</font>,请审阅!<BR />P.S. 我 的头像牛X吗?" isHTML:YES];
// 4)附件
UIImage * image = [UIImage imageNamed:@"aboutIbos"];
NSData * imageData = UIImagePNGRepresentation(image); // UIImageJPEGRepresentation(image, 0);
// // 1> 附件的二进制数据
// // 2> MIMEType 使用什么应用程序打开附件
// // 3> 收件人接收时看到的文件名称
// // 可以添加多个附件
[mailVC addAttachmentData:imageData mimeType:@"image/png" fileName:@"aboutIbos.png"];
//设置代理
mailVC.delegate = self;
//显示控制器
[self presentViewController:mailVC animated:YES completion:nil];
}
邮件发送完成后 ,调用代理方法关闭短信界面
:
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
switch (result) {
case MFMailComposeResultCancelled: //取消发送
break;
case MFMailComposeResultFailed: // 发送失败
break;
case MFMailComposeResultSaved: // 保存邮件
break;
case MFMailComposeResultSent: // 发送成功
break;
default:
break;
}
// 关闭邮件界面
[self dismissViewControllerAnimated:YES completion:nil];
}