国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

微信小程序用戶授權(quán)、位置授權(quán)及獲取微信綁定手機(jī)號(hào)

2019-11-19 11:10:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.位置授權(quán)

位置授權(quán)相對(duì)簡(jiǎn)單,可以直接調(diào)用方法wx.getLocation()就可以彈出授權(quán)框,

在調(diào)用前需要在app.json中設(shè)置用途說(shuō)明

Page({"permission": { "scope.userLocation": { "desc": "你的位置信息將用于xxx" } }})

授權(quán)框

但是存在不少用戶會(huì)拒絕授權(quán),如果拒絕授權(quán)就不會(huì)再?gòu)棿埃侵苯舆M(jìn)入接口 fail 回調(diào),就要手動(dòng)授權(quán),我們可以通過(guò)自定義彈窗來(lái)誘導(dǎo)用戶授權(quán)。我這里用的是wx.showMoadl確認(rèn)框。

確認(rèn)框

如果確認(rèn)就調(diào)用wx.opensetting調(diào)出授權(quán)設(shè)置頁(yè)面

wx.showModal({   title: '提醒',   content: '您拒絕了位置授權(quán),將無(wú)法使用大部分功能,點(diǎn)擊確定重新獲取授權(quán)',   success(res) {   //如果點(diǎn)擊確定   if (res.confirm) {    wx.openSetting({ //打開設(shè)置頁(yè)    success(res) { //成功,返回頁(yè)面回調(diào)     //如果同意了位置授權(quán)則userLocation=true     if (res.authSetting["scope.userLocation"]) { //授權(quán)中如果有位置授權(quán)則執(zhí)行邏輯     /*你的代碼*/     }    }    })   }   }  })

授權(quán)設(shè)置頁(yè)

完整代碼

wx.getLocation({  success: function(res) {  app.globalData.lat = res.latitude;  app.globalData.lon = res.longitude;  },  fail() {  wx.showModal({   title: '提醒',   content: '您拒絕了位置授權(quán),將無(wú)法使用大部分功能,點(diǎn)擊確定重新獲取授權(quán)',   success(res) {   //如果點(diǎn)擊確定   if (res.confirm) {    wx.openSetting({    success(res) {     //如果同意了位置授權(quán)則userLocation=true     if (res.authSetting["scope.userLocation"]) {     that.onLoad()     }    }    })   }   }  })  } })

2.用戶信息授權(quán)

用戶授權(quán)步驟相對(duì)會(huì)復(fù)雜一點(diǎn),因?yàn)楝F(xiàn)在獲取wx.getUserInfo 接口后續(xù)將不再出現(xiàn)授權(quán)彈窗。需要手動(dòng)點(diǎn)擊去授權(quán),所以也是需要誘導(dǎo)用戶去點(diǎn)擊按鈕。

<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">確認(rèn)</button>

open-type 我用到了兩種

  • getUserInfo 獲取用戶信息,可以從bindgetuserinfo回調(diào)中獲取到用戶信息
  • getPhoneNumber 獲取用戶手機(jī)號(hào),可以從bindgetphonenumber回調(diào)中獲取到用戶信息(下面有)

注意:這里必須是button組件才能觸發(fā)

這里我將他封裝成了一個(gè)模擬的彈出框(樣式丑陋,自己修改),wxss就不發(fā)出來(lái)了

模擬彈出框

<!-- wxml --><view class='getInfo' wx:if="{{haveInfo}}"> <view class='content'> <view class='text'>我們需要獲取您的授權(quán)信息</view> <view class='btn_block'>  <button class='btn1' bindtap='no'>拒絕</button>  <button class='btn2' open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">確認(rèn)</button> </view> </view></view>

調(diào)用bindUserInfo,如果e.detail.userInfo存在,則說(shuō)明授權(quán)成功

bindGetUserInfo(e) { //用戶點(diǎn)擊允許授權(quán) if (e.detail.userInfo) {  //業(yè)務(wù)邏輯 }

授權(quán)成功后即可再調(diào)用wx.getUserInfo(),就可以獲得用戶信息

完整代碼

bindGetUserInfo(e) { //用戶點(diǎn)擊允許授權(quán) if (e.detail.userInfo) {  this.setData({  haveInfo: false  })  // 獲取用戶信息  wx.getSetting({  success: res => {   if (res.authSetting['scope.userInfo']) {   wx.getUserInfo({    success: res => {    app.globalData.userInfo = res.userInfo    //業(yè)務(wù)代碼    }   })   }  }  }) } }

3.獲取用戶手機(jī)授權(quán)

用戶手機(jī)授權(quán)也是需要誘導(dǎo)用戶去點(diǎn)擊按鈕觸發(fā)的授權(quán)框,所以也是要自定義。

和獲取用戶信息的自定義框不同的是按鈕屬性

<button class='btn2' open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">確認(rèn)</button>

bindgetphonenumber函數(shù)調(diào)用成功會(huì)返回三個(gè)值:

其中我用到的是encryptedData、iv,將這兩個(gè)發(fā)給后端去解碼,可以獲得三個(gè)值(寫入數(shù)據(jù)庫(kù)就交給后端了,就不用再多個(gè)步驟)

  • phoneNumber:用戶綁定的手機(jī)號(hào)(國(guó)外手機(jī)號(hào)會(huì)有區(qū)號(hào))
  • purePhoneNumber:沒有區(qū)號(hào)的手機(jī)號(hào)
  • countryCode:區(qū)號(hào)

如果獲取成功才會(huì)返回三個(gè)值,失敗則不會(huì),所以我們判斷是否授權(quán)獲取手機(jī)可以直接用那三個(gè)值判斷

我的代碼↓

//獲取用戶手機(jī) getPhoneNumber(e) { if (e.detail.encryptedData) {  this.setData({  havePhone: false  })  wx.request({  url: app.globalData.url + 'xiao_bindphone',  method: 'POST',  header: {   "Content-Type": "application/x-www-form-urlencoded"  },  data: {   user_id: app.globalData.user_id,   sessionKey: app.globalData.sessionKey,   encryptedData: e.detail.encryptedData,   iv: e.detail.iv  },  success(res) {   //業(yè)務(wù)代碼  }  }) } },

三個(gè)授權(quán)就寫到這啦,下面寫下我的流程和邏輯

――――――――――――――――――――――――――――――――

如果是新用戶進(jìn)入小程序的話,提交code到后端,后端在數(shù)據(jù)庫(kù)創(chuàng)建新的用戶,此時(shí)的新用戶數(shù)據(jù)只有少量數(shù)據(jù)的(如后端自己創(chuàng)建的id),所以我們需要將能獲取到的值傳給后端完善數(shù)據(jù)庫(kù)。

一、判斷數(shù)據(jù)庫(kù)中此用戶是否有頭像和名稱,沒有則需要授權(quán)用戶數(shù)據(jù)(傳頭像和名稱),將得到的頭像和名稱傳到后端完善數(shù)據(jù)庫(kù),此時(shí)需要用到用戶信息的授權(quán),即wx.getUserInfo。

二、判斷數(shù)據(jù)庫(kù)中此用戶是否有手機(jī)號(hào),沒有則調(diào)用獲取手機(jī)號(hào)授權(quán),即getPhoneNumber。

三、關(guān)于位置授權(quán)是項(xiàng)目需要,可調(diào)用wx.getLocation。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 聊城市| 石首市| 中江县| 繁峙县| 曲阜市| 固镇县| 文山县| 琼中| 通山县| 临湘市| 南靖县| 赤水市| 固原市| 大名县| 安平县| 满城县| 沧源| 察隅县| 商丘市| 如皋市| 海门市| 犍为县| 乌拉特前旗| 南康市| 专栏| 杭州市| 永安市| 临武县| 漯河市| 阿坝| 永年县| 文成县| 隆德县| 昭平县| 乐业县| 伊川县| 太仆寺旗| 永川市| 南康市| 梁平县| 惠来县|