2021-01-30 分類: 小程序開發(fā)
隨著互聯(lián)網(wǎng)發(fā)展格局的千變?nèi)f化,小程序從起始的未知發(fā)展直至至今所引起的小程序浪潮。正因?yàn)?a target="_blank">小程序的開發(fā)愈加成熟,隨之各種框架層出不窮,以至于很多方面需要我們不斷摸索和嘗試,很多彎路需要我們親自踏遍從而劈開捷徑,對于功能多,迭代多,入口多的小程序該如何開發(fā)?在本文中我與大家一起探討,我所親歷和感悟的有關(guān)小程序好實(shí)踐的那些事。
自2019年9月1號起,不滿足登錄規(guī)范的小程序審核將無法通過,即那些未事先展示小程序功能的界面,并強(qiáng)制調(diào)起微信登錄授權(quán)的小程序。
所謂規(guī)范即指站在用戶角度考慮的,那些連界面都沒有看到的小程序,進(jìn)去后就要求登錄授權(quán)確實(shí)有點(diǎn)強(qiáng)迫用戶,這種類型的小程序加多反而會讓用戶反感小程序的使用,無法推進(jìn)小程序的發(fā)展。
在改進(jìn)后,小程序的幾個 TAB 頁面如下:
但是這樣的改進(jìn)對開發(fā)者來說可能不太友好,不僅僅是產(chǎn)品層面上需要放開至少首頁等這些頁面作為公共頁面,另外接口也需要考慮沒有用戶信息的情況下返回?cái)?shù)據(jù)等等。最令開發(fā)者真正需要絞盡腦汁的,是那些原本簡單粗暴的閃屏頁面解決問題的方法現(xiàn)在不再適用了,因此迫切需要全面地改進(jìn)方法,尤其對于入口落地頁面多,分享入口多,模板消息多的小程序來說,那種見縫插針的做法必將為以后埋下巨大的隱患。
我們需要從整體層面上考慮這個問題,它需要滿足下面幾個極端情況:
與產(chǎn)品事先約定好功能可行性邊界是不明智的選擇,不如從開始就做到足夠大的邊界才是明智之舉。
其實(shí)上面三點(diǎn)都是在說明同一個問題,即用戶的登錄注冊需要足夠的方便與靈活。我們不妨來分析一下什么情況下需要用戶登錄吧?思來想去,簡而言之就是需要用戶信息的時候,比如這個頁面是用戶的訂單列表,那肯定是需要用戶登錄之后才能查看到所需信息。有些頁面比如展示一些商品列表,如果沒有做用戶畫像及個性化推薦,那么其實(shí)是不需要用戶信息的,那這個頁面可以認(rèn)為是公開的頁面。
可能觸發(fā)用戶登錄的情況有:從公開頁面切換到私有頁面,點(diǎn)擊調(diào)起注冊頁面,接口請求需要用戶信息調(diào)起登錄注冊界面。我們會通過注冊新開辟一個頁面,這個方法的優(yōu)點(diǎn)無需多說,參考很多類似 App 的做法便知。
比如有個簽到按鈕,新用戶進(jìn)來點(diǎn)擊之后,點(diǎn)擊簽到,這時回去調(diào)用 check(...) 方法,其回調(diào)的值是 true,表示打開成功;若回調(diào)值是 false,表示打開失敗,這時可能就會進(jìn)入注冊登錄的界面。
在上面這個圖中上半部分是簽到的流轉(zhuǎn)圖,下面是登錄檢查的流轉(zhuǎn)圖,其中的 checkRequest 的功能完成沒有在圖中展示出來,其實(shí)這里還可以做很多拓展,比如是否靜默檢查,是否強(qiáng)制檢查,是否需要注冊完成后完善相關(guān)信息,是否注冊完成后進(jìn)入下一個頁面等等。所有的登錄注冊相關(guān)邏輯都可以進(jìn)入到這個流程中來,不需要再考慮這個接口調(diào)用時用戶處于什么狀態(tài),不需要考慮這個按鈕點(diǎn)擊后用戶的不同狀態(tài)如何處理等等,只需要定義目標(biāo)狀態(tài)即可。
小程序的路由和 WEB 不同,或者說是經(jīng)過了高度的封裝,然后提供了幾個接口:wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab和 wx.navigateBack。這些接口的使用都非常簡單,提供頁面的路徑就可以跳轉(zhuǎn)到響應(yīng)的頁面,比如:
那么這樣的接口有什么不足之處呢?最主要為以下兩點(diǎn):
要解決上面兩個問題其實(shí)很簡單,使用代理模式,我們重新定義下這幾個方法,為頁面定義一個清單,并為每個頁面起一個別名:
頁面清單對象就可以解決路徑全為字符串,使用效率低,以及容易出錯等問題,而代理方法可以組裝參數(shù)對象,方便傳參提高效率?;谶@個原始動機(jī)以及設(shè)計(jì)理念,我們來一步一步完善加強(qiáng)這個自定義路由的功能。
由于使用的是 Taro 框架,正常跳轉(zhuǎn)時使用的是 Taro.navigateTo這樣的方法,因此能否將自定義的方法注入到這個對象上呢,那樣的話使用起來應(yīng)該會更加方便。
由于使用的是 TypeScript,所以注入起來不像 JavaScript 那么方便可以直接注入,因?yàn)?Taro 的類型上并沒有我們自定義的方法。所以第一步新建一個文件 shim.taro.d.ts 放到 src 下,在其中加上如下內(nèi)容:
這時在使用 Taro 時你會發(fā)現(xiàn)可以有提示了,也不會警告了,但是運(yùn)行時會報(bào)方法不存在,那是因?yàn)檫@個僅僅只是聲明,并沒有實(shí)現(xiàn),因此需要找一個文件實(shí)現(xiàn)這些方法,然后在 app.tex 中引入這個文件,這時便可以正常使用了。
上面說到為每個頁面加上別名,列出我們使用的頁面的清單,但是僅僅別名太過于簡單,于是我們可以為每個頁面定義一下頁面屬性,如下:
如此一來,在通過別名查詢頁面時,拿到的不再單單是一個頁面的地址路徑,而是更多關(guān)于這個頁面的信息??梢詳U(kuò)展很大功能,比如跳轉(zhuǎn)時可以檢查當(dāng)前頁面的類型,如果使用 navigate 的方式跳轉(zhuǎn)到了一個 tab 類型的頁面那么可以強(qiáng)轉(zhuǎn)為 launch 的方式跳轉(zhuǎn),這樣就不會出現(xiàn)跳轉(zhuǎn)出錯的問題。另外可以添加這個頁面是否公開頁面,或私有頁面等信息,來觸發(fā)用戶是否需要登錄等,以及這個頁面是否需要額外信息才能進(jìn)入,也是可以在這里配置的。
登錄檢查有了,路由也有了,剛好頁面觸發(fā)的用戶登錄注冊就可以解決了。場景是這樣的,新用戶進(jìn)到一個引導(dǎo)的頁面(比如首頁,或者其他無需用戶登錄的頁面)時,點(diǎn)擊跳轉(zhuǎn)到一個子頁面,而子頁面是需要用戶登錄才能訪問的,這時想要的邏輯是,如果這個用戶已經(jīng)注冊過,那么無感知直接進(jìn)入,如果未注冊,那么就跳轉(zhuǎn)到注冊頁面,注冊完后跳轉(zhuǎn)到子頁面。
在路由跳轉(zhuǎn)到目標(biāo)頁面的時候檢查必要的前提條件,比如登錄狀態(tài),發(fā)現(xiàn)用戶并未注冊時則調(diào)起登錄注冊頁面,完成后進(jìn)入目標(biāo)頁面。部分代碼如下圖:
閃屏其實(shí)是不應(yīng)該存在小程序中的一個頁面,我們從原來的閃屏作為小程序的唯一入口,到現(xiàn)在登錄注冊的改造讓閃屏從小程序中消失做了很多的改造。從唯一入口變成了多入口,閃屏已經(jīng)不再需要。但是有些時候你還是會感覺一個閃屏頁面確實(shí)會有其存在的必要性。
如上所示,如果我們加入了閃屏頁面,可以作為統(tǒng)一的外部落地頁,可以根據(jù)頁面的別名再做跳轉(zhuǎn),然后直接使用了前面自定義的路由功能。
另外對于普通二維碼這個功能是非常有必要的,因?yàn)槠胀ǘS碼只能有10個,且每個的落地頁固定,這樣的處理就可以實(shí)現(xiàn)無限制的落地頁,并且可以帶很多參數(shù)。
綜上所述,代碼部分其實(shí)也是很簡單的,處理兩種類型的參數(shù)即可。有一個值得推薦的做法,結(jié)合自定義路由是很好的處理方式。另外還有一個較好的實(shí)踐就是將參數(shù)展開,比如目標(biāo)頁面的參數(shù),其實(shí)是帶在入口頁面上的,然后由入口頁面結(jié)合自定義路由轉(zhuǎn)發(fā)到目標(biāo)頁面,而不是直接帶在目標(biāo)頁面上。
文章名稱:小程序開發(fā)的幾個好的實(shí)踐
轉(zhuǎn)載來源:http://aaarwkj.com/news27/98227.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項(xiàng)目有小程序開發(fā)等
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容