2017.11.23
一. 前言
首先想說一下為什麼寫這篇文章:
-
《啟示錄》這本書曾提到:如果開發的產品沒有市場價值,那麼無論開發團隊多麼優秀也無濟於事。那麼同樣的,在我們程式設計師費盡周折抓取各種資料,嘗試不同的技術方案只為了讓冷啟動快0.1秒的同時,可能在產品層面稍微一個小技巧就能讓使用者感覺這1秒過得更快,那我們程式設計師進行程式碼層級的優化之前是不是最好思考一下產品層面的優化呢?
-
有資料統計,App安裝前三天,平均流失77%的日活躍使用者。因為新使用者是沒有耐心的,他不知道你的產品能否給他們帶來便利,提高效率,產生價值,帶著這種懷疑的態度使用App過程中,可能一丁點的的不爽、彷徨就導致使用者解除安裝了App。就好比相親,如果外在的皮囊在第一時間讓對方感到不適,那麼無論你的內在的靈魂多麼有趣也是無濟於事(除非你是個會吹牛逼的程式設計師?)。換個角度來講,可能整個App的產品設計很棒,程式碼設計和優化也做到了極致,但是因為使用者第一次使用感覺使用起來太複雜,跟預期相差太遠,就導致使用者還沒體驗到核心模組就解除安裝了App。
-
你只有一次機會給別人留下好印象
,同樣的,近年來手機、電腦、無人機等數碼產品也越來越重視開箱體驗,比如可以研究下錘子手機的包裝設計和內建配件的排列布局,也是通過這樣的第一視覺衝擊提供更好的使用者體驗。
- 可能有人會覺得,“產品?工作的一部分就是優化以上所講的使用者體驗,程式?寫好程式碼就行了”。然而在有些產品和設計上的
原生樣式規則
,程式設計師是應該比產品和設計師更清楚的-
比如有次設計師提了個需求:
要求原生彈框的確定設定為加粗Medium的顏色,取消設定為普通regular顏色
。當然,這個需求站在設計師的角度來講是合情合理的:90%的人(使用者)都是右撇子,產品本身具有引導和期望性質的button放在右邊,同時顏色上更醒目 -
但問題是美團的彈框是自定義的,對於原生的Alert彈框按鈕型別而言,有三個列舉值:
UIAlertActionStyleDefault
:Apply the default style to the action’s button.UIAlertActionStyleCancel
: Apply a style that indicates the action cancels the operation and leaves things unchanged.UIAlertActionStyleDestructive
:Apply a style that indicates the action might change or delete data.
-
從程式碼實現層面來講,無非是換一下按鈕列舉值,但是違反了蘋果的官方規範可能後造成意想不到的問題,比如iOS11升級後,發現專案中有這樣一個問題
-
這是
UITableViewCell
對應的一個UITableViewRowAction
,其對應的style也有三個:UITableViewRowActionStyleDefault
:Apply the default style to the button.UITableViewRowActionStyleDestructive
:Equal to the default style.UITableViewRowActionStyleNormal
:Apply a style that reflects standard non-destructive actions.
-
後來查明原因就是之前的程式碼把刪除對應的style設定成了
UITableViewRowActionStyleNormal
,改為UITableViewRowActionStyleDestructive
才得以修復該問題,因為執行刪除後,資料來源及cell已進行了刪除更新操作,但是UITableViewRowAction
對應的動畫效果卻是UITableViewRowActionStyleNormal
,因此會造成上面的問題 -
但是這個手誤是在iOS11 新增的互動動效上才暴露出來的,在之前的系統上是沒有問題的,因此我拒絕了那位設計師,確實可能會埋下一些隱患,除非整個 App 的 Alert 風格都改為自定義?
-
二. 各種許可權彈框的處理邏輯
在網際網路上半場,很多不精細的產品中存在這樣一個問題:使用者首次下載後咔咔咔三四個許可權彈框接連彈出,這就好像你跟女神第一次見面,對方還沒說話,你就笑嘻嘻地問:“妹妹家有幾口?從哪裡來又到哪裡去啊?可以加個微信麼?要不要考慮做我女朋友啊?”
1. WLAN與蜂窩許可權
iOS10
以後,由於工信部的要求,在國行
手機上使用者首次下載
App,需要向使用者請求網路許可權,針對該彈框,有以下幾個問題:
-
開發者不能判斷該彈框的狀態,也不能主動觸發該許可權的請求,在蘋果爸爸面前,依舊是“人為刀俎,我為魚肉”
-
蘋果官方的bug:畢竟是臨時改需求,有時候第一次下載該彈框沒有彈出,導致App一直不能聯網,App對應的許可權列表也沒有WLAN和蜂窩許可權,目前在iOS11上測試多次,目測該bug已修復
-
有的使用者習慣性拒絕,小手一抖就不允許訪問網路了
蘋果是爸爸,可使用者也是大爺啊,針對以上問題,常規的處理方式是這樣的:
- 在檢測到沒有網路的前提下(無網路訪問許可權/手機確實沒有聯網),告知使用者可能是因為網路許可權問題導致的無網路狀態,並向使用者提供解決方案:
- 給出設定路徑,讓使用者手動到達路徑並更改網路許可權
- 點選按鈕直接跳轉到該 App 設定介面修改網路許可權
我個人一般是使用第二種,因為一般使用者手機裡面都有很多App,手動查詢太費勁了,但是微信卻是讓使用者手動去查詢,這點我不太明白,如哪位大佬看透還望告之(QQ的大部分許可權是直接跳轉的)
-
但這裡還有一個硬傷:各種許可權修改之後,再次進入 App,就會回到首頁,相當於進行了一次冷啟動。至於這個現象的原因,個人猜測:假如現在正在使用麥克風錄音,使用者卻進入設定介面關掉了麥克風許可權。你讓蘋果爸爸怎麼處理這個尷尬的局面?
-
對於特殊情況,比如該 App 沒有彈出網路許可權彈框,對應的設定介面也沒有網路許可權,一下是各種偏方:
- 多進行幾次開啟、殺死App的操作,在這過程中有一定機率會彈出網路許可權彈框
- 先進入設定介面隨便關掉一個App的網路許可權,然後再進入目標App設定介面,對應的網路網路許可權就顯示出來了
- 簡單粗暴的重啟一定好使!!
2. App中重要且緊急的許可權獲取
比如導航類產品的地理位置許可權、修圖軟體的相簿許可權、時間管理類軟體的日曆許可權。針對這種**“缺了你不行”**特徵的App,除了網路許可權無法控制之外,其他所有許可權最好先不要觸發,能延遲儘量要延遲,只留這一個許可權選擇,最好在給出一定的提示
3. 其他重要不緊急的許可權獲取
-
比如IM聊天軟體中麥克風許可權,普通工具類App中相簿許可權(比如針對換頭像這種功能)。使用者需要正常進行這些操作需要對應的許可權,但是不應該在App 第一次啟動的時候就立刻去請求許可權。
-
對於這種重要不緊急的許可權,一般都採取懶載入的方式,也就是等到使用者探索到這個功能的時候,主動觸發去傳送請求。
在使用者暫時還不需要這個資訊的時候,千萬別給他提供!
就像平時的待人接物一樣,要給對方想要的,而不是你認為他想要的
三. 登入相關的優化
1. 免登陸邏輯
-
登入註冊功能本身就是對使用者的一個限制,在使用者還未體驗到你產品價值的時候,卻讓使用者提交個人資訊進行註冊,這顯然是不合適的。
-
因此,除非是即時通訊類似的與賬號強關聯的App,其他App最好都要進行免登陸操作:先向使用者展示一部分基本的功能,當使用者觸發了與賬號強關聯的操作(比如評論、買單等),再去提示使用者進行登入註冊操作
-
之前做過一個工具類App,使用者剛下載就要進行登入註冊操作,統計資料顯示在注這部分流失掉的使用者為10%之多!
-
關於免登陸,之前寫過一篇文章:iOS程式設計師眼中的客戶端免登陸,在此不再贅述
2. 登入相關的優化
- 如果使用者之前在該手機登陸過,在不需要考慮安全前提下,可以給使用者提供更便捷的登入方式,或者對使用者進行提示(諸多第三方登入選擇,可能使用者隨便點了一個,下次就忘記了)
該功能一般使用UDID來實現,關於這個有個小插曲,在 iOS 10.3 版本的 beta 2 - beta 5版本中,keychain 中的資料會因為 APP 的刪除而刪除,當時趕緊找其他替代方案,調研了知乎、領英之後,發現用的不是簡單的keyChain,而是 iOS9 推出的SFSafariViewController,這個可以將密碼、共享Cookie、iCloud Web表單資料、證書等儲存在系統裡面,與 iCloud keyChain 進行繫結。最後程式碼寫的差不多了,發現 10.3 beta 6 版本,keychain 又可以繼續使用(10.3正式版也是如此)。
-
在登入註冊的整個過程中,儘可能地減少使用者的操作(最開始
有信電話
是這樣做的,後來滴滴
改版也變成這樣;AppleID 新裝置登入需要的驗證碼
也是這樣的):- 比如使用者輸入11位的電話號碼後經過正則判斷有效後,直接觸發獲取驗證碼按鈕的操作,游標進入驗證碼輸入框
- 輸入簡訊驗證碼後直接觸發登入操作
- 也就是在整個過程中,使用者只需要輸入電話號碼和驗證碼,不需要其他任何切換的操作
-
其他的諸如格式自動檢測、小螢幕適配、使用者手感上的優化在此不再贅述
四. 引導使用者瞭解核心功能的使用
1. 使用者下載之前
一般情況下,使用者通過社交媒體、產品運營活動或者App Store接觸到產品,通過這個首次接觸,會對產品建立一個初步認識,如果在這些途徑中,你所描述的產品核心價值成功打動了使用者,並進行下載操作。
2. 使用者下載之後初步使用
《使用者體驗要素》這本書提出:最底層的架構是使用者需求和網站目標一樣,推動新手引導設計的原因也有兩個:使用者需求和產品目標。對於新手引導來說,使用者需求是快速、愉悅地學習使用產品。產品目標是將新手使用者快速轉化為活躍度高、黏著度高的忠實使用者。
新手引導要維持這兩方面的平衡,根據各自產品特性進行不同的引導操作:
- 內容社群類產品,開始使用者是沒有資料的,因此要首先給使用者展示內容定製介面
- 工具、遊戲類 App 就要引導使用者成功使用一次核心操作,在引導的過程中最好完成一次階段性流程就給予使用者一定的鼓勵
引導頁與App Store 推廣圖類似,在此不做討論
- 在這個過程中最好對使用者行為進行更細化的統計並追蹤結果,根據各種統計資料分析使用者流失的原因,從而不斷優化引導的流程
- 在第一次開啟App或者使用者第一次登入成功後,可能要下載一些歷史資料(比如微信登入成功後要下載部分歷史訊息、通訊錄資料),技術可以在這方面儘可能地做優化;設計層面也可以考慮增加一些動效,讓使用者在心理上感覺時間過得很快(如果亞馬遜網頁下載速度慢 1 秒鐘,1 年就有可能損失 16 億美元;如果谷歌提交搜尋結果的時間延遲 0.4 秒,一天的搜尋量就會減少 800 萬次;好吧,這個浮躁的快節奏世界? )
- 當然,在使用者完成第一次使用App之後,運營方面也可以做一些諸如電話回訪、簡訊通知紅包下發、push推送活動資訊等喚醒使用者操作
五. 寫在最後
- 產品懂技術,就像流氓會武術。技術會點產品,就像會武術的人去耍流氓???
- **雷軍曾經說過:如果寫程式碼沒有寫詩的感覺,那就轉行做產品經理吧!**雖然確實沒有寫詩的感覺,但是有時候把使用者的感覺納入進去,對每一個小的功能點都保持著敬畏感,把人作為中心點去考慮而非程式碼,好吧,我編不下去了??。。工頭喊我搬磚了
感謝閱讀。