iOS 開發(fā)的微信小程序初體驗(yàn)

當(dāng)前端在談?wù)撐⑿判〕绦虻臅r(shí)候弟跑,iOS 開發(fā)在談?wù)撌裁础?br>

? ? ? ? 本職是iOS 移動(dòng)開發(fā)的灾前,最近研究了一下比較火的微信小程序友酱。前端0基礎(chǔ)网杆,研究也不是很透徹,所以大家一定要保持懷疑的態(tài)度看這一篇分享啤挎。由于是本職是iOS開發(fā)所以在開發(fā)小程序的時(shí)候也會(huì)按照之前iOS開發(fā)的一點(diǎn)點(diǎn)經(jīng)驗(yàn)來搭建小程序饲嗽。所以主要是從幾個(gè)應(yīng)用框架層來比較說明一下iOS 和 微信小程序之間的異同點(diǎn)炭玫。理論基礎(chǔ)來自官方文檔再加上自己一點(diǎn)點(diǎn)實(shí)踐(從圖可以看出這渲染跟原生App很相像了)

微信小程序

1.網(wǎng)絡(luò)層

? ? ? ?網(wǎng)絡(luò)層:這是必要的基礎(chǔ)建設(shè)。

服務(wù)器配置

小程序:上圖是小程序的后臺(tái)服務(wù)器配置貌虾,必須要事先配置好服務(wù)器吞加,否則在程序中是無法正常請(qǐng)求的。一個(gè)小程序同時(shí)只能有一個(gè) WebSocket連接酝惧,并且同時(shí)也只能有5個(gè)網(wǎng)絡(luò)請(qǐng)求連接榴鼎。請(qǐng)求的服務(wù)器地址必須是HTTPS協(xié)議的伯诬,看了后臺(tái)服務(wù)器地址配置晚唇,上傳和下載文件的服務(wù)器也是單獨(dú)設(shè)置。很重要的一點(diǎn)也令人頭疼的是小程序是不支持H5頁面跳轉(zhuǎn)也是不支持cookie盗似。

iOS :蘋果規(guī)定從2017年1月起App內(nèi)的網(wǎng)絡(luò)鏈接強(qiáng)制使用HTTPS協(xié)議的哩陕,iOS 可以設(shè)置網(wǎng)絡(luò)請(qǐng)求數(shù)的。通過參數(shù)maxConcurrentOperationCount 來設(shè)置請(qǐng)求數(shù)赫舒,但是也不是任意設(shè)置的悍及,在2G網(wǎng)絡(luò)一次只能維持1個(gè)鏈接,3G是2個(gè)接癌,在WiFi和4G網(wǎng)絡(luò)環(huán)境下是不限鏈接數(shù)的心赶,這里說明下并不是并發(fā)鏈接數(shù)越多越好,越多占用帶寬越高缺猛,請(qǐng)求時(shí)間反而會(huì)延遲缨叫。

所以這里對(duì)小程序同時(shí)有5個(gè)網(wǎng)絡(luò)請(qǐng)求有點(diǎn)疑惑,是否不區(qū)分網(wǎng)絡(luò)荔燎?

這里數(shù)據(jù)回調(diào)處理比較類似耻姥。(小程序有點(diǎn)類似block)

https請(qǐng)求

2.本地持久化存儲(chǔ)/數(shù)據(jù)層

小程序:為每一個(gè)小程序提供了10M的緩存,用來存儲(chǔ)數(shù)據(jù)和文件有咨,現(xiàn)在是內(nèi)測(cè)階段琐簇,不知道以后會(huì)不會(huì)擴(kuò)容。

數(shù)據(jù):看官方的API目前只支持”key-data”的簡(jiǎn)單鍵值存儲(chǔ)以及set/get/remove/clear數(shù)據(jù)操作座享,還不支持?jǐn)?shù)據(jù)庫婉商。

文件:在文件存儲(chǔ)方面似忧,小程序是默認(rèn)都是臨時(shí)路徑,本次程序運(yùn)行期間可以正常讀取据某,退出程序后就刪除橡娄。所以如果要持久存儲(chǔ),需要再調(diào)用wx.saveFile放到本地存儲(chǔ)癣籽,下次打開程序還能正常訪問到挽唉。

