Egret:针对微信官方的授权按钮,对游戏中的授权进行处理优化

参考: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、一些效果图如下:

当允许授权之后,那个授权按钮便会被移除

猜你喜欢

转载自blog.csdn.net/u013052238/article/details/81436291