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


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 相关文章推荐
JavaScript库 开发规则
Jan 31 Javascript
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
JavaScript数字和字符串转换示例
Mar 26 Javascript
javascript中setTimeout的问题解决方法
May 08 Javascript
Angular.js实现注册系统的实例详解
Dec 18 Javascript
javascript编程实现栈的方法详解【经典数据结构】
Apr 11 Javascript
JS+canvas画一个圆锥实例代码
Dec 13 Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
生产制造追溯系统之在线打印功能
Jun 03 Javascript
JavaScript实现动态留言板
Mar 16 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
星际争霸中的热键
2020/03/04 星际争霸
单位速度在实战中的运用
2020/03/04 星际争霸
PHP函数in_array()使用详解
2014/08/20 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
Unicode和Python的中文处理
2017/03/19 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
新学期校长寄语
2014/01/18 职场文书
七年级生物教学反思
2014/01/30 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python