微信小程序部分功能需要使用授权(也就是需要用户显式同意,系统会阻止开发者任何静默获取授权行为),以存储相册为例,用户需要获得"scope.writePhotosAlbum"权限
微信系统接口wx.getSetting可以获取已经获得的权限列表

    wx.getSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {// 已获得存储相册授权}else {// 未获得存储相册授权}}}

在实际开发时,我们有时候并不会去特意处理权限,直接调用接口函数,也是可以成功的

// 不做任何处理,直接调用存储相册
wx.saveImageToPhotosAlbum({...})

系统会在第一次需要存储相册权限时询问用户是否授权

这样做大部分时候也够了,但会有点小瑕疵,如果用户用第一次点了“拒绝”,再调用存储接口永远都不会拉起授权提示了,这时候用户只能通过右上角三个点打开权限设置页,主动给予权限才能顺利执行

网上很多关于处理拒绝授权全流程的文章已经过时了,其中关键是通过wx.authorize拉起授权,现在这个接口是不会成功的


以上两则案例在没有授权时,通过wx.authorize拉起授权无法成功拉起授权,进入fail后只能通过modal对话框拉起设置页

打开设置页是可以避免modal对话框的,如果在按钮的回调函数中直接调用wx.openSetting是可以成功打开设置页的。以上代码增加了wx.authorize回调,在wx.authorize授权失败回调中调用wx.openSetting,系统会判定开发者企图静默提示权限,是不被允许的。所以调用了wx.authorize,反而会导致我们打开wx.openSetting需要经过一个modal对话框过渡。
那么正确的做法应该是:

  1. 已经授权,直接存储;
  2. 没有授权,直接打开设置授权页
    wx.getSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {// 已经获得授权,直接存储that.saveImg();}else {// 没有获得授权,打开设置页wx.openSetting({//...})}}})

等等!打开授权页后发现授权选项是空的

原因很简单,我们没有调用过任何需要授权的接口,小程序也不知道我们需要什么授权(小程序没有配置页设置需要的授权列表),显然设置选项不可能把所有可能的授权都列出来。
问题清楚了以后,完整解决方案如下:

  1. 已授权,直接存储
  2. 未授权(第一次运行),直接存储,让系统一次性提示用户授权
  3. 未授权(用户拒绝),直接打开设置页(授权列表已有授权记录),让用户自行选择授权
download() {this.setData({displayLoading: "inline-flex"})var that = thiswx.getSetting({success(res) {if (res.authSetting['scope.writePhotosAlbum']) {// 已经获得授权,直接存储that.saveImg();}else if (res.authSetting['scope.writePhotosAlbum'] === undefined) {// 第一次运行,授权未定义,可以直接保存,系统会一次性询问用户权限that.saveImg();}else {// 用户拒绝授权后,打开设置页可以看到授权提示开关wx.openSetting({success(res) { // 用户授权if (res.authSetting['scope.writePhotosAlbum']) {that.saveImg();}else { // 用户拒绝授权that.setData({displayLoading: "none"})wx.showToast({title: '权限不足',})}},fail(res) {that.setData({displayLoading: "none"})wx.showToast({title: '设置失败',})}})}},fail(res) {console.log(res)that.setData({displayLoading: "none"})wx.showToast({title: '设置失败',})}})}

微信小程序保存相册授权全过程:第一次授权、已授权、拒绝后再授权相关推荐

  1. 微信小程序保存canvas绘制的图片到本地,拒绝图片授权后继续授权

    authorizeSaveImg() { //重新授权相册const that = this;wx.getSetting({success(res) {// 第一,直接调取保存,系统会自动调取授权if ...

  2. 微信小程序保存视频到相册wx.saveVideoToPhotosAlbum()

    一.微信小程序保存视频到相册wx.saveVideoToPhotosAlbum() 功能描述 保存视频到系统相册.支持mp4视频格式. 参数 Object object 属性 类型 默认值 必填 说明 ...

  3. 微信小程序-从相册获取图片,视频 使用相机拍照,录像上传+服务器(nodejs版)接收

    在本文 微信小程序-从相册获取图片 使用相机拍照 本地图片上传之前需要看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. ...

  4. 微信小程录制视频上传服务器,微信小程序-从相册获取图片,视频使用相机拍照,录像上传+服务器nodejs版接收-微信小程序视频上传功能-微信小程序视频上传...

    在本文微信小程序-从相册获取图片使用相机拍照本地图片上传之前需要看看微信小程序-获取用户session_key,openid,unionid-后端为nodejs代码封装是在上文添加的.本文知识点:1. ...

  5. uniapp开发微信小程序保存文件方案总结

    uniapp开发微信小程序保存文件方案总结 1.需求背景 最近正使用uniapp开发微信小程序项目,现需要保存文件. 解决方案 // 方法如下,filePath:文件地址:uni.authorize( ...

  6. 微信小程序——获取视频的URL地址【已解决】

    微信小程序--获取视频的URL地址[已解决] 如何获取音乐MV的URL地址 虾米音乐 试了很多音乐网站发现"虾米音乐"的MV的URL地址是可以获取的,并且在微信小程序播放视频的时候 ...

  7. 【微信小程序】微信小程序保存二维码海报到相册,以及解决二维码不够清晰的问题

    小程序保存二维码海报 添加 canvas 元素poster <canvas class="poster" canvas-id="poster" style ...

  8. 微信小程序保存网络图片至本地

    小程序保存网络图片时发现保存的是以.bin为后缀的文件,无法正常识别,参考网上的例子重新弄了一下,在此记录 // 保存图片(主要针对授权的几种不同情况判断)saveCard() {let that = ...

  9. 关于微信小程序保存文件的最佳解决方案

    最近在写微信小程序的时候,涉及了用户下载文件到本地的需求.去看了下文档,首先要先通过wx.donwloadFile,将文件下载到本地. 然后我记得有一个saveFile的API,可以进行文件的保存,看 ...

最新文章

  1. 堆叠柱形图上自定义数字_柱形图的类别标签太长太宽,倾斜起来了怎么办?
  2. Michael Brostein 最新几何深度学习综述:超越 WL 和原始消息传递的 GNN
  3. 正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇
  4. linux c 重定向流后的恢复 freopen后的恢复
  5. uml图工具_UML建模工具更新情况(二)
  6. 初识python代码
  7. 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
  8. 【渝粤教育】广东开放大学 文化产业项目案例分析 形成性考核 (51)
  9. 十一、加权线性回归案例:预测鲍鱼的年龄
  10. python字典嵌套列表怎么访问值的某个元素_python – 访问嵌套在字典中的值
  11. linux中dir命令,详解Linux系统中ls和dir命令的组合使用
  12. VS Code 调试 Angular 和 TypeScript 的配置
  13. 1到20的阶乘倒数之和
  14. HPE Gen9 使用 RESTful API 管理服务器
  15. 电脑设置u盘启动方法
  16. [2018国家集训队][UOJ449] 喂鸽子 [dp+组合数学]
  17. 数据挖掘 任务一:预测贷款是否逾期
  18. nowcoder-第三届湖北省赛-Mr.Maxwell and attractions (贪心)
  19. webApp开发-等额本息试算
  20. 【研究日记】虚拟歌姬自动调教之歌曲音频切割的问题

热门文章

  1. python实现QQ第三方登录
  2. html+表格+左侧表头,HTML thead表格表头 标签
  3. 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
  4. 查看计算机.net环境版本,电脑怎么查看.NET Framework版本号?
  5. 纯净正版 WIN10 安装文件官方下载
  6. 从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面
  7. python进行整数计算_零基础学python_05_数字(整数+浮点数)
  8. 20220年春招,秋招必问的1000道Java面试题及答案整理
  9. 流媒体服务器原理和架构解析
  10. android 日历翻页动画,datetimepicker一个不错的日历android特效