APP功能模組實現之思路歷程(基於iOS端)
寫在前面:
不知道各位童鞋是否有過和我相似的經歷:某天突然想到一個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。(手動滑稽
希望本文對你有所幫助,如果你有什麼想與筆者討論的,歡迎評論區留言哈~
相關文章
- AppDelegate模組化歷程APP
- 基於大疆無人機全景拍照的實現思路無人機
- 基於 Agora SDK 實現 iOS 端的多人視訊互動GoiOS
- 基於Masstransit實現Eventbus的功能
- ASP.NET Core模組化前後端分離快速開發框架介紹之4、模組化實現思路ASP.NET後端框架
- 移動端基於LBS實現簽到功能可行性分析
- JavaScript 模組化歷程JavaScript
- 「iOS」行車服務app 「客戶端、後端思路+程式碼」iOSAPP客戶端後端
- iOS APP啟動廣告實現方式 與 APP喚端呼叫iOSAPP
- 基於環信實現線上聊天功能
- Python基於TCP實現聊天功能PythonTCP
- 基於原始碼分析apppium服務端啟動過程原始碼APP服務端
- 評論模組 – 後端資料庫設計及功能實現後端資料庫
- 評論模組 - 後端資料庫設計及功能實現後端資料庫
- 基於socket用java實現telnet功能Java
- Redis實現點贊功能模組Redis
- React服務端渲染實現(基於Dva)React服務端
- iOS 抽獎輪盤效果實現思路iOS
- Android基於MediaBroswerService的App實現概述AndroidROSAPP
- javascript模組化發展歷程JavaScript
- 前端模組化發展歷程 (-)前端
- ios端app讀取iphone檔案(通過itunes實現)iOSAPPiPhone
- magisk模組 實現app 保活APP
- 基於Socket.IO實現Android聊天功能Android
- C#--基於delegate實現不同功能的排序C#排序
- 基於Decorator的React高階元件的思路分析與實現React元件
- 基於lua協程的AI服務實現AI
- 原型設計之校友圈APP功能實現介紹原型APP
- 換膚功能實現過程
- 實現基於React的移動端Swiper元件React元件
- 簡版排程中心搭建及實現思路
- 【原創】基於MySQLConnector/C實現客戶端程式之API總結MySql客戶端API
- Javascript模組化的演進歷程JavaScript
- 基於BIT陣列實現全域性功能開關陣列
- 實現基於JWT的Token登入驗證功能JWT
- 基於JQuery實現的文字框自動填充功能jQuery
- 一種app模組化實現方案APP
- 實現小程直播帶貨app原始碼的紅包傳送功能APP原始碼