当前位置: 首页 > news >正文

cocosCreator 之 微信小游戏授权设置和调用wxAPI获取用户信息

版本: 3.8.0

语言: TypeScript

环境: Mac

官方文档:

微信官方文档 - 开放能力

微信 API



小游戏环境


在cocosCreator的3.x版本项目开发中,TypeScript最终会被转换为JavaScript语言。

JavaScript的运行时调用的API,依赖于宿主环境,常见的宿主环境有浏览器、Node.js 等。

不同的宿主环境提供着不同的API,比如来说:

  • 浏览器有 BOM 和 DOM API,而 Node.js 则没有
  • Node.js 有 fs、net 等 Node.js 核心模块提供的文件、网络 API,而浏览器则不具备

小游戏的运行环境是一个不同于浏览器的宿主环境, 它主要通过调用 wx API 的接口, 而wx API 会调用 Native提供的绘制、音视频、网络和文件等能力,实现游戏的运行。

n

在cocosCreator的项目开发中,我们可以通过调用 wx API的接口,来实现微信的登录、用户信息的获取、支付、分享朋友圈等功能。

本篇文章面向用户群体是使用cocosCreator做微信小游戏开发的小白群体,大神可以略过。

如果编写有不当之处,欢迎您的指出。



授权设置


通过 wx API相关接口获取用户的信息,需要用户授权同意,我们才能获取。

微信平台为了保障用户的合法权益和规范开发者对用户个人信息的处理行为,开发者需要在微信后台配置:

  • 用户隐私保护指引 也就是用户协议,告知用户开发者会获取那些权限等
  • 隐私授权弹窗 用于告知用户能否授权
    请添加图片描述

大致的步骤:

  1. 账号登录:https://mp.weixin.qq.com/
  2. 选择 设置 --> 基本设置 --> 服务内容声明下的用户隐私保护指引,选择更新
  3. 打开用户隐私保护指引设置,选择第二个,然后点击确认

请添加图片描述

  1. 填写用户隐私保护指引设置
    请添加图片描述

  2. 可通过增加信息类型 选择用户信息类型:
    请添加图片描述

  3. 填写信息完毕后,可确定并生成协议

  4. 返回基本设置页面 后, 可打开服务内容声明 --> 隐私授权下的 设置,注意标记部分即可
    请添加图片描述

最后,游戏在微信开发者工具运行的时候,如果调用了 wx API的请求授权接口,会弹出类似如下页面:
请添加图片描述

更多详情内容可参考:

微信小游戏文档 小游戏隐私合规开发指南

微信开发社区 小游戏《用户隐私保护指引》



cocosCreator调用wxAPI接口


在cocosCreator的脚本中调用 wx API接口,需要注意:

  1. 实现的功能,使用浏览器调试是无效的。因为微信小游戏的运行是不同于浏览器的, 可以打包后通过微信开发者工具运行调试
  2. Creator没有wx API接口的定义文件,因此脚本中编写wx都会报错

针对于第2种,可通过NPM下载 wx API 的类型定义文件,以帮助我们调用方法时,有智能提示。

具体步骤:

  1. 打开终端命令,进入指定的项目目录内
  2. 运行命令:npm install miniprogram-api-typings
  3. 下载成功后,会放在项目目录的 ./node_modules

关于 NPM 的使用相关,可参考博客:Mac安装使用NPM及常用命令。

安装后,在脚本中导入即可:

import 'miniprogram-api-typings';

更多使用配置:可参考: wechat-miniprogram 的README.md文件



实战: 获取微信用户昵称和头像


使用的主要接口是: wx.createUserInfoButton

它用于创建一个按钮,用于引导玩家点击后授权,进而获取用户的昵称、头像等信息。注意:必须同意授权后,才能获取用户信息

在cocosCreator中创建一个页面,主要节点是:

  • avatarNode 精灵,用于显示头像
  • nameLabel 文本,用于显示昵称

请添加图片描述

然后在脚本中编写代码:

