IOS程序内发短信 MFMessageComposeViewController

Wesley13
• 阅读 660

文章转载地址: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];

    }

点赞
收藏
评论区
推荐文章
liam liam
2年前
如何读取redis的手机号验证码数据,实现自动化登录测试
1、案例描述用户选择短信登录!发送短信后,后端接口逻辑已把验证码缓存在redis,!在apifox上定义对应下发登录短信接口,短信登录接口下载地址:这时候问题就来了,怎么样才能让apifox自动获取下发登录短信接口对应的手机号的验证码,自动填充到短信登录接口的code字段?2、解决思路方案一:后端通过接口返回验证码
不是海碗 不是海碗
1年前
语音通知短信 API:一种新型的信息传递方式
实现语音通知短信的功能,我们需要借助语音通知短信的API接口,语音通知短信API是一种将文字转换为语音并通过电话呼叫或发送语音消息的API。
不是海碗 不是海碗
1年前
语音短信API有哪些好处?
我们在日常生活中经常都会用到短信这种通讯形式,短信的呈现形式有很多,有图片形式的,文字形式的,还有一种短信是以语音的形式呈现的。以语音的形式发送到其他手机上的短信被称为语音短信。通过语音,企业可以实现许多业务,语音短信API接口则可为企业提供发送语音短信的服务,让企业快速实现群发语音短信。
Karen110 Karen110
3年前
赶在元旦前夕!10分钟用Python批量定制化发送元旦祝福邮件!
上一篇关于邮件的自动发送教程中,我们讲解了如何使用yagmail进行简单的邮件发送:现实生活中,如果只是发邮件给自己,像上一篇文章那样简陋的格式是可以接受的,但若要针对每个人进行邮件的定制化,群发给公司客户、内部员工、亲戚朋友,则需更加高级的邮件发送方式。我们可以通过HTML制作一封精美的元旦祝福邮件,但是邮件的内容——比如姓名、祝福语等应该怎样动态
Wesley13 Wesley13
3年前
5G消息与微信小程序互联互通?北京国都互联这么做……
最近微信小程序上线了一个超级流量的新入口URLScheme,据微信官网介绍,scheme码适用于短信、邮件、外部网页等拉起小程序的业务场景。通过小程序页面的URLScheme,可以在短信、邮件或微信外部的网页中打开微信小程序。意义在于将微信流量生态延伸到微信以外渠道,进一步完善了小程序和外部渠道互通的营销场景。北京国都互联第一时
Stella981 Stella981
3年前
Jenkins 配置邮件通知步骤
Jenkins配置邮件通知前言可以在Jenkins中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题。Jenkins邮件通知功能的插件主要包括:MailerPlugin(默认的发送邮件插件)EmailExtensionPlugin(功能更强大的发送邮件插件)建议同时安装这两个插件。下面来介绍如何在
Wesley13 Wesley13
3年前
IOS开发之_短信发送与拨打电话
首先宏定义一个号码:define PhoneNumber @"18188888888" / 宏定义一个号码 /短信发送的两种方式:方式一使用系统底层的发送:    / 底层发送方式 /    / 缺点: 无法自定义短信内容,无法返回原来应用; /    NSURL url  
Stella981 Stella981
3年前
Aliyun发送短信接口调用方法
aliyun新版发送短信讲的不是很清晰,初次使用一堆dll不知道用哪个,以.net为例申请SignName与Template\_code请先申请,一般两个小时能通过一、https://help.aliyun.com/document\_detail/55359.html?spm5176.doc55288.6.564.OcWmAm1.\JAV
Wesley13 Wesley13
3年前
thinkphp 定时执行php文件 php自动执行php文件
最近开发短信任务和短信发送功能,用到了定时执行php这方面:和大家分享一下:(个人笔记,写的不好,海涵海涵,看不懂的话可以留言,但是我一般都能及时回复,其他网上有很多这样的教程,大家一搜就满地)我用的是thinkphp开发的程序,程序已经开发好了,程序有个分批定时发送功能,每隔一段时间查找一下数据库,然后把符合条件的短信任务给发送出去
Wesley13 Wesley13
3年前
CCBPM工作流引擎的消息机制与设计
CCBPM工作流引擎的消息机制与设计关键字:ccflowjflow消息机制流程引擎自动发送短信发送邮件发送消息流程引擎微信连接消息接口关于ccbpm:我们把ccflowjflow两个版本的工作流引擎统称为ccbpm.工作流引擎的消息产生:在发送、抄送、退回、转发、加签、删除等等操作过程中