小程序授权登录的体验优化

 

小程序授权登录的体验优化
 大多数小程序的登录,都是这样设计的:
图片

进来就提示你需要授权,有部分人可能就会点“拒绝”(拒绝的比例可能超出我们的预估)

然后在后续操作的时候,就进行不下去了。而且小程序会缓存一段时间用户的授权数据,所以又没办法再弹出授权登录的页面,只能删除小程序,重新进来,重新允许授权才行

 
图片
 
我觉得,好的体验方式是:在必须需要用户授权登录的页面或操作(比如支付,创建表单),再提醒用户。如果用户还是点“拒绝”,再弹出确认框提示“必须授权登录之后才能操作呢,是否重新授权登录?”

以《微生成》的“我的钱包”页面为例,这个页面必须要用户登录的

 
//公共的登录方法,只演示逻辑
function login(){
    var that= this
    var sucess = arguments[0] ? arguments[0] : function(){};//登录成功的回调
    var fail = arguments[1] ? arguments[1] : function(){};//登录失败的回调
    var title = arguments[2] ? arguments[2] : '授权登录失败,部分功能将不能使用,是否重新登录?';//当用户取消授权登录时,弹出的确认框文案
 
    var user = wx.getStorageSync('user');//登录过后,用户信息会缓存
    if(!user){
        wx.login({
            success: function (res) {
                var code = res.code;
                wx.getUserInfo({
                    success: function (res) {
                        var rawData = encodeURIComponent(res.rawData);
                        var signature = res.signature || '';
                        var encryptedData = res.encryptedData;
                        var iv = res.iv;
                        that.getLoginApi(code, rawData, signature, encryptedData, iv, function (res) {//调用服务器端登录,获得详细用户资料,比如openid(支付用),保存用户数据到服务器  
                            wx.setStorageSync("user",res)//本地缓存user数据   下次打开不需要登录
                            var app = getApp()
                            app.globalData.user = res//在当前的app对象中缓存user数据
                            sucess(res)
                        })
                    },
                    fail: function (res) {//用户点了“拒绝”
                        wx.showModal({
                            title: '提示',
                            content: title,
                            showCancel: true,
                            cancelText: "否",
                            confirmText: "是",
                            success: function (res) {
                                if (res.confirm) {
                                    if (wx.openSetting) {// 当前微信的版本 ,是否支持openSetting
                                        wx.openSetting({
                                            success: (res) => {
                                                if (res.authSetting["scope.userInfo"]) {//如果用户重新同意了授权登录
                                                    wx.getUserInfo({//跟上面的wx.getUserInfo  sucess处理逻辑一样
                                                        success: function (res) {
                                                            var rawData = encodeURIComponent(res.rawData);
                                                            var signature = res.signature || '';
                                                            var encryptedData = res.encryptedData;
                                                            var iv = res.iv;
                                                            that.getLoginApi(code, rawData, signature, encryptedData, iv, function (res) {
                                                                wx.setStorageSync("user",res)
                                                                var app = getApp()
                                                                app.globalData.user = res
                                                                sucess(res)
                                                            })
                                                        }
                                                    })
                                                } else {//用户还是拒绝
                                                    fail()
                                                }
                                            },
                                            fail: function () {//调用失败,授权登录不成功
                                                fail()
                                            }
                                        })
                                    } else {
                                        fail()
                                    }
                                }
                            }
                        })
                    }
                })
            },
            fail: function (res) {
                fail()
            }
        })
    }else{//如果缓存中已经存在user  那就是已经登录过
        var app = getApp()
        app.globalData.user = user
        sucess(user)
    }
}
 
 

这样的话,当用户进入“我的钱包”页面,就是这样了(如果用户已经登录过,就会直接显示内容):

图片
1.png
图片
2.png
图片
3.png
图片

 

转载于:https://www.cnblogs.com/wwlww/p/8410155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值