IOS程序内发短信 MFMessageComposeViewController

文章转载地址:http://www.headsky.org/?p=63

iOS4.0新加入了MFMessageComposeViewController和MFMessageComposeViewControllerDelegate,提供了发送短信的接口,可以像发送邮件那样不用跳出程序来发送短信. 介绍可参阅Message UI
Framework Reference

一些笔记:

MFMessageComposeViewController

  • 提供了操作界面
  • 使用前必须检查canSendText方法,若返回NO则不应将这个controller展现出来,而应该提示用户不支持发送短信功能.
  • 界面不能自行定制
  • 要发送的短信的内容(body)和收件人(recipients)在展现这个controller前需初始化好,展现了之后短信内容不能通过程序来进行修改.不过用户仍然可以手工修改短信内容和选择收件人
  • 用户点了发送或者取消,或者发送失败时,MFMessageComposeViewControllerDelegate 的– messageComposeViewController:didFinishWithResult:方法都能得到通知,在这里进行相应的处理

若在iOS3.0上运行的话,会提示dyld: Symbol not found: _OBJC_CLASS_$_MFMessageComposeViewController .解决方案:

    1. MessageUI.framework的引入类型应选择weak(在target -> Get Info -> General -> Linked Libraries -> MessageUI.framework -> Type 里修改)
    2. 不要在.h文件里直接import MessageUI/MFMessageComposeViewController.h,改为import <MessageUI/MessageUI.h>

      #pragma mark -
      #pragma mark SMS
      
      -(IBAction)showSMSPicker:(id)sender {
         //    The MFMessageComposeViewController class is only available in iPhone OS 4.0 or later.
         //    So, we must verify the existence of the above class and log an error message for devices
         //        running earlier versions of the iPhone OS. Set feedbackMsg if device doesn’t support
         //        MFMessageComposeViewController API.
         Class messageClass = (NSClassFromString(@”MFMessageComposeViewController”));
      
         if (messageClass != nil) {
             // Check whether the current device is configured for sending SMS messages
             if ([messageClass canSendText]) {
                 [self displaySMSComposerSheet];
             }
             else {
                 [UIAlertView quickAlertWithTitle:@"设备没有短信功能" messageTitle:nil dismissTitle:@"关闭"];
             }
         }
         else {
             [UIAlertView quickAlertWithTitle:@"iOS版本过低,iOS4.0以上才支持程序内发送短信" messageTitle:nil dismissTitle:@"关闭"];
         }
      }
      
      -(void)displaySMSComposerSheet
      {
         MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
         picker.messageComposeDelegate = self;
      
         NSMutableString* absUrl = [[NSMutableString alloc] initWithString:web.request.URL.absoluteString];
         [absUrl replaceOccurrencesOfString:@"http://i.aizheke.com" withString:@"http://m.aizheke.com" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [absUrl length])];
      
         picker.body=[NSString stringWithFormat:@"我在爱折客上看到:%@ 可能对你有用,推荐给你!link:%@"
                                             ,[web stringByEvaluatingJavaScriptFromString:@"document.title"]
                                             ,absUrl];
         [absUrl release];
         [self presentModalViewController:picker animated:YES];
         [picker release];
      }
      
      - (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                      didFinishWithResult:(MessageComposeResult)result {
      
         switch (result)
         {
             case MessageComposeResultCancelled:
                 LOG_EXPR(@”Result: SMS sending canceled”);
                 break;
             case MessageComposeResultSent:
                 LOG_EXPR(@”Result: SMS sent”);
                 break;
             case MessageComposeResultFailed:
                 [UIAlertView quickAlertWithTitle:@"短信发送失败" messageTitle:nil dismissTitle:@"关闭"];
                 break;
             default:
                 LOG_EXPR(@”Result: SMS not sent”);
                 break;
         }
         [self dismissModalViewControllerAnimated:YES];
      }
时间: 2024-10-12 03:13:51

IOS程序内发短信 MFMessageComposeViewController的相关文章

iOS程序内发短信

1.程序外发短信 [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@sms://10086]]; 2.程序内发短信,发完短信自动返回应用 (1)首先导入框架MessageUI.framework (2) 引入头文件 #import <MessageUI/MessageUI.h> (3) 实现代理方法 <MFMessageComposeViewControllerDelegate, UINavigationCon

iOS开发之调用系统打电话发短信接口以及程序内发短信

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

IOS问题汇总:2015-1-9 iOS 调用系统发短信以及打电话功能

iOS 调用系统发短信以及打电话功能 ios电话smsinterface互联网class先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@“tel://10086”]]; 调用发短信功能 [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@“sms://10000”]]; 上面的发短信的功能是调用系统的

iOS打电话、发短信、发邮件功能

以下为学习过程中在网上查到的方法, 实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点. 1.1.发短信(1)——URL // 直接拨号,拨号完成后会停留在通话记录中 1.方法: NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplication] openURL:url]; 2.优点: –简单 3.缺点: –不能指定短信内容,而且不能自动回到原应用 1.2发短信(2)——M

IOS 调用系统发短信以及打电话的功能

IOS 调用系统发短信以及打电话的功能 http://blog.csdn.net/lwq421336220/article/details/7818979 先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]]; 调用发短信功能 [[UIApplication sharedApplication]openURL:[NSURL URLWithS

iOS调用系统发短信功能详解

iOS调用系统的发短信功能可以分为两种:1,程序外调用系统发短信.2,程序内调用系统发短信.第二种的好处是用户发短信之后还可以回到app.这对app来说非常重要. 程序外调用系统发短信 这个方法其实很简单,直接调用openURL即可: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms://13888888888"]]; 程序内调用系统发短信 1)导入MessageUI.framework,并引入头文

iOS基本的发短信和打电话调用

电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [cpp] view plain copy print? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10010"]];//打电话 使用openURL这个API打电话结束后,返回的是系统的拨打电话界面,如何才能返回自己的应用呢?有两种方法与大家分享. 第

iOS打电话、发短信、发邮件功能开发

本文转载至 http://www.lvtao.net/ios/506.html 今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点.1.1.发短信(1)——URL // 直接拨号,拨号完成后会停留在通话记录中1.方法: NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplica

iOS打电话,发短信,发邮件,打开网址

//调用自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]]; //调用电话 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]]; //调用sms [[UIApplication sharedApp