提升使用者體驗,微信小程式“授權失敗”場景的優雅處理

JeffMa發表於2017-06-24

原文連結:https://devework.com/weixin-w…,轉載請明鏈的方式給出來源,謝謝!

提升使用者體驗,微信小程式“授權失敗”場景的優雅處理

微信小程式中提供了相關API 讓開發者能獲取到微信使用者的相關資訊,在首次去獲取的時候會展示一個使用者是否同意授權的對話方塊。Jeff 發現有不少線上的小程式都沒有處理好使用者“拒絕授權”導致的“授權失敗”場景。<span></span>

一個觀點

私認為,開發微信小程式在使用者授權上有一個要點:除非非常有必要,不要一進入小程式就申請授權,而是僅需要授權的頁面才申請——這樣讓使用者的心理負擔沒那麼大。站在使用者的角度,有時候我是很討厭這種一進入小程式就申請授權的行為,畢竟頭像暱稱這些本質上還是屬於使用者的隱私,你小程式不給個理由就要拿去,我還是很反感的。同時,也應該做好因使用者拒絕授權導致的“授權失敗”場景的優雅處理。

分享解決方案

現在就分享我在開發自己的微信小程式“DeveWork+”中針對“授權失敗”場景的一種自認為還算優雅的處理方案。如果你有興趣,可以通過下面的小程式碼進入體驗一下其使用者授權流程。

小程式二維碼

“DeveWork+”小程式有一個閱讀記錄頁面,用來記錄當前使用使用者瀏覽文章的歷史。下面是處理方案細節:

1)閱讀記錄頁面我是放在第三個TAB,使用者首次進入及載入首頁的過程並無申請授權的相關程式碼。

2)當使用者首次點選到閱讀記錄頁面,如下圖,除了彈出常規的使用者授權對話方塊,使用者也能看到“閱讀記錄僅儲存在裝置…”這段文字,消除一些忌諱資料被遠端保留的使用者的心理負擔。

微信小程式使用者授權場景優化1

3)使用者點選同意授權固然好,但如果是拒絕授權,會彈出一個提示予以詳細說明授權的必要性(如下圖):

微信小程式使用者授權場景優化2

4)使用者只有點選“確定”的選擇,點選後會跳轉到使用者資訊設定頁面,需要手動勾選(如下圖)。如果此時使用者依然拒絕,後續只要切換到閱讀記錄頁面,均會一直彈上圖的對話方塊。

微信小程式使用者授權場景優化3

具體實現

微信小程式在基礎庫1.2 版本中提供了wx.getSetting 這個介面可以獲取到使用者的當前設定。利用這個介面我們就可以進行二次判斷使用者的授權狀態,如果回撥失敗,則可以彈對話方塊說明並通過wx.openSetting 這個介面進入到設定頁面。

以下是“DeveWork+”的實現程式碼:

1)首先在util.js 中加入一段用來判斷是否為空物件的函式。這個函式在後面wx.getSetting 中可以用來判斷使用者是否是第一次授權。

// https://devework.com/weixin-weapp-auth-failed.html

// 是否為空物件

function isEmptyObject(e) {

    var t;

    for (t in e)

        return !1;

    return !0

}

2)在需要授權的頁面的onload 生命週期中新增常規的獲取使用者資訊程式碼(此程式碼與官方的quickstart 一致,不全部重複)。

// https://devework.com/weixin-weapp-auth-failed.html

var that = this;

        //呼叫應用例項的方法獲取全域性資料

        this.getUserInfo(function (userInfo) {

            //更新使用者資料

            that.setData({

                userInfo: userInfo

            })

        });

3)另外新建一個checkSettingStatu 函式來檢測使用者授權狀態。

// https://devework.com/weixin-weapp-auth-failed.html

// 檢測授權狀態

checkSettingStatu: function(cb) {

        var that = this;

        // 判斷是否是第一次授權,非第一次授權且授權失敗則進行提醒

        wx.getSetting({

            success: function success(res) {

                console.log(res.authSetting);

                var authSetting = res.authSetting;

                if (util.isEmptyObject(authSetting)) {

                    console.log(`首次授權`);

                } else {

                    console.log(`不是第一次授權`, authSetting);

                    // 沒有授權的提醒

                    if (authSetting[`scope.userInfo`] === false) {

                        wx.showModal({

                            title: `使用者未授權`,

                            content: `如需正常使用閱讀記錄功能,請按確定並在授權管理中選中“使用者資訊”,然後點按確定。最後再重新進入小程式即可正常使用。`,

                            showCancel: false,

                            success: function (res) {

                                if (res.confirm) {

                                    console.log(`使用者點選確定`)

                                    wx.openSetting({

                                        success: function success(res) {

                                            console.log(`openSetting success`, res.authSetting);

                                        }

                                    });

                                }

                            }

                        })

                    }

                }

            }

        });

    }    

PS: 如果你覺得這段程式碼層層回撥有點噁心,可自行引入Promise 來改寫程式碼。

4)checkSettingStatu 函式繫結到onShow 生命週期,這樣在“授權失敗”場景下一進入頁面就提醒。

// https://devework.com/weixin-weapp-auth-failed.html

onShow: function(){

        this.checkSettingStatu();

    }

文末

以上就是Jeff 的一個解決方案,本文僅拋磚引玉,如果你覺得有更好的,不妨也告訴我~

本站“微信小程式”系列文章:https://devework.com/tag/weapp

原文連結:https://devework.com/weixin-w…

相關文章