cocosCreator微信小游戏 之 获取用户昵称、头像等信息(二)

版本: 3.4.0

语言: TypeScript

环境: Mac


简介


在上篇博客中,主要讲述内容:wx API在cocosCreator中配置定义文件和微信后台配置用户隐私相关。

讲述的主要原因是:

  • cocosCreator没有对 wx API提供定义接口支持
  • 使用wx API需要配置用户隐私保护才能调用获取信息

需要注意: 微信接口的调式,需要cocosCreator打包微信小游戏,并在 微信开发者工具运行才能调试。

上篇博客: cocosCreator微信小游戏 之 配置wxAPI

本篇博客主要讲述内容:

  • 授权按钮和获取用户信息的创建
  • 域名问题导致用户头像显示不出的解决方式
  • 其他

示例

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

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

请添加图片描述

调用 wx API相关接口前,我们需要注意:

  • 微信用户信息属于敏感信息,获取的话必须经过用户授权同意
  • 已经授权同意的,就不需要进行重复的授权请求

调用的主要接口:

  • wx.createUserInfoButton 用于创建用户信息按钮,用户点击授权后,我们就可以获取用户信息了
  • wx.getUserInfo 用户获取用户信息,签名,加密等数据
  • wx.getSetting 获取已请求的授权权限相关,如果已授权则返回true

主要思路:

  • 通过wx.getSetting获取用户信息权限是否已申请
  • 如果已申请,则调用wx.getUserInfo 获取用户信息数据
  • 如果没有申请,则调用wx.createUserInfoButton生成用户信息按钮进行授权

为了以后的方便拓展,代码的实现主要有两部分:

  1. LoginLayer.ts 主要用于UI的逻辑处理相关
  2. WechatManager.ts 管理类,主要负责调用wx API的接口相关

LoginLayer.ts

import { _decorator, assetManager, Component, ImageAsset, Label, Node, Sprite, SpriteFrame, Texture2D } from 'cc';
const { ccclass, property } = _decorator;
import { WechatManager } from './manager/WechatManager';

@ccclass('LoginLayer')
export class LoginLayer extends Component {
  @property(Node) avatar: Node = null;        // 头像
  @property(Label) nameLabel: Label = null;   // 昵称

  protected start(): void {
    WechatManager.instance.initAutoSetting((url) => {
      this.setAvatar(url);
    });
  }

  public clickShareEvent() {
    WechatManager.instance.showShareMenu();
  }

  //设置头像
  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;
    })
  }
}

WechatManager.ts

// wxAPI: https://developers.weixin.qq.com/minigame/dev/api/
import { _decorator, screen} from 'cc';
const { ccclass, property } = _decorator;

export class WechatManager {
  private static _instance: WechatManager = null;  
  // 用户信息: 昵称,头像,语言等
  private _userInfo;
  // 头像回调
  private _avatarCallBack = null;

  static get instance() {
    if (this._instance) {
      return this._instance;
    }
    this._instance = new WechatManager();
    return this._instance;
  }

  // 获取标记权限
  public initAutoSetting(callBack) {
    this._avatarCallBack = callBack;
    // 避开ts语法检测
    const wx = window['wx'];
    // 获取请求过的权限标记
    let object: any = {
      // 成功回调         
      success: (res) => {
        // 是否授权用户信息
        const autoSetting = res.authSetting;
        if (autoSetting["scope.userInfo"]) {
          // 已授权
          this.getUserInfo();
        } else {
          // 未授权
          this.creatUserInfoButton();
        }
      },
      // 失败回调
      fail() {
        console.log("wx.getSetting获取用户配置失败");
      },
      // 结束回调(调用成功,失败都会执行)
      complete() {
        console.log("wx.getSetting获取用户配置结束");
      }
    }
    wx.getSetting(object);
  }

  // 创建用户授权按钮(仅用于登录页面, 如果用户拒绝授权,则一直显示)
  private creatUserInfoButton(isFull: boolean = false) {
    const wx = window['wx'];
    let object: any = {
      // 按钮类型: text可设置背景色和文本 image仅能设置背景贴图
      type: "text",
      // 按钮文本,仅对type为text有效
      text: "授权",
      // 按钮样式
      style: {
        left: 70, 
        top: 60,
        width: 100,
        height: 40,
        backgroundColor: "#66CC00",
        color: "#FFFFFF",
        textAlign: 'center',
        lineHeight: 40,
        fontSize: 20,
      },
    };

    const button = wx.createUserInfoButton(object);
    // 监听用户信息按钮点击事件
    button.onTap((res) => {
      if (res && res.userInfo) {
        console.log("用户同意授权");
        this._userInfo = res.userInfo; 
        if (this._avatarCallBack) {
          this._avatarCallBack(this._userInfo.avatarUrl);
        }
        // 授权成功后,才销毁按钮
        button.destroy();
      } else {
        console.log("用户拒绝授权");
      }
    });
  }

