• APP内部调用短信 、电话、邮件


                                                          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];
    }
  • 相关阅读:
    「SDOI2018」物理实验
    「SDOI 2018」战略游戏
    「CodeChef Dec13 REALSET」 Petya and Sequence 循环卷积
    关于微信卡券投放code接口报错原因
    composer update maatwebsite/excel 之后 在linux机子上出现500解决方案
    开启mysql 服务【window】
    thinkphp在linux上部署环境(500情况)
    如何推广微信小程序到企业微信
    linux 阿里云远程连接mysql
    php7以上 不支持mcrypt_module_open方法问题【微信开放平台】
  • 原文地址:https://www.cnblogs.com/AllenLAS/p/4588404.html
Copyright © 2020-2023  润新知