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]; }