热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在iPhoneApp中发送短息?

翻译自:http:www.appcoda.comios-programming-send-sms-text-messageMessageUI框架不仅可以来发送ema

翻译自:http://www.appcoda.com/ios-programming-send-sms-text-message

Message UI框架不仅可以来发送email,它也为开发者提供了在app中发送短息的界面。使用MFMailComposeViewController类来处理email,使用MFMessageComposeViewController来处理短信。

使用MFMessageComposeViewController与使用邮件很类似。如果你阅读过sending email 和 creating email with attachment,这两篇教程的话,使用这个不过小菜一碟。总之,我们将会通过一个简单地例子,来展示如实使用MFMessageComposeViewController这个类。


Demo App

我们将会使用上一次的demo app,但是会更改一下。app仍然显示一个文件列表。然而,当用户点击table view的某一行的时候,app将会跳转到对应的信息界面,并附带上短信类容。

Getting Started

在这个地方下载项目模板 download the project template ,已经创建好Storyboard,加载好tableview。

Importing the MessageUI Framework
第一步,导入Message UI框架。




Implementing the Delegate

在“AttachmentTableViewController.m”文件中,加入如下的代码:导入Message UI头文件,并遵守MFMessageComposeViewControllerDelegate协议。

#import @interface AttachmentTableViewController ()

MFMessageComposeViewControllerDelegate协议定义了一个方法,该方法在短信结束时调用。实现此方法,并处理各种不同的状况。


  1. 用户取消编辑SMS
  2. 用户点击了发送按钮,SMS发送成功
  3. 用户点击了发送按钮,SMS发送失败

在“AttachmentTableViewController.m”文件中,加入如下的代码。在这里,我们显示一个alert信息,当出现第3中状况的时候。对于其它的状况,则dimiss掉信息界面。

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult) result
{switch (result) {case MessageComposeResultCancelled:break;case MessageComposeResultFailed:{UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to send SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[warningAlert show];break;}case MessageComposeResultSent:break;default:break;}[self dismissViewControllerAnimated:YES completion:nil];
}



Bring Up the Message Composer

当用户点击某一行的时候,来弹出message composer,如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{NSString *selectedFile = [_files objectAtIndex:indexPath.row];[self showSMS:selectedFile];
}

“showSMS:”方法是初始话SMS内容的核心代码,如下:


- (void)showSMS:(NSString*)file {if(![MFMessageComposeViewController canSendText]) {UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[warningAlert show];return;}NSArray *recipents = @[@"12345678", @"72345524"];NSString *message = [NSString stringWithFormat:@"Just sent the %@ file to your email. Please check!", file];MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];messageController.messageComposeDelegate = self;[messageController setRecipients:recipents];[messageController setBody:message];// Present message view controller on screen[self presentViewController:messageController animated:YES completion:nil];
}

虽然大部分iOS设备都能发送短信,但作为一个coder,要考虑到异常情况。如果你的app在iPod touch上使用,但iMessage却不支持。在这种情况下,设备明显不能发送短信。所以在代码的开始位置,我们要确定设备是否允许发送短息,使用MFMessageComposeViewController的canSendText方法。





Compile and Run the App
例子简单,运行app在真机上测试,如下:




What if You Don’t Want In-App SMS
上面的方法可以在你的app中无缝整合短信功能。但是如果你想直接调用短信app来发送短信,可以使用如下的代码:

[[UIApplication sharedApplication] openURL: @"sms:98765432"];


最终完整的代码:download the full source code here.



推荐阅读
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
author-avatar
推动茶汤_789
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有