参考:http://forum.cocos.com/t/topic/60231
1、之前的官方微信小游戏,要获得用户微信授权,直接调用wx.getUserInfo函数微信就可以自动判断是否已授权过,如果授权过会直接返回success,如果未授权过则会自动弹出授权窗口。所以在编译后的platform.js文件里对getUserInfo函数修改如下(分别针对用户同意授权和拒绝授权进行处理):
getUserInfo() {
return new Promise((resolve, reject) => {
wx.getUserInfo({
withCredentials: true,
success: res => {
var userInfo = res.userInfo;
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
var gender = userInfo.gender; //性别 0:未知、1:男、2:女
var province = userInfo.province;
var city = userInfo.city;
var country = userInfo.country;
resolve(userInfo);
},
fail: res => {
wx.showModal({
title: '友情提醒',
content: '请允许微信获得授权!',
confirmText: "授权",
showCancel: false,
success: res => {
resolve(null);
}
});
}
});
})
}
2、后来官方微信新增了一个授权按钮,要让用户自己点击按钮来获得授权信息及用户信息,而不是像之前直接通过调用wx.getUserInfo。所以为了兼容之前的版本,以调试基础库2.0.1版本作为分界线进行不同版本处理(2.0.1之后的会添加一个按钮进行监听处理):
getUserInfo() {
return new Promise((resolve, reject) => {
let sysInfo = wx.getSystemInfoSync();
let sdkVersion = sysInfo.SDKVersion;
//sdkVersion = sdkVersion.replace(/\./g, "");
//sdkVersion = sdkVersion.substr(0, 3);
//let sdkVersionNum = parseInt(sdkVersion);
//console.log("platform获取用户授权:", sdkVersionNum);
//if (sdkVersionNum >= 201) {
if (sdkVersion >= "2.0.1") {
var button = wx.createUserInfoButton({
type: 'image',
text: '',
image: "resource/assets_game/main/button_wx_getuserinfo.png",
style: {
left: 0,
top: 0,
width: 0,
height: 0,
backgroundColor: '#ff0000',
color: '#ffffff',
}
});
button.onTap((res) => {
if(res.userInfo){
console.log("用户授权:", res);
var userInfo = res.userInfo;
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
var gender = userInfo.gender; //性别 0:未知、1:男、2:女
var province = userInfo.province;
var city = userInfo.city;
var country = userInfo.country;
button.destroy();
resolve(userInfo);
}else{
console.log("拒绝授权");
}
});
}else {
wx.getUserInfo({
withCredentials: true,
success: res => {
var userInfo = res.userInfo;
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
var gender = userInfo.gender; //性别 0:未知、1:男、2:女
var province = userInfo.province;
var city = userInfo.city;
var country = userInfo.country;
resolve(userInfo);
},
fail: res => {
wx.showModal({
title: '友情提醒',
content: '请允许微信获得授权!',
confirmText: "授权",
showCancel: false,
success: res => {
resolve(null);
}
});
}
});
}
})
}
注:调试基础库版本可以在这里设置:设置菜单->项目设置->调试基础库
3、但是如果我们想用自己游戏项目中的按钮来进行请求授权呢?我们可以再游戏中传递一个按钮(如开始按钮)在游戏中的相对坐标和相对大小给platform.js进行处理。
先在登录界面初始化后直接调用runGame,将4个相关参数传递给getUserInfo函数
在getUserInfo函数里获取微信界面大小,然后将微信小游戏提供的按钮XX设置成和我们的开始游戏按钮相同的比例大小,覆盖在我们的游戏开始按钮上,同时将按钮XX设置成不可见
getUserInfo(xPercent, yPercent, wPercent, hPercent) {
let sysInfo = wx.getSystemInfoSync();
//获取微信界面大小
let width = sysInfo.screenWidth;
let height = sysInfo.screenHeight;
return new Promise((resolve, reject) => {
let sysInfo = wx.getSystemInfoSync();
let sdkVersion = sysInfo.SDKVersion;
//sdkVersion = sdkVersion.replace(/\./g, "");
//sdkVersion = sdkVersion.substr(0, 3);
//let sdkVersionNum = parseInt(sdkVersion);
//console.log("platform获取用户授权:", sdkVersionNum);
//if (sdkVersionNum >= 201) {
if (sdkVersion >= "2.0.1") {
var button = wx.createUserInfoButton({
type: 'text',
text: '',
//image: "resource/assets_game/main/button_wx_getuserinfo.png",
style: {
left: width*xPercent,
top: height*yPercent,
width: width*wPercent,
height: height*hPercent,
//backgroundColor: '#ff0000',
//color: '#ffffff',
}
});
button.onTap((res) => {
if(res.userInfo){
console.log("用户授权:", res);
var userInfo = res.userInfo;
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
var gender = userInfo.gender; //性别 0:未知、1:男、2:女
var province = userInfo.province;
var city = userInfo.city;
var country = userInfo.country;
button.destroy();
resolve(userInfo);
}
});
}else {
wx.getUserInfo({
withCredentials: true,
success: res => {
var userInfo = res.userInfo;
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
var gender = userInfo.gender; //性别 0:未知、1:男、2:女
var province = userInfo.province;
var city = userInfo.city;
var country = userInfo.country;
resolve(userInfo);
},
fail: res => {
wx.showModal({
title: '友情提醒',
content: '请允许微信获得授权!',
confirmText: "授权",
showCancel: false,
success: res => {
resolve(null);
}
});
}
});
}
})
}
4、一些效果图如下:
当允许授权之后,那个授权按钮便会被移除