国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?

1、權(quán)限接口說明

官方權(quán)限說明
??部分接口需要經(jīng)過用戶授權(quán)統(tǒng)一才能調(diào)用。我們把這些接口按使用范圍分成多個(gè)scope,用戶選擇對(duì)scope進(jìn)行授權(quán),當(dāng)授權(quán)給一個(gè)scope之后,其對(duì)應(yīng)的所有接口都可以直接使用。

此類接口調(diào)用時(shí):

  • 如果用戶未接受或拒絕過此權(quán)限,會(huì)彈窗詢問用戶,用戶點(diǎn)擊同意后方可調(diào)用接口;
  • 如果用戶已授權(quán),可以直接調(diào)用接口;
  • 如果用戶已拒絕授權(quán),則不會(huì)出現(xiàn)彈窗,而是直接進(jìn)入接口 fail 回調(diào)。請(qǐng)開發(fā)者兼容用戶拒絕授權(quán)的場景。

獲取用戶授權(quán)設(shè)置
開發(fā)者可以使用 wx.getSetting 獲取用戶當(dāng)前的授權(quán)狀態(tài)。

打開設(shè)置界面
用戶可以在小程序設(shè)置界面(「右上角」 - 「關(guān)于」 - 「右上角」 - 「設(shè)置」)中控制對(duì)該小程序的授權(quán)狀態(tài)。

開發(fā)者可以調(diào)用 wx.openSetting 打開設(shè)置界面,引導(dǎo)用戶開啟授權(quán)。

提前發(fā)起授權(quán)請(qǐng)求
開發(fā)者可以使用 wx.authorize 在調(diào)用需授權(quán) API 之前,提前向用戶發(fā)起授權(quán)請(qǐng)求。

scope 列表
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)

授權(quán)有效期
一旦用戶明確同意或拒絕過授權(quán),其授權(quán)關(guān)系會(huì)記錄在后臺(tái),直到用戶主動(dòng)刪除小程序。

最佳實(shí)踐
在真正需要使用授權(quán)接口時(shí),才向用戶發(fā)起授權(quán)申請(qǐng),并在授權(quán)申請(qǐng)中說明清楚要使用該功能的理由。

注意事項(xiàng)
wx.authorize({scope: “scope.userInfo”}),不會(huì)彈出授權(quán)窗口,請(qǐng)使用 wx.createUserInfoButton
需要授權(quán) scope.userLocation 時(shí)必須配置地理位置用途說明。

2、具體權(quán)限接口介紹

2.1 wx.authorize()

官方說明 wx.authorize【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)

2.2 wx.openSetting()

官方說明 wx.openSetting()
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)
【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)

3 、權(quán)限申請(qǐng)方式

  • 通過 button 的 open-type 方式來獲取相應(yīng)的權(quán)限及信息。
  • 通過 wx.authorize()和wx.openSetting() 兩個(gè)接口來申請(qǐng)相應(yīng)的權(quán)限。
    特別注意的是:需要授權(quán) scope.userLocation、scope.userLocationBackground 時(shí)必須配置地理位置用途說明

通過button申請(qǐng)權(quán)限

通過button獲取權(quán)限對(duì)于開發(fā)者來說相對(duì)簡單一些,開發(fā)者只需要綁定相應(yīng)的回調(diào)函數(shù)即可,權(quán)限申請(qǐng)的成功和失敗都可以在回調(diào)函數(shù)中處理。
其實(shí)我們可以把通過button申請(qǐng)權(quán)限的方式當(dāng)作普通的信息獲取接口,只不過這個(gè)接口必須通過button組件來調(diào)用而已。

通過wx.authorize()來申請(qǐng)權(quán)限

通過wx.authorize()來申請(qǐng)權(quán)限的方式是比較繁瑣的。因?yàn)樗臓顟B(tài)比較多,大致可分為:

  • 如果用戶未接受或拒絕過此權(quán)限,會(huì)彈窗詢問用戶,用戶點(diǎn)擊同意后方可調(diào)用接口;
  • 如果用戶已授權(quán),可以直接調(diào)用接口;
  • 如果用戶已拒絕授權(quán),則不會(huì)出現(xiàn)彈窗,而是直接進(jìn)入接口 fail 回調(diào)。請(qǐng)開發(fā)者兼容用戶拒絕授權(quán)的場景

