微信小程式之 簡單的使用者授權系列操作
一、獲取使用者登入狀態 和 獲取使用者資訊
想獲取使用者資訊,需要點選btn按鈕,給button設定屬性open-type="getUserInfo" 和bindgetuserinfo="MygetUserInfo"
<button open-type="getUserInfo" bindgetuserinfo="MygetUserInfo">獲取使用者資訊</button>
獲取使用者資訊之前先獲取登入狀態wx.login,不過登入了微信的話一般登入狀態都是對的,但也有時限,這個看文件吧。
登陸成功後呼叫wx.getUserInfo會彈出授權框,成功後就會返回一個存著使用者頭像名稱等的資訊,還有個加密資訊,加解密還沒看,看了補充
MygetUserInfo: function(){ var _this = this; wx.login({ success: function(res){ /* 獲取使用者資訊的彈框 */ wx.getUserInfo({ /*withCredentials預設值為true,可不填,當設為false時就獲取不到使用者的加密資訊*/ withCredentials: true, success: function(res){ console.log(res); var user = res.userInfo _this.setData({ userInfo: user, hasUserInfo: true }) }, fail:function(res){ console.log(res) } }) } }) }
二、開啟授權設定頁面
方式1.wx.openSetting,給按鈕新增一個點選事件,事件中直接呼叫api,但文件中說即將廢棄,改用方法2
wx.openSetting({
success: res => { console.log(res) }
})
方式2.給button按鈕設定屬性open-type="openSetting" 和 bindopensetting="MyopenSetting",點選按鈕也會彈出授權設定頁面
<button open-type="openSetting" bindopensetting="MyopenSetting">檢視使用者設定介面並修改</button>
MyopenSeting自定義事件裡返回的事件物件res.detail.authSetting儲存著授權狀態,這個事件在設定頁面關閉時觸發
MyopenSetting: function(res){
console.log(res.detail.authSetting)
},
三、返回授權狀態 wx.getsetting
在上面授權設定頁面關閉時也會返回授權狀態,但還包括其他資訊,要一層一層找,這個wx.getsetting直接返回所有觸發過授權彈窗的所有授權狀態
四、主動調出授權框 wx.authorize()
原話是 “開發者可以使用 wx.authorize
在呼叫需授權 API 之前,提前向用戶發起授權請求。”
引數是一個物件,其中scope屬性設定是什麼許可權。scope.record就是錄音授權,其他的看文件吧
wx.authorize({
scope: 'scope.record',
success: res=>{
console.log(res)
}
})
五、錄音授權 和 錄音使用
這個就是定義了 錄音授權、開始錄音、暫停錄音、繼續錄音、停止錄音四個按鈕,然後繫結bindtap自定義事件
要使用錄音需要先獲取全域性唯一的錄音器。我是在onload中定義了一個const recorderManager = wx.getRecorderManager();然後把它setData到了data裡,後面用錄音器就呼叫this.data.recorderManager。但看網上是存到全域性變數裡,難道變數可以不定義在data中嗎?還是說wxml需要這樣{{}}呼叫的資料才必須放到data中?後面我再查檢視,也希望朋友們誰知道的話說一聲,謝啦!
最後要播放錄音,需要先用wx.createInnerAudioContext獲取全域性唯一的播放器。然後在停止錄音後,將生成的音訊地址,傳到播放器.src中,然後play(),onPlay事件處理播放器播放時的資訊。
這裡的播放器我是定義了一個區域性變數,一開始想和錄音器一樣在onload中定義,然後全域性使用的時候,發現有錯誤。(好吧,剛剛又試了一遍,發現只是在開發工具上報錯,在手機上使不報錯的) 因為我定義播放器後,給出錯加了一個列印,InnerAudioContext.onError( res => {console.log(res)}),然後模擬時報錯資訊是
,但其實不管是全域性還是區域性播放器變數都會抱著個錯,只不過我是改成區域性時才在真機上實驗的,可以用,我就以為區域性才可以,現在我又試了下全域性,手機上也可以,不報這個錯。
// 設定錄音授權的授權框
MyLYauthorize: function(){
console.log('錄音授權')
wx.authorize({
scope: 'scope.record',
success: res=>{
console.log(res)
}
})
},
//開始錄音
startRecord: function(){
this.data.recorderManager.start()
this.data.recorderManager.onStart(() => {
console.log('recorder start')
})
},
//暫停錄音和繼續錄音
pauseRecord: function (){
if(this.data.paused){
this.setData({
paused : false,
pauseText: "暫停錄音"
})
this.data.recorderManager.resume()
}else{
this.setData({
paused: true,
pauseText: "繼續錄音"
})
this.data.recorderManager.pause()
}
this.data.recorderManager.onPause(() => {
console.log('recorder pause')
})
},
//停止錄音,此時會返回一個時間物件,裡面存著音訊的src、時間一類的資訊
stopRecord: function (){
this.data.recorderManager.stop()
this.data.recorderManager.onStop((res) => {
console.log('recorder stop')
console.log(res)
var recordFile = res.tempFilePath;
this.setData({
recordFile: recordFile,
})
})
},
//播放錄音,需要先用wx.createInnerAudioContext獲取全域性唯一的播放器。然後在停止錄音後,將生成的音訊地址,傳到播放器.src中,然後play(),onPlay事件處理播放器播放時的資訊
playRecord: function(){
var InnerAudioContext = wx.createInnerAudioContext();
console.log(InnerAudioContext)
InnerAudioContext.onError( res => {
console.log(res)
})
InnerAudioContext.src = this.data.recordFile
InnerAudioContext.play();//在安卓手機上可以播放,但暫停不管用
InnerAudioContext.onPlay(() => {
console.log("播放");
})
},
六、地理位置授權
地理位置授權成功之後,我是又呼叫了開啟地圖檢視位置的api wx.getLocation()。
引數裡的type有兩種:“wga84” 和'gcj02'
使用第一種的話就是用wx.chooseLocation開啟地圖;
使用第二種的話就是用wx.openLocation開啟微信內建地圖。上面那個是什麼地圖我也不清楚,汗。
剛剛在安卓手機上試了下,發現第一種打不開地圖,授權之後沒反應。第二種可以開啟。
MyDLauthorize: function(){
console.log("地理位置授權")
wx.authorize({
scope: 'scope.userLocation',
success: res => {
//開啟地圖檢視位置
wx.getLocation({
type:"wga84",
success: function(res){
// console.log(res)
wx.chooseLocation({
success: res => {
console.log(res)
}
})
}
})
// 開啟微信內建地圖wx.openLocation
wx.getLocation({
type: 'gcj02', //返回可以用於wx.openLocation的經緯度
success: function (res) {
var latitude = res.latitude
var longitude = res.longitude
wx.openLocation({
latitude: latitude,
longitude: longitude,
scale: 28
})
}
})
}
})
},
七、分享功能的開和關
定義了一個開啟分享功能的btn,一個關閉分享功能的btn,還有一個通過點選按鈕分享頁面的btn(這個按鈕是需要用botton屬性open-type的)
<button bindtap="startShare">允許分享</button>
<button bindtap="stopShare">關閉分享</button>
<!-- button屬性plain="false"會鏤空 -->
<button open-type="share" type="primary" data-id="1">分享</button>
然後定義兩個自定義事件,和一個監聽事件(onShareAppMessage監聽事件用來監聽分享的操作。分享方式一個是點選右上角的...,另一種就是用button。監聽事件可以判斷是不是通過點選按鈕分享的,見程式碼)
// 開啟分享
startShare: function(){
wx.showShareMenu({
})
},
// 關閉分享
stopShare: function(){
wx.hideShareMenu({
})
},
// 分享設定
onShareAppMessage: function(res){
if (res.from === 'button') {
// 來自頁面內轉發按鈕
console.log(res.target)
}
return {
title: '測試分享標題',
path: '/pages/home',//換成別的地址也不生效,還是當前地址
imageUrl: '/images/logo_dog3.jpg'
}
}
終於把今天下午的這些東西整理完了。。。洗澡去~