欧美日韩中文一区二区,亚洲天堂av在线,亚洲最大成人免费视频,欧美最新精品

微信小程序開發(fā)用戶信息獲取和授權代碼教程

我們在使用微信小程序開發(fā)工具的時候,我們需要先創(chuàng)建一個項目,看微信官網給我們自動生成的代碼。

首先我們看一下app.js代碼:

App({

onLaunch: function () {

// 展示本地存儲能力

var logs = wx.getStorageSync(‘logs’) || []

logs.unshift(Date.now())

wx.setStorageSync(‘logs’, logs)

// 登錄

wx.login({

success: res => {

// 發(fā)送 res.code 到后臺換取 openId, sessionKey, unionId

}

})

// 獲取用戶信息

wx.getSetting({

success: res => {

if (res.authSetting[‘scope.userInfo’]) {

// 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框

wx.getUserInfo({

success: res => {

// 可以將 res 發(fā)送給后臺解碼出 unionId

this.globalData.userInfo = res.userInfo

// 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回

// 所以此處加入 callback 以防止這種情況

if (this.userInfoReadyCallback) {

this.userInfoReadyCallback(res)

}

},

fail:res=>{

wx.showToast({

title: ‘getUserInfo failed’,

icon: ‘none’,

duration: 2000

})

}

})

}else{

wx.showToast({

title: ‘沒有授權’,

icon: ‘success’,

duration: 2000

})

}

}

})

},

globalData: {

userInfo: null

}

})

上面的代碼共發(fā)三部分,分別是本地存儲能力展示,微信登錄展示和用戶信息獲取功能展示。由上可知通過wx.login方法得到res.code,然后將其發(fā)到后臺調用微信接口可以獲取openid等信息。

wx.getSetting方法

該方法是獲取用戶設置信息,通過此方法得到用戶對當前程序的授權設置情況,如是否有獲取頭像權限。

用戶權限配置檢查

if (res.authSetting[‘scope.userInfo’])

這個意思是用戶是否設置了用戶授權,如果沒有,我們會彈出一個 “沒有授權”提示。如果已經授權了,我們就使用wx.getUserInfo方法獲取資料。注意的是,因為這個方法是訪問網絡遠程的數據,因為在訪問等待結果之前,可能我們的默認頁面(小程序第一個頁面也是就我們常說的首頁)已經加載完了。那么怎么判斷我們的頁面加載早于這個方法的結果返回之前呢?這里有一個巧妙的方法。我們先看一下index頁面的js文件內容:

//index.js

//獲取應用實例

const app = getApp()

Page({

data: {

motto: ‘Hello World’,

userInfo: {},

hasUserInfo: false,

canIUse: wx.canIUse(‘button.open-type.getUserInfo’)

},

//事件處理函數

bindViewTap: function() {

wx.navigateTo({

url: ‘../logs/logs’

})

},

onLoad: function () {

console.log(‘page onload’);

if (app.globalData.userInfo) {

console.log(‘set data’);

this.setData({

userInfo: app.globalData.userInfo,

hasUserInfo: true

})

} else if (this.data.canIUse){

console.log(‘canIUse’);

// 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回

// 所以此處加入 callback 以防止這種情況

app.userInfoReadyCallback = res => {

console.log(‘get call back’);

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

} else {

console.log(‘兼容處理’);

// 在沒有 open-type=getUserInfo 版本的兼容處理

wx.getUserInfo({

success: res => {

console.log(‘get user info success’)

app.globalData.userInfo = res.userInfo

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

})

}

},

getUserInfo: function(e) {

console.log(‘do get user info’+e);

if(e){

app.globalData.userInfo = e.detail.userInfo

this.setData({

userInfo: e.detail.userInfo,

hasUserInfo: true

})

}else{

console.log(‘用戶選擇了拒絕’);

}

}

})

上面代碼,我們重點看onLoad這個方法里,這里做了三個判斷,第一種情況判斷app.globalData.userInfo是否有值 ,如果有那就直接給頁面的數據賦值。

第二種情況判斷當前微信是否支持button.open-type.getUserInfo這個版本屬性,如果有,那么重點來了:我們給app頁面增加一個方法userInfoReadyCallback,這個方法作用就是接收wx.getUserInfo的結果,然后賦值給index頁面中的數據。


聲明:本站部分文章來源于互聯網,如有侵犯作者著作權,請及時與我們聯系。

木魚小鋪小程序

為您推薦

主站蜘蛛池模板: 卢氏县| 巧家县| 澄江县| 宿迁市| 邵阳市| 米脂县| 延吉市| 连江县| 安庆市| 额尔古纳市| 屏边| 呼和浩特市| 监利县| 台州市| 沙雅县| 普兰店市| 白水县| 蒙城县| 凤庆县| 奇台县| 凌源市| 金湖县| 宁明县| 宁晋县| 阿拉善盟| 镇赉县| 家居| 泰安市| 十堰市| 翁牛特旗| 安徽省| 衡水市| 彰化县| 搜索| 自贡市| 乐山市| 通辽市| 宜宾县| 达拉特旗| 新丰县| 永安市|