iOS:為每一個(gè)App創(chuàng)建一個(gè)沙盒,沙河有3個(gè)文件夾Document/Library/tmp筷狼,根據(jù)這個(gè)文件夾的命名大概就可以猜出它們不同用途瓶籽。iOS 這邊存儲(chǔ)方案就種類繁多,品種豐富埂材。Core Data塑顺、SQLite、NSUserDefaul俏险、keychain严拒、plist、archive根據(jù)自己的需求選取數(shù)據(jù)存儲(chǔ)方案竖独。這里只是簡(jiǎn)單說明一下iOS 持久化存儲(chǔ)裤唠,其實(shí)它是非常龐大的一個(gè)點(diǎn),iOS是一個(gè)小型的操作系統(tǒng)莹痢,存儲(chǔ)和文件操作是有一套完整的方案种蘸。

3.業(yè)務(wù)層/UI層

? ? ? ? 在小程序中一個(gè)完整的頁面page是由.js/.json/.wxml/.wxss這四個(gè)文件組成,每個(gè)界面.js .wxml是必選項(xiàng)其它兩項(xiàng)選填竞膳。iOS并沒有這樣的強(qiáng)制規(guī)定航瞭,一個(gè)界面可以完全在一個(gè)UIViewController里面完成,復(fù)雜的頁面iOS也是可以通過類似的文件拆分使得結(jié)構(gòu)更加清晰明了坦辟。

.js:頁面邏輯

? ? ? ? iOS中一個(gè)完整界面可以只有一個(gè)UIViewController刊侯,在UIViewController中實(shí)現(xiàn)了頁面的大部分邏輯代碼,在可讀性可以規(guī)范一下頁面的代碼布局锉走,屬性初始化滨彻,生命周期函數(shù),回調(diào)函數(shù)挠日,事件處理疮绷,自定義方法等。代碼結(jié)構(gòu)布局大概是這樣子嚣潜,但是也不一定所有的UIViewController都要有冬骚。同樣小程序中也有同樣結(jié)構(gòu)數(shù)據(jù),生命周期,控件綁定事件只冻,自定義方法庇麦。這樣可以提高代碼的可維護(hù)性和可讀性。畢竟小程序還沒有 control + 6這樣的快捷鍵喜德。

頁面代碼布局規(guī)范

看到上面對(duì)比山橄,發(fā)現(xiàn)兩者還是很相似的,這樣對(duì)比看還是有助我們了解小程序舍悯。簡(jiǎn)單看生命周期函數(shù)航棱,是不是很眼熟,很熟悉萌衬,很親切.....

生命周期

.json 公共配置

? ? ? ? 在.json文件中可以配置導(dǎo)航欄的樣式饮醇,tarBar的配置,刷新控件秕豫,網(wǎng)絡(luò)超時(shí)時(shí)間等朴艰。一個(gè)小程序只有一個(gè)總的app.json公共配置,其它的page也有.json文件但是只能配置導(dǎo)航欄的樣式混移,其它都繼承app.json里面的公共配置祠墅。很重要的一點(diǎn)就是你創(chuàng)建所有的.js的文件都需要添加到app.json中。不添加編譯器也不會(huì)報(bào)錯(cuò)歌径,但是你會(huì)發(fā)現(xiàn)跳轉(zhuǎn)到某個(gè)頁面一直不成功一直顯示不出來毁嗦,這個(gè)時(shí)候就要檢查一下有沒有在app.json中添加改文件了。

.wxml 頁面結(jié)構(gòu)

.wxss 頁面組件樣式

? ? ? ? 這個(gè).wxml可以想象成在UIViewController里面放一些控件沮脖,比如這個(gè)頁面有多少圖片金矛,按鈕芯急,已經(jīng)控件之間的層級(jí)關(guān)系勺届,綁定事件等。但是呢娶耍,在.wxml里面不能設(shè)置圖片的大小免姿,圓角,位置榕酒。這時(shí)候.wsxx的作用就體現(xiàn)出來了胚膊,.wxss主要是用來描述.wxml組件的樣式。

舉個(gè)例子:在App 中應(yīng)用廣泛的UITableView在小程序中是怎么實(shí)現(xiàn)的

小程序?qū)崿F(xiàn)UITableView

? ? ? 小程序提供了很多UI組件想鹰,基本可以滿足大部分界面需求紊婉。這些組件基本都能在iOS中找到相對(duì)應(yīng)的。在小程序中這些組件是有一些共同屬性辑舷,同時(shí)每個(gè)組件又有自己一些獨(dú)有的屬性喻犁。跟在iOS 中很多UI控件都繼承同一個(gè)大類UIView是一樣的道理的。

組件列表

4.動(dòng)畫

canvas:畫布。這是要單獨(dú)拿出來講肢础,動(dòng)畫這個(gè)東西呢还栓,真是一言難盡,水太深传轰,有點(diǎn)淌不動(dòng)剩盒。iOS 動(dòng)畫框架Core Animation 功能也是很龐大,有興趣可以看《iOS Core Animation: Advanced Techniques》

