cocosCreator 调用wxAPI 及后台授权设置、获取用户昵称和头像

news2025/7/28 10:20:24

版本: 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 = texture
      spire.spriteFrame = sp;
    })
  }
}

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

请添加图片描述

点击授权,选择同意

请添加图片描述

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

请添加图片描述

最终的效果:

请添加图片描述


注意事项

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

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

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

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

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

请添加图片描述

主要配置如下:

请添加图片描述

然后保存提交。

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

请添加图片描述

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1156459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图解系列--L2交换机

大端&#xff0c;小端 网络上传输时&#xff0c;采用网络字节序。网络字节序为大端序。举例来说&#xff0c;对0x1020这样一个数值&#xff0c;按大端传输时&#xff0c;先传输0x10&#xff0c;再传输0x20&#xff1b;按小端传输时&#xff0c;先传输0x20&#xff0c;再传输0x…

Qt 中model/View 架构 详解,以及案例实现相薄功能

model/View 架构 导读 ​ 我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改…

k8s---pod进阶

//资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为容器指定了 li…

super(props)与react类式组件

1 为什么super() super是对父类构造器的调用。使用了后会自动继承父类的属性。要把super&#xff08;&#xff09;放到第一行是因为了以防在super&#xff08;&#xff09;之前&#xff0c;也就是没实例化父类之前&#xff0c;访问父类的属性。所以js将此作为一个语法点&#x…

机器视觉能不能再火爆?大多数企业订单减少是现实,大多数企业维持现有的经营状态将会非常困难,就看人工智能和新兴产业能不能破门而入

每个人都讲机器视觉代替大量人工&#xff0c;可是真的吗&#xff1f;没有订单&#xff0c;人工的存在都没必要&#xff0c;需要什么机器视觉检测。 我们首先有一个问题&#xff0c;机器视觉行业之前有没有火爆过&#xff1f; 有&#xff0c;但是出现短暂之后是内卷。深度学习A…

STM32-LIN总线详解1

.硬件规范&#xff1a; 1.总线形式&#xff1a;一主多从 2.总线通常为12V电压&#xff0c;最高波特率20K&#xff0c;最多容纳16个节点。 也有24V&#xff0c;和其他电平需要共地。 3.总线上波形 4. 单片机STM32与LIN收发器在LIN_CAN开发板上设计。 1K电阻自动控制电路&…

自定义元素宽高比例(aspect-ratio)与@supports兼容支持和图片裁剪(object-fit)的用法

使用grid布局可以轻松实现响应式布局&#xff0c;子元素只需要设置最小宽度即可&#xff0c;如果对子元素没有设置高度&#xff0c;那么高度取决于内容的最大值&#xff0c;这样显然是不稳定的&#xff0c;如下图所示&#xff1a; 出现这种问题就造成布局混乱了&#xff0c;可…

利用Vue2实现印章徽章组件

需要实现的组件效果&#xff1a; 该组件有设置颜色、大小、旋转度数和文本内容功能。 一、组件实现代码 <template><divclass"first-ring"v-bind"getBindValue":class"getStampBadgeClass":style"{ transform: rotate(${rotate}…

离散数学实践-编程实现利用真值表法求主析取范式以及主合取范式

*本文为博主本人校内的离散数学专业课的实践作业。由于实验步骤已经比较详细&#xff0c;故不再对该实验额外提供详解&#xff0c;本文仅提供填写的实验报告内容与代码部分&#xff0c;以供有需要的同学学习、参考。 -------------------------------------- 编程语言&#xff…

第2篇 机器学习基础 —(4)k-means聚类算法

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。聚类算法是一种无监督学习方法&#xff0c;它将数据集中的对象分成若干个组或者簇&#xff0c;使得同一组内的对象相似度较高&#xff0c;不同组之间的对象相似度较低。聚类算法可以用于数据挖掘、图像分割、文本分类等领域…

nodejs+php+python+微信小程序-基于安卓android的北京地铁票务APP-计算机毕业设计

根据现实中在北京地铁票务方面的需求&#xff0c;并对该系统进行了仔细的研究&#xff0c;将系统权限按照管理者和用户这两种类型进行了区分。 &#xff08;1&#xff09;用户功能需求   用户进入APP可以进行系统首页、地铁线路、我的等操作&#xff0c;在我的页面可以对我的…

NLP实践——中文指代消解方案

NLP实践——中文指代消解方案 1. 参考项目2. 数据2.1 生成conll格式2.2 生成jsonline格式 3. 训练3.1 实例化模型3.2 读取数据3.3 评估方法3.4 训练方法 4. 推理5. 总结 1. 参考项目 关于指代消解任务&#xff0c;有很多开源的项目和工具可以借鉴&#xff0c;比如spacy的基础模…

【强化学习】12 —— 策略梯度(REINFORCE )

文章目录 前言策略梯度基于策略的强化学习的优缺点Example:Aliased Gridworld策略目标函数策略优化策略梯度利用有限差分计算策略梯度得分函数和似然比策略梯度定理蒙特卡洛策略梯度&#xff08;Monte-Carlo Policy Gradient&#xff09;Puck World Example Softmax随机策略 代…

力扣刷题-栈-逆波兰表达式求值

150. 逆波兰表达式求值 根据 逆波兰表示法&#xff0c;求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 说明&#xff1a; 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说&#xff0c;表达…

YOLO算法改进3【中阶改进篇】:添加HorNet卷积模块

论文地址:https://arxiv.org/pdf/2207.14284.pdf 源码地址:https://github.com/raoyongming/HorNet. HorNet是在Swin transformer结构的基础上,结合大核思想提出的新的网络结构模块,使用该模块,作者在ImageNet-1k数据集上做分类,分割以及检测任务都在当时达到了SOTA的效果…

基于Langchain+向量数据库+ChatGPT构建企业级知识库

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《基于 LLM 大模型的向量数据库企业级应用实践》 1— LangChain 是什么&#xff1f; 众所周知 OpenAI 的 API 无法联网的&#xff0c;所以如果只使用自己的功能实现联网搜索并给出回答、总结 PDF 文档、基于某…

【机器学习】二、决策树

目录 一、决策树定义&#xff1a; 二、决策树特征选择 2.1 特征选择问题 2.2 信息增益 2.2.1 熵 2.2.2 信息增益 三、决策树的生成 3.1 ID3算法 3.1.1理论推导 3.1.2代码实现 3.2 C4.5 算法 3.2.1理论推导 ​ 3.2.2代码实现 四、决策树的剪枝 4.1 原理 4.2 算法思路&#xff1a…

VMware虚拟网络连接的三种方式

桥接模式(Bridged) 什么是桥接模式?桥接模式就是将主机网卡与虑拟机虑拟的网卡利用虑拟网桥进行通信。在桥接的作用下&#xff0c;类似于把物理主机虑拟为一个交换机&#xff0c;所有桥接设置的虚拟机连接到这个交换机的一个接口上&#xff0c;物理主机也同样插在这个交换机当…

cocos creator,vscode打开脚本报错,找不到cc模块问题

cocosCreator&#xff0c;用VSCODE打开写脚本代码的时候&#xff0c;会误报飘红&#xff0c;但实际上能正常运行。 我的版本是当前最新版本的3.8.1 解决方案: 在CocosCreator 的安装目录下 C:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin.dec…

Python---排序算法

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Python中的排序算法用于对数据进行排序。排序算法可以使数据按照一定的规则进行排列&#xff0c;以便于数据的查找、统计、比较等操作。在数据分析、机器学习、图形计算等领域&#xff0c…