import { _decorator, assetManager, Component, ImageAsset, Label, Node, Sprite, SpriteFrame, Texture2D } from 'cc';
const { ccclass, property } = _decorator;
import "miniprogram-api-typings";@ccclass('LoginLayer')
export class LoginLayer extends Component {@property(Node) avatar: Node = null;        // 头像@property(Label) nameLabel: Label = null;   // 昵称protected onLoad(): void {this.createUserBtn();}private createUserBtn() {let self = this;// 避开ts语法检测const wx = window['wx'];// 创建用户授权按钮let button = wx.createUserInfoButton({type: 'text',text: '授权',style: {left: 10,top: 76,width: 90,height: 40,lineHeight: 40,backgroundColor: "#66CC00",color: "#FFFFFF",textAlign: "center",fontSize: 18,borderRadius: 10}});button.onTap((res) => {//用户授权确认,获取用户信息if (res.userInfo) {// 设置头像const avatarUrl = res.userInfo.avatarUrl;self.setAvatar(avatarUrl);// 设置昵称self.nameLabel.string = res.userInfo.nickName as string;button.destroy();} else {console.log("用户拒绝授权");button.destroy();}});}//设置头像private setAvatar(url): void {let spire = this.avatar.getComponent(Sprite);assetManager.loadRemote<ImageAsset>(url + "?aaa=aa.jpg", { ext: '.jpg' }, (err, imageAsset) => {if (err) {return console.error(err.message);}let sp = new SpriteFrame();let texture = new Texture2D();texture.image = imageAsset;sp.texture = texturespire.spriteFrame = sp;})}
}

脚本编写完成后,构建发布微信小游戏,构建完成后,通过运行打开微信开发者工具。效果图如下:

请添加图片描述

点击授权,选择同意

请添加图片描述

获取昵称,头像权限,选择允许

请添加图片描述

最终的效果:

请添加图片描述


注意事项

上面所讲的主要内容是关于wx API在cocosCreator中如何使用,针对于示例有几点需要说明下:

  1. 微信小游戏通过wx.createUserInfoButton首次授权成功后,就不需要再次调用授权了。即使用户修改了个人信息相关,获取最新的消息通过wx.getUserInfo即可。

  1. 如果考虑第一点的情况,测试的时候想取消授权,可在微信开发者工具点击:右上方… -> 设置 --> 用户信息开关关闭即可,重新进行授权调试
    请添加图片描述

  2. 用户头像的url获取成功,但显示不出来,类似报错提示: 不在以下request 合法域名表中 , 针对于测试项目的解决方案:

  • 打开mp.weixin.qq.com 开发后台
  • 选择左侧的开发管理,然后开发设置 -> 服务器域名 ,点击开始配置

请添加图片描述

主要配置如下:

请添加图片描述

然后保存提交。

再打开微信开发者工具,如下图所示:

请添加图片描述

注意:此种配置仅针对于测试项目,如果是正式的项目,请更换正式域名即可。

至此文章结束,感谢小伙伴的热心分享:

CSDN 军大君关于用户授权按钮的分享

最后,祝大家学习生活愉快!

相关文章:

cocosCreator 之 微信小游戏授权设置和调用wxAPI获取用户信息

版本&#xff1a; 3.8.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 官方文档&#xff1a; 微信官方文档 - 开放能力 微信 API 小游戏环境 在cocosCreator的3.x版本项目开发中&#xff0c;TypeScript最终会被转换为JavaScript语言。 JavaScript的运行时调用的API…...

element ui el-table表格纵向横向滚动条去除并隐藏空白占位列

需求 当table内容列过多时&#xff0c;可通过height属性设置table高度以固定table高度、固定表头&#xff0c;使table内容可以滚动 现在需求是右侧滚动条不好看&#xff0c;需要去除滚动条&#xff0c;并隐藏滚动条所占列的位置 // ----------修改elementui表格的默认样式-…...

防止python进程重复执行

前言 通过保存的进程pid查询上次执行的进程是否退出,决定是否启动新的python进程 代码 pidOption.py import os import psutil pidPath = "saveFile.pid"#写入进程号 def writePid():pid = str(os.getpid())f = open(pidPath, w)f.write(pid...

LV.12 D13 C工程与寄存器封装 学习笔记

一、C语言工程简介 把模板在linux解压出来 代码写在interface.c就可以了。 map.lds是链接脚本文件&#xff08;负责代码的排布&#xff09; include中是头文件&#xff0c;src中是写好的源代码 start.s是启动代码&#xff0c;在interface.c之前运行&#xff0c;把cpu和栈做一…...

Java SE 学习笔记(十九)—— XML、设计模式

目录 1 XML1.1 XML 概述1.2 XML 语法规则1.3 XML 文档约束&#xff08;了解&#xff09;1.3.1 DTD 约束1.3.2 schema 约束 2 XML 解析2.1 XML 解析概述2.2 Dom4J 解析 XML 文件2.3 XML 解析案例 3 XML 检索4 设计模式4.1 工厂模式4.2 装饰模式 1 XML 在有些业务场景下&#xff…...

grafana InfluxDB returned error: error reading influxDB 400错误解决