針對(duì)這三種狀態(tài),開發(fā)者的處理方式也有所不同。

  • 用戶未接受或拒絕過此權(quán)限,會(huì)彈窗詢問用戶,用戶點(diǎn)擊同意 —— 可調(diào)用相應(yīng)接口。

  • 用戶未接受或拒絕過此權(quán)限,會(huì)彈窗詢問用戶,用戶點(diǎn)擊拒絕 —— 打開設(shè)置頁面。

  • 如果用戶已授權(quán) —— 可調(diào)用相應(yīng)接口。

  • 用戶已拒絕授權(quán) —— 打開設(shè)置頁面。

    上述情況的2/4是需要開發(fā)者結(jié)合 wx.openSetting() 來幫助用戶進(jìn)行二次授權(quán)的。
    就是這個(gè) openSetting 打開設(shè)置頁面的過程讓開發(fā)者比較抓狂。
    2.3.0 版本開始,用戶發(fā)生點(diǎn)擊行為后,才可以跳轉(zhuǎn)打開設(shè)置頁。
    也就是說 openSetting 只能通過 button 組件和點(diǎn)擊(bindtap)的回調(diào)函數(shù)里來調(diào)用。
    然而我們?cè)谏暾?qǐng)權(quán)限的時(shí)候無法保證用戶一定會(huì)在第一次申請(qǐng)的時(shí)候同意,所以一定是需要配合openSetting來使用的。
    那我們?cè)诿總€(gè)調(diào)用openSetting的地方都加一個(gè)button也是很不別扭的。
    當(dāng)下來說我們最好的處理方案就是把wx.authorize()和wx.openSetting()結(jié)合起來使用,并把他們放在一個(gè)bindtap/catchtap(或其他手勢(shì)事件)的回調(diào)函數(shù)里。
    接下來我們重點(diǎn)來整合一下這種方式的權(quán)限處理。
    ?

4、權(quán)限申請(qǐng)整合代碼

4.1 參考工具類代碼

以下是整合的工具類代碼,我們暫時(shí)命名其為 authorizer.js,可直接復(fù)制使用。


const authsName = {
  "scope.userInfo": "用戶信息",// 請(qǐng)用button獲取該信息
  "scope.userLocation": "地理位置",
  "scope.userLocationBackground": "后臺(tái)定位",
  "scope.address": "通訊地址",
  "scope.invoiceTitle": "發(fā)票抬頭",
  "scope.invoice": "獲取發(fā)票",
  "scope.werun": "微信運(yùn)動(dòng)步數(shù)",
  "scope.record": "錄音功能",
  "scope.writePhotosAlbum": "保存到相冊(cè)",
  "scope.camera": "攝像頭",
}


var scope = null;
var success = null;
var fail = null;
var denyBack = null;
var deniedFun = null;

/**
 * 申請(qǐng)某個(gè)權(quán)限
 * _scope 權(quán)限名稱
 * _success 成功回調(diào)
 * _fail 失敗回調(diào)
 * _denyBack 申請(qǐng)權(quán)限時(shí)用戶 拒絕 后的回調(diào)
 * _deniedFun 之前申請(qǐng)過該權(quán)限但被拒絕了,該情況下調(diào)用此函數(shù)
 */
function authorize(_scope, _success, _fail, _denyBack, _deniedFun) {

  resetData();

  scope = _scope;
  success = _success;
  fail = _fail;
  denyBack = _denyBack;
  deniedFun = _deniedFun;

  if (!scope) {
    return;
  }

  // 判斷權(quán)限狀態(tài)
  wx.getSetting({

    success: function(res) {

      let currentScope = res.authSetting[scope];

      if (currentScope == undefined || currentScope == null) {

        // 之前沒有申請(qǐng)或該權(quán)限
        wx.authorize({
          scope: scope,
          success: function(res) {

            authSuccess(res);
          },

          fail: function(err) {

            authDeny();
          }
        });

      } else if (currentScope == false) {

        // 之前申請(qǐng)過該權(quán)限但被拒絕了, 如果配置 deniedFun 函數(shù),則有執(zhí)行 deniedFun 方法,
        // 由調(diào)用者決定改中情況下如何處理。
        if (authDenied()) {
          return;
        }

        // 如果沒有配置 deniedFun 函數(shù),走默認(rèn)邏輯,打開設(shè)置界面
        wx.showModal({
          title: '權(quán)限申請(qǐng)',
          content: '點(diǎn)擊 “確定” 按鈕,打開 “' + authsName[scope] + '” 的權(quán)限設(shè)置界面',
          cancelText: '取消',
          confirmText: '確定',
          success(res) {
            if (res.confirm) {

              wx.openSetting({
                success: function(res) {

                  let cScope = res.authSetting[scope];
                  if (cScope) {

                    authSuccess();
                  } else {

                    authFail();
                  }
                },

                fail: function(res) {

                  authFail();
                }
              });
            }
          }
        });

      } else {

        // 已經(jīng)獲得該權(quán)限
        authSuccess();
      }
    },

    fail: function() {

      authFail();
    }
  });
}



