【最佳實踐】小程序重點場景異常處理(一)

一、背景

小程序在運行過程中難免會遇到一些異常情況,將會給用戶帶來不好的體驗。針對於此,我們總結出一些常見的case,總結成最佳實踐,幫助開發者合理處理異常,提升小程序體驗。

二、最佳實踐

場景一:用戶拒絕授權定位,二次進入頁面不友好

一些小程序需要在進入首屏的時候,需向用戶獲取地理位置權限,但是若用戶一旦誤點擊【拒絕】按鈕,那麼下次再次進入該小程序時,頁面直接顯示無法定位。那麼對於一般用戶,很難知道如何再次開啓權限,並因此無法使用小程序,給用戶造成了不好的體驗。

首次進入小程序時,會彈出獲取地理位置信息的對話框,用戶點擊拒絕。

再次進入小程序時,頁面會如右圖所示,整個頁面無內容。

那我們如何解決這個場景的問題呢?這裏提出一種優化建議:

  1. 在用戶進入頁面時,對當前用戶的權限進行判斷;
  2. 若用戶沒有對應權限,則彈出設置頁面來引導用戶開啓權限。
Page({
    onLoad() {
        swan.authorize({
            scope: 'scope.userLocation',
            fail(err) {
                // 更多錯誤碼請查看官方文檔:https://smartprogram.baidu.com/docs/develop/api/open/authorize_swan-authorize/
                // 以 10003 用戶拒絕授權爲例
                if (err.errCode === 10003) {
                   swan.openSetting({
                        success(res) {
                            // 彈出開啓異常提示toast
                            swan.showToast({
                                title: '請點擊權限設置->地理位置 開啓地理位置權限',
                                icon: 'none'
                            });
                        },
                });
            }
       });
    }
});

這樣用戶在進入界面中,可以收到友好的提示,通過重新開啓權限使用該功能。

場景二:獲取用戶信息及異常處理

在業務開發中,經常會有獲取用戶信息、地址等需求;我們發現有些開發者,依舊在使用以下兩個廢棄的api,這是我們不提倡的。

api
功能
官網地址

swan.chooseAddress

獲取收貨地址 https://smartprogram.baidu.com/docs/develop/api/open/chooseaddress_swan-chooseAddress/
swan.getUserInfo 獲取用戶信息 https://smartprogram.baidu.com/docs/develop/api/open/userinfo_swan-getUserInfo/

官方文檔中提供了一種通過 button 調用的方式,具體使用方式如下:

<!-- index.swan -->
<button type="primary" class="middle-btn" open-type="getUserInfo" bindgetUserInfo="getUserInfo">獲取用戶信息</button>
<button type="primary" class="middle-btn" open-type="openSetting" bindchooseAddress="chooseAddress">獲取用戶地址</button>
// index.js
Page({
    getUserInfo(e) {
        console.log('用戶信息:', e);
    },
    chooseAddress(e) {
        console.log('收貨地址:', e);
    }
});

用button 的方式來調用API有一系列好處:

  • 在獲取信息前,自動進行用戶鑑權處理。
  • 使用方式簡單,更易於維護。

同時,爲了更好的處理調用api的錯誤場景,下方列出了可能會出現的錯誤,以及對應的解決方案:

API errcode errMessage 解決方案
getUserInfo
 
10005 system deny 沒有權限,需申請權限後調用
402 訪問控制校驗失敗 遊客賬號登錄,調用login解決
10001 internal error 小程序服務器異常,可重試一次解決
chooseAddress
 
1003 close failed 執行異常,可重試一次解決
10001 Internal error 小程序不在前臺,禁止調用ui相關api。開發者調用前需要判斷小程序前後臺狀態。
10002 網絡異常  

開發者可以在錯誤回調中,通過錯誤碼來處理不同類別的錯誤。

場景三: 支付及異常處理

在很多的小程序中,需要接入支付功能,官網上提供了百度收銀臺這樣的功能,可以直接接入業務,具體的使用方式見:

https://smartprogram.baidu.com/docs/introduction/pay-intro/

在開發中,我們會使用 swan.requestPolymerPayment 這個 api 來打開百度收銀臺。這個方式有兩個好處:

  • 它聚合了多種主流的支付方式,包括:百度錢包、微信、支付寶、網銀等,方便開發者一站式快速接入多種支付渠道。
  • 就是全流程的支付環節的錯誤都會被收集到,這樣有利於對整理支付閉環的監控。

官網地址見:https://smartprogram.baidu.com/docs/develop/api/open/payment_swan-requestPolymerPayment/

所以,針對於使用了這種方式來實現支付功能的小程序,我們可以獲取更完整的與支付相關的錯誤信息。

以下列出了調用 swan.requestPolymerPayment 會返回的錯誤碼和錯誤信息:

api errorCode errMsg

requestPolymerPayment





 

0 支付成功
1 支付中
2 支付取消
3 支付狀態不支持
4 支付token不合法
5 支付登錄錯誤
6 支付錯誤

開發者可以在錯誤回調中,通過錯誤碼來處理不同類別的錯誤,給予用戶更友好的體驗。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章