5.消息通知

? ? ? 小程序消息通知并沒有實(shí)踐實(shí)現(xiàn)過慨蛙,只能是看著文檔來瞎猜了辽聊。先看下iOS客戶端關(guān)于push消息通知的實(shí)現(xiàn)。

APNs
Provider

iOS :主要是devToken,Provider,APNs這三者之間的交互期贫。App向注冊(cè)通知之后系統(tǒng)會(huì)返回一個(gè)devToken身隐,然后將這個(gè)devToken上傳服務(wù)器Provider。Provider將要發(fā)送給用戶的消息和devToken發(fā)送給APNs唯灵,最后由APNs向用戶設(shè)備發(fā)送通知消息(iOS 10 新增了Notification Extension的擴(kuò)展贾铝,使得Local Notification和Remote Notification都變得非常豐富。)

小程序:小程序這邊并不能像App那樣發(fā)送通知埠帕,但是提供了另一種通知方式-模板消息垢揩。這邊使用AppID 和 AppSecret 注冊(cè)獲取access_token。這個(gè)access_token是通過中控服務(wù)器來獲取和刷新敛瓷。所以我想把a(bǔ)ccess_token看作devToken,中控服務(wù)器就是Provider,微信下發(fā)模板消息的服務(wù)器就是APNs叁巨。

模板消息

小結(jié):devToken是客戶端獲取上傳到Provider服務(wù)器,這邊access_token是中控服務(wù)器來維護(hù)呐籽。還有小程序中模板消息的發(fā)起方還是要求證一下锋勺,跟微信服務(wù)器交互的是中控服務(wù)器還是小程序本身?具體模板消息參數(shù)設(shè)置官方API

6.支付

? ? ? ? 第三方支付接入客戶端都沒有接觸過狡蝶。但是在微信小程序里面直接呼起微信支付應(yīng)該比較簡(jiǎn)單庶橱,小程序也提供了接口,去看官方API吧贪惹。

7.開發(fā)工具

? ? ? ?開發(fā)工具調(diào)試頁面中wxml類似于Reveal界面調(diào)試工具苏章,可以動(dòng)態(tài)查看和修改應(yīng)用程序的界面,對(duì)于我這種新手學(xué)習(xí)和調(diào)試CSS各控件的樣式覺得非常的方便奏瞬。開發(fā)工具還在不斷更新枫绅,補(bǔ)充一些新的功能,更新API硼端,要是看到API跟本文有所不同請(qǐng)以官方API文檔為準(zhǔn)并淋,寫這篇文章的時(shí)候官方又有新的更新....

8.總結(jié)

? ? ? ?小程序是個(gè)小而美的東西,某些方面可以渲染的跟native一樣珍昨,也提供了消息通知和本地存儲(chǔ)的能力县耽,完全可以替代一些對(duì)native要求不是很高的App订咸。但從微信限定的10M內(nèi)存,頁面層級(jí)不能超過5層來說酬诀,小程序也不適合太過深度的用戶體驗(yàn)脏嚷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瞒御,隨后出現(xiàn)的幾起案子父叙,更是在濱河造成了極大的恐慌,老刑警劉巖肴裙,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾唱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜻懦,警方通過查閱死者的電腦和手機(jī)甜癞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宛乃,“玉大人悠咱,你說我怎么就攤上這事≌髁叮” “怎么了析既?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谆奥。 經(jīng)常有香客問我眼坏,道長(zhǎng),這世上最難降的妖魔是什么酸些? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任宰译,我火速辦了婚禮,結(jié)果婚禮上魄懂,老公的妹妹穿的比我還像新娘沿侈。我一直安慰自己,他們只是感情好逢渔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布肋坚。 她就那樣靜靜地躺著乡括,像睡著了一般肃廓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诲泌,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天盲赊,我揣著相機(jī)與錄音,去河邊找鬼敷扫。 笑死哀蘑,一個(gè)胖子當(dāng)著我的面吹牛诚卸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绘迁,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼合溺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了缀台?” 一聲冷哼從身側(cè)響起棠赛,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膛腐,沒想到半個(gè)月后睛约,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哲身,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年辩涝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勘天。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怔揩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脯丝,到底是詐尸還是另有隱情沧踏,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布巾钉,位于F島的核電站翘狱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砰苍。R本人自食惡果不足惜潦匈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赚导。 院中可真熱鬧茬缩,春花似錦、人聲如沸吼旧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圈暗。三九已至掂为,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間员串,已是汗流浹背勇哗。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寸齐,地道東北人欲诺。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓抄谐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親扰法。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛹含,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容