Cocos Creator微信获得用户授权的wx.createUserInfoButton的用法和自己的改进方法

首先是官方的例子
wx.createUserInfoButton

可以看到官方给出的例子如下

const button = wx.createUserInfoButton({
  type: 'text',
  text: '获取用户信息',
  style: {
    left: 10,
    top: 76,
    width: 200,
    height: 40,
    lineHeight: 40,
    backgroundColor: '#ff0000',
    color: '#ffffff',
    textAlign: 'center',
    fontSize: 16,
    borderRadius: 4
  }
})
button.onTap((res) => {
  console.log(res)
})

实际上,虽然给出了这个按钮的属性,但是对于一些小白来说还是不懂得如何使用,比如说这个按钮的位置的放置,所以我将上述代码进行了一些调整

      createLoginButton() {
        if (typeof (wx) != 'undefined') {
            //获取系统信息的宽度
            let sysInfo = wx.getSystemInfoSync();
            let screenW = sysInfo.screenWidth;
            let screenH = sysInfo.screenHeight;
            let rate = screenW / 750;//设计分辨率为750*1334
            let self = this;
            //根据你图片的大小调整对应的长宽高,并且在不同的分辨率下大小也会对应变化,我的图片是418*160
            let width = 418 * rate;
            let height = 160 * rate;
            const button = wx.createUserInfoButton({
                type: 'image',
                image: "images/ksyx.png",//图片的位置是在打包构建后的bulid里的根目录开始而不是项目目录
                style: {
                //设置位置
                    left: screenW / 2 - width / 2,
                    top: screenH/2 + 100,
                    width: width,
                    height: height
                }
            })
            button.onTap((res) => {
                console.log('点击授权按钮', res)
                if (res && res.userInfo) {
                    button.destroy();
                    self.Loadmenu();//载入下一个场景
                }
            })
        }
    }

在上述代码中,它的意义在于创建一个按钮,如果授权成功就会加载到下一个页面并且下一次便不会触发,不授权的话便会在当前页面停留直到用户同意授权,这样你就可以从res中获得用户的头像id等信息并且在你需要的地方显示出来

如果需要一个覆盖全屏的透明按钮的话,可以参考一下群友提供的代码

//创建一个透明按钮在cc.Button的node节点上
	createAuthorizeBtn(btnNode:cc.Node) {
		let btnSize = cc.size(btnNode.width+10,btnNode.height+10);
		let frameSize = cc.view.getFrameSize();
		let winSize = cc.director.getWinSize();
		// console.log("winSize: ",winSize);
		// console.log("frameSize: ",frameSize);
		//适配不同机型来创建微信授权按钮
		let left = (winSize.width*0.5+btnNode.x-btnSize.width*0.5)/winSize.width*frameSize.width;
		let top = (winSize.height*0.5-btnNode.y-btnSize.height*0.5)/winSize.height*frameSize.height;
		let width = btnSize.width/winSize.width*frameSize.width;
		let height = btnSize.height/winSize.height*frameSize.height;
		// console.log("button pos: ",cc.v2(left,top));
		// console.log("button size: ",cc.size(width,height));

		let self = this;
		self.btnAuthorize = wx.createUserInfoButton({
			type: 'text',
			text: '',
			style: {
				left: left,
				top: top,
				width: width,
				height: height,
				lineHeight: 0,
				backgroundColor: '',
				color: '#ffffff',
				textAlign: 'center',
				fontSize: 16,
				borderRadius: 4
			}
		})

		self.btnAuthorize.onTap((uinfo) => {
			console.log("onTap uinfo: ",uinfo);
			if (uinfo.userInfo) {
				console.log("wxLogin auth success");
				wx.showToast({title:"授权成功"});
			}else {
				console.log("wxLogin auth fail");
				wx.showToast({title:"授权失败"});
			}
		});
	}
### Cocos Creator 中集成微信 `wx.login` 进行登录 在 Cocos Creator 开发环境中,为了实现微信小游戏的登录功能,可以利用 `wx.login()` 方法来获取用户的临时登录凭证(code),并将其发送给开发者服务器以换取 session_key openid。 #### 获取用户登录状态 当项目运行于微信小游戏环境时,可以通过检测平台类型确保仅在此环境下调用微信 API: ```javascript if (cc.sys.platform === cc.sys.WECHAT_GAME) { wx.login({ success(res) { if (res.code) { // 发起网络请求到自己的服务器端交换 code 对应的 session_key 及其他信息 console.log(`Login Code: ${res.code}`); // 假设有一个自定义函数用于处理与后端交互的过程 sendCodeToServer(res.code); } else { console.error('Failed to get login code'); } }, fail(err) { console.error('WX Login Failed:', err); } }); } ``` 此处需要注意的是,在实际应用中应当将从客户端得到的 code 传递至服务端完成进一步验证操作[^2]。由于安全原因,不应尝试直接在前端解析或存储敏感数据如 session_key。 #### 处理 Session Key 的有效期管理 考虑到 session_key 存在一个有效期限的问题,对于长时间未使用的用户来说可能需要重新授权登录。因此可以在适当位置加入对当前会话的有效性判断逻辑,必要时提示用户再次点击登录按钮刷新权限[^3]。 ```typescript const checkSession = () => new Promise((resolve, reject) => { wx.checkSession({ success() { resolve(true); // 表明当前 session 是有效的 }, fail() { reject(false); // 需要重新发起登录流程 } }); }); ``` 上述代码片段展示了如何检查现有会话是否仍然可用;如果失败,则意味着应该引导玩家经历完整的登录过程以便更新其认证状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值