/**
 * 權(quán)限申請(qǐng)成功
 */
function authSuccess(res) {

  if (success && typeof success == 'function') {
    success(res);
  }

  resetData();
}

/**
 * 權(quán)限申請(qǐng)失敗
 */
function authFail() {

  if (fail && typeof fail == 'function') {
    fail();
  }

  resetData();
}

/**
 * 拒絕使用該權(quán)限
 */
function authDeny() {

  if (denyBack && typeof denyBack == 'function') {
    denyBack();
  }

  resetData();
}


/**
 * 之前申請(qǐng)過該權(quán)限但被拒絕了
 */
function authDenied() {

  if (deniedFun && typeof deniedFun == 'function') {
    deniedFun();
    resetData();
    return true;
  } else {
    return false;
  }
}

/**
 * 重置參數(shù)
 */
function resetData() {

  scope = null;
  success = null;
  fail = null;
  denyBack = null;
  deniedFun = null;
}


module.exports = {
  authorize: authorize,
}

工具類的使用
wxml代碼:

 <view bindtap="authApply">權(quán)限申請(qǐng)</view>

js代碼:

/**
 * 權(quán)限申請(qǐng)--微信步數(shù)
 */
authApply(e) {
  authorizer.authorize("scope.werun", function(res) {
    console.log('success', res);
    wx.getWeRunData({success: function(res){
      console.log('WeRunData', res)
    }});
  }, function(err) {
    console.log('denyback', err);
  }, function(err) {
    console.log('deniedBack', err);
  });
},

4.2 實(shí)際代碼實(shí)現(xiàn)

data:{
authScope:"scope.werun",//要申請(qǐng)的權(quán)限
    },
  /**
   * 申請(qǐng)權(quán)限
   * _scope 權(quán)限名稱
   * _authSuccess 成功回調(diào)
   * _authFail 失敗回調(diào)
   * _authDeny 申請(qǐng)權(quán)限時(shí)用戶 拒絕 后的回調(diào)
   * _authDenied 之前申請(qǐng)過該權(quán)限但被拒絕了,該情況下調(diào)用此函數(shù)
   */

 //授權(quán)成功
  authSuccess(){
      let that = this
      console.log("授權(quán)成功")
      that.setData({
          hasWerun:true
      })
      that.getUserRun()
  },

  //授權(quán)失敗
  authFail(){
      console.log("授權(quán)失敗")
      wx.showToast({
          title: '授權(quán)失敗',
          icon: 'none',
          duration: 1000
      })
  },
  //拒絕授權(quán)
authDeny(){
      console.log("authorize調(diào)用失敗,引導(dǎo)重新吊起")
      wx.showToast({
          title: '您未授權(quán)微信運(yùn)動(dòng) 請(qǐng)點(diǎn)擊右上角設(shè)置 進(jìn)入列表手動(dòng)授權(quán)',
          icon: 'none',
          duration: 3000
      })
  }, 
  //已被拒絕授權(quán)過的權(quán)限,重新吊起
