飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

微信小程序开发之授权权限管理

Author:飘易 Source:飘易
Categories:微信开发 PostTime:2019-9-23 15:34:22
正 文:

微信小程序的部分接口需要经过用户授权同意才能调用。我们把这些接口按使用范围分成多个 scope ,用户选择对 scope 来进行授权,当授权给一个 scope 之后,其对应的所有接口都可以直接使用。


此类接口调用时

  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;

  • 如果用户已授权,可以直接调用接口;

  • 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。


获取用户授权设置

开发者可以使用 wx.getSetting 获取用户当前的授权状态。


打开设置界面

用户可以在小程序设置界面(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态。

开发者可以调用 wx.openSetting 打开设置界面,引导用户开启授权。


提前发起授权请求

开发者可以使用 wx.authorize 在调用需授权 API 之前,提前向用户发起授权请求。


scope 列表

scope对应接口描述
scope.userInfowx.getUserInfo用户信息
scope.userLocationwx.getLocationwx.chooseLocation地理位置
scope.userLocationBackgroundwx.startLocationUpdateBackground后台定位
scope.addresswx.chooseAddress通讯地址
scope.invoiceTitlewx.chooseInvoiceTitle发票抬头
scope.invoicewx.chooseInvoice获取发票
scope.werunwx.getWeRunData微信运动步数
scope.recordwx.startRecord录音功能
scope.writePhotosAlbumwx.saveImageToPhotosAlbumwx.saveVideoToPhotosAlbum保存到相册
scope.cameracamera 组件摄像头


授权有效期

一旦用户明确同意或拒绝过授权,其授权关系会记录在后台,直到用户主动删除小程序。


最佳实践

在真正需要使用授权接口时,才向用户发起授权申请,并在授权申请中说明清楚要使用该功能的理由。

注意事项

  • wx.authorize({scope: "scope.userInfo"}),不会弹出授权窗口,请使用 <button open-type="getUserInfo"/>

  • 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。在全局的app.json文件里配置permission:

{
  "pages": ["pages/index/index"],
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示" // 高速公路行驶持续后台定位
    }
  }
}


后台定位

与其它类型授权不同的是,scope.userLocationBackground 不会弹窗提醒用户。需要用户在设置页中,主动将“位置信息”选项设置为“使用小程序期间和离开小程序后”。开发者可以通过调用wx.openSetting,打开设置页。


封装公共的授权方法

飘易封装了一下获取授权的方法,可以供开发者在需要的地方方便地调用授权:

/*
  * 检查权限
  * scope: 权限字符串,如 scope.writePhotosAlbum
  * msg: 提示字符串,如 保存到系统相册需要授权
  * callback: 回调函数
  */    
 checkScope: function (scope, msg, callback) {
     //查询权限
     wx.showLoading({
         title: '检查授权情况',
         mask: true
     })
     wx.getSetting({
         success(res) {
             wx.hideLoading();
             if (!res.authSetting[scope]) {
                 // 请求授权
                 wx.authorize({
                     scope: scope,
                     success() {
                         // 获得授权
                         typeof callback === 'function' && callback();
                     },
                     fail() {
                         wx.showModal({
                             content: msg,//'保存到系统相册需要授权',
                             confirmText: '授权',
                             showCancel: false,
                             success(res) {
                                 if (res.confirm) {
                                     wx.openSetting({
                                         success(res) {
                                             if (res.authSetting[scope] === true) {
                                                 typeof callback === 'function' && callback();
                                             }
                                         }
                                     })
                                 }
                             },
                             fail() {
                                 wx.showToast({
                                     title: '打开设置页失败',
                                     icon: 'none',
                                 })
                             }
                         })
                     }
                 })
             } else {
                 //已有授权
                 typeof callback === 'function' && callback();
             }
         },
         fail() {
             wx.hideLoading();
             wx.showToast({
                 title: '获取授权失败',
                 icon: 'none',
             })
         }
     })
 },

注意:getUserInfo 和 userLocationBackground 需要特殊的处理。



【参考】:

* 小程序授权文档

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:微信小程序开发之webview实战
0条评论 “微信小程序开发之授权权限管理”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有