  // 获取用户信息,需要获取scope.userInfo的授权,也就是getSettings的接口调用
  public getUserInfo() {
    const wx = window['wx'];
    let object: any = {
      success: (res) => {
        console.log("通过 getUserInfo 获取的数据:", res);
        if (res) {
          this._userInfo = res.userInfo;
          if (this._avatarCallBack) {
            this._avatarCallBack(this._userInfo.avatarUrl);
          }
        } 
      },
      fail: () => {
        console.log("getUserInfo获取信息失败");
      },
      complete: () => {},
    };
    wx.getUserInfo(object);
  }
}

脚本编写完成后,构建发布微信小游戏,构建完成后,通过运行打开微信开发者工具

效果图类似如下:

请添加图片描述

点击授权,选择同意

请添加图片描述

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

请添加图片描述

最终的效果:

请添加图片描述

代码相关注意:

  • const wx = window['wx'];的增加,主要是因为微信的运行环境跟cocosCreator不一致,如果没有该定义,ts是会提示报错的
  • 调用相关接口,注意对比API文档是否为异步操作,避免逻辑出现问题
  • 授权登录按钮处,如果用户拒绝,会一直存在
  • 某些接口是有调用次数限制的,可参考文档:接口调用频率规范
  • 测试中,如果想取消授权,可通过微信开发者工具点击:右上方… -> 设置 --> 用户信息开关关闭即可

请添加图片描述



头像域名导致的不显示


在测试的过程中,可能遇到类似问题:
请添加图片描述

问题原因:域名配置导致的,如果仅针对于测试, 处理方式:

微信开发者工具右上角详情 -> 本地设置 --> 勾选不校验合法域名…

请添加图片描述

重新运行,就会显示头像了。

如果是正式的环境,建议微信后台配置,步骤:

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

请添加图片描述

  • 主要配置如下部分

请添加图片描述

然后保存提交。



其他


在微信官方提供的文档中,针对于wx API 接口的使用,都有着详细的说明,这里不再赘述。

更多内容可参考:

wx API

微信小游戏-开放能力

接口调用频率规范

接口版本兼容

如果您觉得不错,请您为我编写的文章点赞,祝大家学习生活愉快!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Cocos Creator是一种基于JavaScript的游戏开发引擎,可用于开发简单的手机游戏应用程序,包括微信游戏。目前,Cocos Creator平台上有120多套微信游戏源代码可供游戏开发者使用,这些源代码包含了各种类型的游戏,如益智游戏、动作游戏、运动游戏、角色扮演游戏等等。这些源代码可大大加速游戏开发进程,并使游戏开发者能够专注于游戏的设计和创意。此外,通过Cocos Creator平台,游戏开发者可以使用丰富的可视化编辑工具和开发工具,轻松创建游戏精灵、动画和场景等元素,进而快速实现游戏的构建。总的来说,Cocos Creator平台上的120多套微信游戏源代码为游戏开发者提供了可靠的资源和支持,使他们可以更快、更便捷地创建出高质量的微信游戏,从而实现更大的商业成功。 ### 回答2: cocos creator是一款非常受欢迎的游戏开发引擎,其集成了丰富的功能和工具,可以很方便地构建2D和3D游戏微信游戏则是目前非常流行的一种轻量级移动游戏,因为与微信平台无缝集成,所以被越来越多的开发者采用。 在这样的背景下,120多套cocos creator微信游戏源码的出现,可以让开发者更加便捷地开展游戏开发工作。这些源码涵盖了各种类型的游戏,如飞行射击、跑酷、休闲益智、卡牌战斗等等,开发者可以根据自己的需要选择适合自己的源码进行二次开发与修改。 使用这些源码,不仅可以节省大量的开发时间和精力,而且还可以获得很好的学习机会,了解其他优秀游戏的设计思路和开发技巧,从而提高自己的开发水平。当然,开发者也可以将这些源码用于商业项目,加速产品的上线和推广。 总之,cocos creator微信游戏120多套源码的出现,为广大的游戏开发者带来了极大的便利和启示,也让我们更加期待未来cocos creator和微信游戏的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤九日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值