authDenied(){
      console.log("currentScope == false 已被拒絕授權(quán)過的權(quán)限,引導(dǎo)重新吊起")
      wx.showToast({
          title: '您未授權(quán)微信運(yùn)動(dòng) 請(qǐng)點(diǎn)擊右上角設(shè)置 進(jìn)入列表重新授權(quán)',
          icon: 'none',
          duration: 3000
      })
  },

  authApply:function(){
      let that = this
      let scope = that.data.authScope
      if (!scope) {
        return;
      }
      // 判斷權(quán)限狀態(tài)
      wx.getSetting({
        success: function(res) {
          console.log("當(dāng)前權(quán)限列表")
          console.log(res)
          let currentScope = res.authSetting[scope];
          if (currentScope == undefined || currentScope == null) {
            // 之前沒有申請(qǐng)或該權(quán)限
            console.log("之前沒有申請(qǐng)或該權(quán)限")
            wx.authorize({
              scope: scope,
              success: function() {
                that.authSuccess();
              },
              fail: function(err) {
                that.authDeny();
              }
            });
          } else if (currentScope == false) {
            // 之前申請(qǐng)過該權(quán)限但被拒絕了
              that.authDenied()
              return;
          } else {
            // 已經(jīng)獲得該權(quán)限
            that.authSuccess();
          }
        },
        fail: function() {
          that.authFail();
        }
      });
  },
  //設(shè)置按鈕綁定權(quán)限列表  
  getOpenSetting: function () {
      let that = this
      wx.openSetting({
      success(res) {
          if (res.authSetting[that.data.authScope]) {
          // 用戶在設(shè)置頁面開啟權(quán)限后,重新授權(quán)成功
          // 可以調(diào)用相應(yīng)的 API 接口
          that.setData({
              hasWerun:true
          })
          console.log("openSetting已獲取到授權(quán)")
          that.authSuccess()
          } else {
          // 用戶在設(shè)置頁面未開啟權(quán)限,授權(quán)失敗
          that.authFail()
          }
      },
      fail() {
          console.log("openSetting拉起失敗")
          // 調(diào)用 wx.openSetting 接口失敗
          that.authFail()
      }
      })
  }, 

wxml

 <text class="info-text" bindtap="getOpenSetting">權(quán)限</text>

總結(jié)

微信小程序的權(quán)限申請(qǐng)有兩種方式;
分析了一下wx.authorize這種方式發(fā)生的幾種情況以及相應(yīng)的處理;
整理了一份wx.authorize使用的通用方法,且此方法須在某個(gè)手勢(shì)事件的回調(diào)函數(shù)中。文章來源地址http://www.zghlxwxcb.cn/news/detail-442415.html

