找麻烦之:一次授权点拒绝,二次授权重新打开授权界面与用户信息授权

前言

本博客记录了笔者在学习微信小程序时用到的俩种授权,分享记录一下,有需要的可以看看,如有错误多多包涵~
在这里插入图片描述

授权

文档介绍
在这里插入图片描述

在这里插入图片描述

一 获取用户信息授权(昵称,头像,地区,性别)

在用微信小程序时我们经常会需要得到用户的信息
在这里插入图片描述
可以写个按钮。绑定点击方法,点击就出现上面的授权界面
在这里插入图片描述

 <button type="primary" open-type="getUserInfo" bind:getuserinfo="onGetUserInfoTap">授权</button>

open-type=“getUserInfo” 按钮点击出现授权框,
bind:getuserinfo绑定方法做下一步处理

在这里插入图片描述
在这里插入图片描述
在js中写的绑定方法onGetUserInfoTap:

 //绑定的授权事件 
  onGetUserInfoTap:function(event){
    //用户信息userInfo
    const userInfo =event.detail.userInfo;
    //判断是否有用户信息
    if(userInfo){
      //调用在app.js中写的把用户信息写入本地存储的方法
      app.setUserInfo(userInfo);
      //弹出对话框
      wx.showToast({
        title:"恭喜!授权成功!"
      });
      //设置1.5秒后返回上个界面
      setTimeout(()=>{
        wx.navigateBack({});
      },1500)
    }else{
      //当你第一次没有授权时
      //弹出对话框
      wx.showToast({
        title:"您拒绝了授权!"
      });
      //设置1.5秒后返回上个界面
      setTimeout(()=>{
        wx.navigateBack({});
      },1500)

    }

中间调用的app.js的方法:

//得到的用户信息写入用户数据集合空数组globalData中
  setUserInfo:function(userInfo){
     this.globalData.userInfo=userInfo

  }

调用的app.js只需要在js中:

const app= getApp();

在小程序的app.js中的onLaunch中定义一个空数组来存储用户信息

//存储用户信息
   this.globalData={}

onlaunch:

/**
   * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
   */

这样就写好了一个从授权到得到授权信息,并且把他保存到本地中,但我们每次打开都得重新授权,于是笔者写了个方法,从本地数据中得到之前保存过的授权,这样就不用重新授权(除非卸了微信小程序才用)
在这里插入图片描述

在app.js中写方法并在onlaunch中调用:

//用户授权信息是否有保存
  loadUserInfo:function(){
    const that =this;
    //getSetting获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
    wx.getSetting({
      success:res=>{
     const isUserInfo=res.authSetting['scope.userInfo'];
     //得到用户信息isUserInfo
     if(isUserInfo){
       wx.getUserInfo({
         success: function(res){
           const userInfo=res.userInfo;
           //保存到globalData
         that.globalData.userInfo=userInfo;
         }
       });
     }
      }
    });
  }

在这里插入图片描述
在这里插入图片描述
这样基本的授权就解决了。

二。获取地理信息授权

先上图
在这里插入图片描述
在这里插入图片描述
showModal弹出对话框:
confirm为true用户点击了确定,cancel反之

wx.showModal({
  title: '提示',
  content: '这是一个模态弹窗',
  success (res) {
    if (res.confirm) {
      console.log('用户点击确定')
    } else if (res.cancel) {
      console.log('用户点击取消')
    }
  }
})
注意

在这里插入图片描述

在这里插入图片描述

openSetting弹出的设置框:
在这里插入图片描述
在这里插入图片描述
重点
重点
重点

**

第一次授权时拒绝,第二次授权重新打开授权界面*

解决方法:
showModalopenSetting
用来弹出一个对话框询问是否重新授权打开授权设置界面
例子:下面

*重点完
重点完
重点完

在调用地理信息时需要在app.json中加入,以提示用户:


  "permission":{
    "scope.userLocation":{
      "desc":"你的位置将用于微博的提示"
    }
  }

在wxml中绑定方法onLocationTap:

<view class="location-group" bind:tap="onLocationTap">

js中,
getSetting来判断是否用户授权了,
有就调用 that.openLocatinPage();
如果没有,发起授权:

 wx.authorize({
         scope:"scope.userLocation",
         success:res=>{
          that.openLocatinPage();
         }

但是如果第一次授权时拒绝,第二次打开无反应就进入了fail:
这时候我们就要调用弹出对话框showModalopenSetting:

        //showModal弹出对话框
         wx.showModal({
           title:"提示",
           content: '若点击不授权,将无法使用地图位置功能',
           cancelText:'不授权',
           cancelColor:'#999',
           confirmText:'授权',
           confirmColor:'#f94218',
           success(res) {           
            if (res.confirm) {
           //   打开授权设置
              wx.openSetting({
                success(res) {
                  console.log(res.authSetting)
                }
              })                   
              console.log('用户点击授权')   
            } else if (res.cancel) {
              console.log('用户点击取消')
            }
          }

         });

完整的:

  //点击方法onLocationTap
  onLocationTap:function(event){
    const that=this;
    //getSetting获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
   wx.getSetting({
     success:res=>{
     //authSetting用户授权结果  
       const isLocation=res.authSetting['scope.userLocation'];
       if(isLocation){
          that.openLocatinPage();
        
       }else{
         //authorize向用户发起授权请求
       wx.authorize({
         scope:"scope.userLocation",
         success:res=>{
          that.openLocatinPage();
         },
         fail:res=>{
           //showModal弹出对话框
         wx.showModal({
           title:"提示",
           content: '若点击不授权,将无法使用地图位置功能',
           cancelText:'不授权',
           cancelColor:'#999',
           confirmText:'授权',
           confirmColor:'#f94218',
           success(res) {           
            if (res.confirm) {
           //   打开授权设置
              wx.openSetting({
                success(res) {
                  console.log(res.authSetting)
                }
              })                   
              console.log('用户点击授权')   
            } else if (res.cancel) {
              console.log('用户点击取消')
            }
          }

         });
        
         }
       })
       }
     }
   })
  }

授权成功时打开选择地图的方法:

openLocatinPage:function(){
    const that=this;
    //chooseLocation打开地图选择位置。
    wx.chooseLocation({
      success: function(res){
        delete res['errMsg'];
        that.setData({
          location:res
        })
      }
    
    });     
  }

以上就是本博客的所有内容。
谢谢观看,!!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

阡陌路人

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值