写在前面:
不知道各位童鞋是否有过和我相似的经历:某天突然想到一个APP的功能模块,但是苦于自己的技术水平,一时想不出具体的实现方式呢?如果有的话,那本文就是适合你的菜啦~
接下来,笔者将由实现一个具体功能模块的思路历程出发,逐步展示这个概念是如何成型落地的。
笔者希望本文能对读者有所启发,同时由于笔者技术水平有限,文中难免有所纰漏、错误,还请各位多多包涵。
具体功能模块描述:
- 导入Excel文件,并根据Excel表格的姓名列和手机号列建立接收人群组。
- 选择可编辑的模板并用当前手机发送短信。如:{name}同学你好,欢迎报名百步梯技术部,一面面试地点将在......其中{name}标签将在发送短信时被Excel表中的真实姓名替换,从而使得短信更加亲切。最终,每一条短信将被发送至姓名所对应的手机号上。
正文:
锵锵锵!功能明确好了,就让我们开始想法子去实现它吧~首先我们心中要有这么一个概念:
芥川龙之介就曾写过:“必要的思想或许早在三千年前就已穷尽,我们现在只是给旧柴添把新火罢了”。Amazing!这在我们代码界中也是一样的,我想要做的功能,往往已经有人做过了,我不知道只是因为我搜索资料还不够多不够全,这对个人信息检索能力的要求还蛮高的。
因此,在不要求100%创新性的前提下,已经被别人实现过反而是一件大好事情,我们不妨找到这些实现的demo、投入使用的APP来观摩观摩,作为参考,降低自己摸索的成本,也避免去重复造轮子。
接下来,我将从iOS应用ExcelSMS和github(全球最大的同性交友网站)站内检索结果出发,进一步明确功能模块的实现。
ExcelSMS(APP):
以“excel导入”、“短信群发”作为关键词Google一下,马上就能找到ExcelSMS。ExcelSMS给出了几个示例excel表格格式,导入方式可以为用该APP打开文件或者WIFI上传,其中一种格式如下所示:
我们可以看出第一行为标签行,之后的每一行都有名字、手机号、短信内容。可以猜到{}标签最终会被相应的内容所替换。
导入完上述Excel文件后将如下图左一所示,我们可以看到ExcelSMS根据上述excel表格建立了两个收件人信息,每个收件人信息栏里是对应的信息展示:
我也可以点击每一行收件人,查看相关的信息,并进行编辑,如左二所示。当我最终确认好信息后,可以对短信做一个发送前的预览,这时候,就可以看到将要发送的短信内容啦~如左三。
最后,我点击发送的飞机图标,ExcelSMS就自动打开了系统的iMessage应用,填充好了第一个收件人和短信内容,我只需确认后点击发送;发送完后,会再次跳回ExcelSMS,读取下一个收件人和短信内容,又跳到iMessage,依此类推。也就是说有N条短信,就需要我点击N次发送的绿色箭头,并且忍受约为2N次的跳转。
我知道读者和我会有同样的想法:有点不太合理啊......但是,人家开发者应该也想得到,兴许是苹果爸爸对于系统应用iMessage接口的调用就只给了这么点权限吧……本文后续会对此进一步分析。
ExcelSMS的启示:
1. 它实现了我所构思的功能,最起码可以印证我想法的技术可行性。另一方面,我可以借鉴它的事件流并看出所需的技术:Excel文件导入后保存在APP本地(APP间文件导入及本地存储),打开excel表后做一个tableView展示(excel表读取[可能需要借助开源库],UITableViewController的使用),在发送前可以提供一个预览(对字符串进行处理,用内容将{}标签进行替换,是逻辑部分),最后调用系统应用iMessage发送短信(需要查看iMessage的相关API及文章)。
2.倘若ExcelSMS是开源APP,在github上可以找到相关代码那就再好不过啦~~然而,ExcelSMS是收费的呢,正式版还要68元软妹币,当然是闭源的啦。
Github站内搜索:
ExcelSMS是闭源的没错,但是谁知道会不会有什么仿ExcelSMS代码、或者别人写的相应demo呢。梦想还是要有的。
于是我将“excel 短信(sms或message)”、“仿ExcelSMS”作为关键词进行了github站内检索,结果有很多,但是iOS端的没有。JAVA语言Android实现倒是找到了一个:JAVA/Msgs。它实现了excel表读取、信息展示、调用系统短信应用发送短信,这几个功能,如果我是安卓开发的话……工作量应该就大大减小了……所以,转行安卓开发吧
继续Google和百度
找不到的能直接参考的代码的话,就只能按照上述拆解的ExcelSMS实现技术,一个模块一个模块去踩坑去Google了。踩坑过程如下:
1. 经过Google,APP间文件导入方案为UIDocumentInteractionController 。
iOS中的沙盒可以让平台更加的安全,这也是沙盒给用户带来的最主要好处。不过由于沙盒的严格限制,导致程序之间共享数据比较麻烦。一般在程序间共享文档可以通过UIDocumentInteractionController类实现通讯。它支持在你的app中用其他app预览和显示文档。同时也支持文件关联,允许其他app通过你的程序打开文件。
2. excel表读取问题,这个问题我用不同的组合Google了多次,最后发现还是如“ios excel parse”的英语搜索有用。最后,找到的实现方案比较多,我个人觉得难以轻易定夺。
方案一:XlsxReaderWriter 1.0.11,本地读取方案。一个objC语言写就的MicroSoft Excel(TM)文件阅读框架,但是最后更新是在2年前。
方案二:平台不同,难易也不同。像PHP、Python其实可以很轻易就读取xls、xlsx、csv等文件,并且整理成json数据格式。所以可以通过http请求方式,将文件上传至服务器,服务器返回json数据到APP。其缺点在于联网和流量损耗。
方案三:有一种说法是excel文件如xlsx、xls本质上是压缩文件,可以利用第三方库SSZipArchive,解压文件后用文本形式打开,找到其中的标签进行截取。感觉有点旁门左道的赶脚……
3.iMessage的接口调用方案:MessageUI框架。部分调用代码如下所示:
- (void)displaySMSComposerSheet
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
// You can specify one or more preconfigured recipients. The user has
// the option to remove or add recipients from the message composer view
// controller.
picker.recipients = @[@"10010",@"10086"];
// You can specify the initial message text that will appear in the message
// composer view controller.
picker.body = @"Hello from California!";
[self presentViewController:picker animated:YES completion:NULL];//显示系统SMS界面
// [self presentModalViewController:picker animated:YES];//老套的方法
}
如果自定义短信,需要使用上述的框架MessageUI。它能返回原app;可以多人群发; 可以自定义消息,消息支持HTML格式的;具体的发送操作还需要用户完成。
对于发送短息,可定义发送内容和接收方的号码。但有一个问题,都是调用短信发送界面,需要用户点击发送才行。由于苹果对安全性的要求很高,所以暂时无法脱离其原生viewController来发送短信,即无法后台发送短信。
这就很好的解释了ExcelSMS为什么会是这么一个发送机制......都是苹果爸爸定死的东西……还是安卓开放度高啊
至此,虽然我并没有写上一行代码,但基本捋清了该功能模块实现过程和最终会呈现出的效果。其实检索的时候关键字的选择蛮重要的,最好保存一些代码网站如:code4app、csdn、github交友网站等。在这些网站进行站内检索往往会有意外之喜哦~
写在最后:
总结一下,其实我的整个寻找实现思路的过程,其实也就是一个不断信息检索的过程。寻找投入使用的APP(ExcelSMS),找代码(github站内检索、google检索),又或者是把功能拆分成一个个模块逐个查资料,最后查阅官方API文档学习,这些都是一个信息检索并获取的过程。这就很考验我们的信息搜索能力啦~~~
在这里笔者给一个很tiny的tip,如果你想快速提高自己的搜索能力,最简单的方式就是弃掉百度,使用Google。(手动滑稽
希望本文对你有所帮助,如果你有什么想与笔者讨论的,欢迎评论区留言哈~