到了這里,關(guān)于【微信小程序】 權(quán)限接口梳理以及代碼實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序WebSocket接口以及在小程序中的使用。

    示例: 這里要注意url中的接口不是http://.xxx或者h(yuǎn)ttps://.xxx開頭的,而是以ws://xxx.com或者wss://.xxx開頭的,要不然就會(huì)連接失敗 他們是監(jiān)聽監(jiān)聽wx.connectSocket的連接成功與否的 代碼如下(示例): 這里是接收服務(wù)器的消息的(也就是聊天時(shí)對(duì)面發(fā)來的消息) 代碼如下(示例):

    2024年02月09日
    瀏覽(27)
  • 微信小程序UV、PV量解釋以及接口調(diào)用頻率

    微信小程序UV、PV量解釋以及接口調(diào)用頻率

    微信小程序UV、PV量 瀏覽量(PV): 即通常說的Page View(PV),用戶每打開一個(gè)網(wǎng)站頁面就被記錄1次。用戶多次打開同一頁面,瀏覽量值累計(jì)。 微信小程序中PV是打開小程序的打開次數(shù)。 訪客數(shù)(UV): 一天之內(nèi)網(wǎng)站的獨(dú)立訪客數(shù)(以Cookie為依據(jù)),一天內(nèi)同一訪客多次訪問網(wǎng)站只計(jì)算

    2024年02月16日
    瀏覽(21)
  • Java 微信小程序-發(fā)貨信息錄入接口 對(duì)接代碼

    Java 微信小程序-發(fā)貨信息錄入接口 對(duì)接代碼

    微信小程序-發(fā)貨信息錄入接口開發(fā)文檔 POST https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=ACCESS_TOKEN 參見「查詢物流公司編碼列表」對(duì)接代碼

    2024年02月03日
    瀏覽(32)
  • uniapp微信小程序?qū)崿F(xiàn)不同賬號(hào)權(quán)限顯示不同tabbar

    uniapp微信小程序?qū)崿F(xiàn)不同賬號(hào)權(quán)限顯示不同tabbar

    一套小程序可能會(huì)有多個(gè)用戶角色,比如在線課堂類小程序,會(huì)有老師和學(xué)生,但是兩者能看到的內(nèi)容應(yīng)該是不一樣的。 舍棄uniapp原生的tabbar,使用uView插件下的u-tabbar導(dǎo)航插件來實(shí)現(xiàn)。 uView的官網(wǎng)如下,里面有詳細(xì)的教程,而且在uniapp插件市場也能找到,使用起來也是非常

    2024年02月16日
    瀏覽(90)
  • 微信小程序調(diào)用本地http接口設(shè)置以及django 遇到的csrf 403錯(cuò)誤解決方法

    微信小程序調(diào)用本地http接口設(shè)置以及django 遇到的csrf 403錯(cuò)誤解決方法

    1) 如果微信小程序需要和本地localhost端口進(jìn)行通信聯(lián)調(diào)。首先需要設(shè)置微信小程序?yàn)?”不校驗(yàn)合法域名…“設(shè)置,這樣就可以跳過域名安全檢測,不然會(huì)出現(xiàn)網(wǎng)站不在安全名單內(nèi): 2)此時(shí)調(diào)用之后,后端會(huì)出現(xiàn)如下錯(cuò)誤: 這是因?yàn)椋涸谖⑿判〕绦蚨藢?duì)Django后臺(tái)進(jìn)行POST請(qǐng)求

    2024年02月07日
    瀏覽(29)
  • 微信小程序-獲取用戶信息【梳理歷史】

    微信小程序-獲取用戶信息【梳理歷史】

    有一個(gè)迭代的過程,時(shí)間很近 大概分為4個(gè)內(nèi)容 1.2021年4月15日? 簡述:回收了一個(gè)接口,新增了一個(gè)接口 小程序登錄、用戶信息相關(guān)接口調(diào)整說明 | 微信開放社區(qū) (qq.com) 通過wx.login接口獲取的登錄憑證可直接換取unionID 回收wx.getUserInfo接口可獲取用戶個(gè)人信息能力 新增getUse

    2024年02月11日
    瀏覽(18)
  • H5套殼微信小程序跳轉(zhuǎn)H5以及配置服務(wù)器接口域名和業(yè)務(wù)域名

    H5套殼微信小程序跳轉(zhuǎn)H5以及配置服務(wù)器接口域名和業(yè)務(wù)域名

    一、H5套殼微信小程序跳轉(zhuǎn)H5 基本語法: web-view src=\\\"https://你的域名\\\"/web-view 1. 其中,url必須在管理后臺(tái)加進(jìn)業(yè)務(wù)域名,并且是https開頭的。 使用了web-view,頁面將不能放置其他元素,因?yàn)閣eb-view會(huì)鋪滿整個(gè)頁面 電腦端調(diào)試,需要在開發(fā)者工具的項(xiàng)目設(shè)置里把基礎(chǔ)庫版本改為最

    2024年02月07日
    瀏覽(31)
  • 微信小程序?qū)崿F(xiàn)分享里調(diào)用接口

    微信小程序?qū)崿F(xiàn)分享里調(diào)用接口

    在開發(fā)微信小程序的時(shí)候,有一個(gè)需求,在點(diǎn)擊分享按鈕的時(shí)候,調(diào)用后臺(tái)的接口,來獲取一個(gè)分享的值,在分享的時(shí)候在分享鏈接里拼這個(gè)值。 初始的想法 在onShareAppMessage里使用promise 在這里去請(qǐng)求接口,但隨后就遇到了問題,在用戶未登錄的情況下點(diǎn)擊分享按鈕,會(huì)跳轉(zhuǎn)

    2024年02月11日
    瀏覽(24)
  • 【接口測試】微信小程序接口自動(dòng)化的實(shí)現(xiàn)方案

    【接口測試】微信小程序接口自動(dòng)化的實(shí)現(xiàn)方案

    前幾天看到有人問微信小程序怎么進(jìn)行接口自動(dòng)化,所以想把自己如何進(jìn)行微信小程序接口自動(dòng)化的方法分享下。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html這是微信小程序的登陸流程,小程序登陸需要在小程序內(nèi)部調(diào)用 wx.login() 的方法拿到 code,然后去請(qǐng)

    2024年02月09日
    瀏覽(23)
  • Java實(shí)現(xiàn)微信小程序相關(guān)接口

    訂閱通知 獲取用戶openid 獲取用戶手機(jī)號(hào) 微信支付 PayVo類 getFee方法 WXPayUtil類 支付成功回調(diào)接口 微信退款 MD5Util類 PayConfig類 WxPayConstant類

    2024年02月12日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包