微信小程序用户拒绝授权的处理方法详解


Posted in Javascript onSeptember 20, 2019

前言

小程序开发中,现在一般都需要获取微信用户信息,如头像/名字等.这样在用户第一次进入小程序时,微信端会弹出一个是否同意授权的消息提示框.但是如果用户第一时间点击了拒绝,或者用户手误点击了拒绝,如果没有了后续的操作,可能你的小程序就不能使用了,也就会失去这样一位用户.

所以,微信官方推荐了一个方法,就是在用户第一次拒绝授权的时候,再给用户一个选择的机会.这样能很好的解决上诉问题.下面以用户需要授权两个权限为例,方法如下:

在 APP.JS 先设置两个全局变量 .用作记录用户是否授权

//判断地理位置是否请求成功
var locationBool;
//判断用户信息是否请求成功
var userInfoBool;

的 APP({})中

1.获取用户当前位置信息(获取成功后将数据存入缓存,方便后面使用)

//获取地理位置
  wxGetlocation: function() {
    console.log('微信获取地理')
    wx.getLocation({
      type: 'wgs84',
      //请求成功
      success: function(res) {
        locationBool = true;
        wx.setStorage({
          key: 'locationWx',
          data: {
            applatitude: res.latitude,
            applongitude: res.longitude
          }
        })
      },
      fail: function() {
        locationBool = false;
      }
    })
  },

2.获取用户资料信息:

这里需要注意的是:  现在一般开发小程序都需要做服务器登录.由于后端的解密方式的选择问题,后端可以只用用户code 解密,也有可能需要用到 encryptedData/iv 这两个参数拿去后台解密,换取用户token 来做更多的操作. 如需获取encryptedData/iv 这两个参数, 必须在微信wx.login({})之后再去获取 否则这两个参数可能会出现问题

    //获取用户信息(获取之前必须login)
    wxGetUserInfo: function() {
        console.log('微信获取用户信息')
        wx.getUserInfo({
            //请求成功
            withCredentials: true,
            success: function(data) {
                userInfoBool = true;
                wx.setStorage({
                    key: 'UserInfoWx',
                    data: data
                })
            },
            fail: function() {
                userInfoBool = false;
            }
        })
    },
logInWx: function() {
    var _this = this;
    wx.login({
      success: res => {
        console.log('微信登录')
        console.log(res)
        //如果登录成功
        var usercode = res.code; //用户code
        if (res.code) {
          wx.setStorage({
            key: 'usercode',
            data: usercode
          })          
          //请求用户信息设置缓存(获得nickname/avatarurl/gender/iv/encryptedData)
          _this.wxGetUserInfo();
        }
      }
    })
  }

在小程序中,微信提供了这样一个方法wx.openSetting({}) 他可以弹出小程序设置授权的页面.下面即是 用户拒绝授权之后的处理方法.

getPromission: function() {
    var _this = this;
    // 位置信息,用户信息中其中一个数据没有获取到(--->弹出设置界面)
    if (locationBool == false || userInfoBool == false) {
      // 显示提示弹窗(重新授权)
      wx.showModal({
        title: '用户未授权',
        content: '请开启相应的权限哦~',
        showCancel: false,
        success: res => {
          if (res.confirm) {
            //点击取消,重新获取授权
            wx.openSetting({
              success: data => {
                console.log(data)
                if (data) {
                  if (data.authSetting["scope.userInfo"] == true && data.authSetting["scope.userLocation"] == false) {
                    //再次获取用户信息
                    console.log('只获取用户信息')
                    _this.wxGetUserInfo()
                  } else if (data.authSetting["scope.userInfo"] == false && data.authSetting["scope.userLocation"] == true) {
                    //再次获取位置信息
                    _this.wxGetlocation()
                    console.log('只获取位置信息')
                  } else if (data.authSetting["scope.userInfo"] == true && data.authSetting["scope.userLocation"] == true) {
                    //再次获取用户和位置信息
                    _this.wxGetUserInfo()
                    _this.wxGetlocation()
                    console.log('获取全部信息')
                  }
                }
              },
              fail: function() {
                console.info("设置页面失败");
              }
            });
          }
        }
      });
    }
  },

然后在app.js onlaunch中

onLaunch: function(e) {
    var _this = this
    _this.wxGetlocation();
    //微信登录
    //如果没有获取数据成功.
    var timer = setInterval(function() {
      if (locationBool != undefined && userInfoBool != undefined) {
        clearInterval(timer)
        _this.getPromission();
      }
    }, 200)  
  },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery下checked取值问题的解决方法
Aug 09 Javascript
jquery 实现上下滚动效果示例代码
Aug 09 Javascript
获取数组中最大最小值方法js代码(自写)
Aug 12 Javascript
javascript 通用loading动画效果实例代码
Jan 14 Javascript
JavaScript处理解析JSON数据过程详解
Sep 11 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
js 函数式编程学习笔记
Mar 25 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
Jan 26 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
微信小程序实现倒计时功能
Nov 19 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 #Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
Sep 20 #Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 #Javascript
教你如何用Node实现API的转发(某音乐)
Sep 20 #Javascript
使用layui实现树形结构的方法
Sep 20 #Javascript
生成无限制的微信小程序码的示例代码
Sep 20 #Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
Python性能优化技巧
2015/03/09 Python
python 循环while和for in简单实例
2016/08/16 Python
python 上下文管理器使用方法小结
2017/10/10 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
元旦晚会邀请函
2014/02/01 职场文书
入党自我鉴定
2014/03/25 职场文书
应急处置方案
2014/06/16 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Redis中一个String类型引发的惨案
2021/07/25 Redis
一文搞懂Redis中String数据类型
2022/04/03 Redis