问题&#xff1a; 如图提示错误解决 确认自己的docker容器是否配置了以下3个字段 DOCKER_INFLUXDB_INIT_USERNAMExxx DOCKER_INFLUXDB_INIT_PASSWORDyyy DOCKER_INFLUXDB_INIT_ADMIN_TOKENzzz 如果有&#xff0c;在grafana中需要添加header配置Header: Authorization , Value…...

【LeetCode:150. 逆波兰表达式求值 | 栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

什么是神经网络,它的原理是啥?(2)

参考&#xff1a;https://www.youtube.com/watch?vmlk0rddP3L4&listPLuhqtP7jdD8CftMk831qdE8BlIteSaNzD 视频3&#xff1a;什么是激活函数&#xff1f;为什么我们需要激活函数&#xff1f;它的类型有哪些&#xff1f; 为什么需要激活函数&#xff1f;如果没有激活函数&…...

leetcode做题笔记206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&am…...

2023/10/31 JAVA学习

idea一般会自动帮我们导包 new string创建出的字符串是空的,可以对其进行新赋值 s[i]在Java字符串中是没有这个东西的,想要遍历字符串只能用下面这种方式 但是可以把字符串,转换为字符数组然后那样输出 java中是无法s1 s2这样比较字符串的,因为这样比较的是地址,如果是new创建…...

SurfaceFliger绘制流程

前景提要&#xff1a; 当HWComposer接收到Vsync信号时&#xff0c;唤醒DisSync线程&#xff0c;在其中唤醒EventThread线程&#xff0c;调用DisplayEventReceiver的sendObjects像BitTub发送消息&#xff0c;由于在SurfaceFlinger的init过程中创建了EventThread线程&#xff0c…...

系统架构设计师-第14章-云原生架构设计理论与实践-

云原生架构产生背景 云原生与商业场景的深度融合 ( 1 )从为企业带来的价值来看&#xff0c;云原生架构有着以下优势通过对多元算力的支持&#xff0c;满足不同应用场景的个性化算力需求&#xff0c;井基于软硬协同架构&#xff0c;为应用提供极致性能的云原生算力 (2) 通过最…...

conda 实践

1. 环境部署 1.1. 下载 anaconda 安装包 下面这个网址查找自己需要的版本 https://repo.anaconda.com/archive/ 或者手动下载。 wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh 1.2. 执行安装程序 #安装依赖&#xff1a; sudo yum install bzip2…...

行业追踪,2023-10-31

自动复盘 2023-10-31 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

springboot 配置多个Redis数据源详解

实现原理 需要配置好两个数据源&#xff0c;创建两个RedisTemplate在配置类中注入两个RedisConnectionFactory&#xff0c;分别创建对应的RedisTemplate进行操作 详解 配置数据源 我这里是在之前已有一个配置下面另外加了一个 spring&#xff1a;redis:# 地址host: localh…...

【数据结构】排序算法总结

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 总结 1. 归并排序2. 计数排序3. 排序…...

作为20年老程序员,我如何使用GPT4来帮我写代码

如果你还在用google寻找解决代码bug的方案&#xff0c;那你真的out了&#xff0c;试试gpt4, save my life. 不是小编危言耸听&#xff0c;最近用gpt4来写代码极大地提高了代码生产力和运行效率&#xff0c;今天特地跟大家分享一下。 https://www.promptspower.comhttps://www.…...

【机器学习合集】模型设计之残差网络 ->(个人学习记录笔记)

文章目录 模型设计之残差网络1. 什么是残差结构1.1 网络加深遇到的优化问题1.2 short connect技术 2. 残差网络及有效性理解2.1 残差网络 3. 残差网络的发展3.1 密集残差网络3.2 更宽的残差网络(wide resnet)3.3 分组残差网络3.4 Dual Path Network3.5 加权残差网络3.6 预激活残…...

GoLong的学习之路(十六)基础工具之Gin框架

Gin框架介绍及使用&#xff0c;这张不用看内容就知道非常重要&#xff0c;重要到什么地步呢&#xff1f;重要到开发java不会Spring全家桶这种概念。 上几篇文章写的是如何构建骨架&#xff0c;经脉。这一章是将血肉注入。 文章目录 Gin框架RESTful API Gin渲染HTML渲染静态文件…...

VMware打开centos黑屏解决方法汇总

VMware打开centos黑屏解决方法汇总 前言&#xff1a;一. VMware打开centos黑屏解决方法汇总一 .情况情况一&#xff1a;情况二情况三 二. 解决方法最简单的方法&#xff1a;一. 以管理员权限在命令行执行1. 管理员身份运行cmd2. 输入“netsh winsock reset”,回车3. 重启电脑即…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...