微信小程序請求設置權限


小程序開發過程中,有些功能需要用戶先授權之后,才能正常使用對應授權功能。當用戶取消授權之后,不能能彈出系統申請權限彈窗,希望能讓用戶重新申請權限彈窗

授權實現效果

  1. 獲取用戶當前授權狀態,看是否已經授權,如果已經授權直接顯示攝像頭
  2. 如果用戶還沒有授權,則調起授權彈框,用戶允許授權則顯示攝像頭
  3. 如果用戶不允許,則提示用戶去設置頁面打開攝像頭權限

授權情況

對於用戶授權的情況,存在以下幾種授權結果:

  1. 如果用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊同意后方可調用接口;
  2. 如果用戶已授權,可以直接調用接口;
  3. 如果用戶已拒絕授權,則不會出現彈窗,而是直接進入接口 fail 回調。

對於授權結果3的情況,由於拒絕后,沒有重新授權彈窗,所以需要授權的功能將不能正常使用,我們需要提示用戶重新打開權限設置界面

授權代碼

(以下代碼申請使用錄音和攝像頭權限)

  // 打開權限設置頁面
  open_permission_setting() {
    wx.showModal({
      title: '申請權限',
      content: '需要使用麥克風和攝像頭功能,請前往設置打開權限',
      success(res) {
        if (res.confirm) {
          console.log('用戶點擊確定')
          wx.openSetting({
            success(res) {
              console.log('成功', res)
            },
            fail(err) {
              console.log('失敗', err)
            }
          })
        } else if (res.cancel) {
          console.log('用戶點擊取消')
        }
      }
    })
  }
  // 檢查權限(需要攝像頭和錄音權限)
  check_has_permission(success?, failure?) {
    const scope_camera = 'scope.camera'
    const scope_record = 'scope.record'
    wx.getSetting({
      success(res) {
        console.log(res)
        var authMap = res.authSetting;
        if (authMap[scope_camera] && authMap[scope_record]) {
          success && success()
        } else {
          failure && failure()
        }
      }
    })
  }
  // 請求權限
  request_permission() {
    return Promise.all([
      new Promise<void>(function (r, j) {
        wx.authorize({
          scope: 'scope.camera',
          success() {
            console.log('相機授權成功');
            r()
          },
          fail(e) {
            console.log('相機授權失敗', e);
            j()
          }
        })
      }),
      new Promise<void>(function (r, j) {
        wx.authorize({
          scope: 'scope.record',
          success() {
            console.log('錄音授權成功');
            r()
          },
          fail(e) {
            console.log('錄音授權失敗', e);
            j()
          }
        })
      }),
    ])
  }

執行申請權限並執行自己的業務邏輯

  this.request_permission().then(() => {
    this.check_has_permission(() => {
      console.log('檢查授權成功')
      // 執行你的業務代碼
    })
    }, () => {
      console.log('檢查授權失敗')
        this.open_permission_setting()
    })
  }

scope授權列表

scope 對應接口 描述
scope.userInfo wx.getUserInfo 用戶信息
scope.userLocation wx.getLocationwx.chooseLocation 地理位置
scope.userLocationBackground wx.startLocationUpdateBackground 后台定位
scope.address wx.chooseAddress 通訊地址(已取消授權,可以直接調用對應接口)
scope.invoiceTitle wx.chooseInvoiceTitle 發票抬頭(已取消授權,可以直接調用對應接口)
scope.invoice wx.chooseInvoice 獲取發票(已取消授權,可以直接調用對應接口)
scope.werun wx.getWeRunData 微信運動步數
scope.record wx.startRecord 錄音功能
scope.writePhotosAlbum wx.saveImageToPhotosAlbumwx.saveVideoToPhotosAlbum 保存到相冊
scope.camera camera 組件 攝像頭

授權截圖

 

點擊拒絕的情況,彈出申請權限modal,點擊確認可打開權限設置界面

 

 

 

@萍2櫻釋ღ( ´・ᴗ・` )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM