微信小游戏:打开游戏圈和获取用户信息

概述

在 Unity 开发微信小游戏时,打开游戏圈和获取用户信息是两个常用的功能。本文将详细介绍这两个功能的实现方法,以及在开发过程中可能遇到的问题和解决方案。

打开游戏圈

基本实现

创建打开游戏圈的按钮,点击后跳转到微信游戏圈:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var btn = WXBase.CreateGameClubButton(new WXCreateGameClubButtonParam()
{
    type = GameClubButtonType.image,
    icon = GameClubButtonIcon.light,
    openlink = url,
    style = new GameClubButtonStyle()
    {
        left = left,
        top = top,
        width = w,
        height = h
    }
});

按钮样式说明

  • type:按钮类型
    • image:图片按钮
    • text:文字按钮
  • icon:按钮图标
    • light:浅色图标
    • dark:深色图标
  • style:按钮样式
    • left:左边距
    • top:上边距
    • width:宽度
    • height:高度

获取用户信息

1. 检查授权状态

在获取用户信息之前,需要先检查用户是否已授权:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
WX.GetSetting(new GetSettingOption()
{
    success = (res) =>
    {
        var isAuth = res != null
          && res.authSetting.ContainsKey("scope.userInfo")
          && res.authSetting["scope.userInfo"];
        callback.Invoke(isAuth);
    }
});

2. 获取用户信息

如果用户已授权,可以直接获取用户信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
WX.GetUserInfo(new GetUserInfoOption()
{
    success = (res) =>
    {
        if (res == null || res.userInfo == null)
        {
            callback.Invoke(null, null);
            return;
        }

        var name = res.userInfo.nickName;
        var avatar = res.userInfo.avatarUrl;
        callback.Invoke(name, avatar);
    },
    fail = (res) =>
    {
        callback.Invoke(null, null);
    }
});

3. 创建授权按钮

如果用户未授权,需要创建授权按钮:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var btn = WXBase.CreateUserInfoButton(left, top, w, h, "zh_CN", false);
btn.OnTap((res) =>
{
    // 拒绝授权
    if (res.errCode != 0)
    {
        callback.Invoke(null, null);
        return;
    }
    
    callback.Invoke(res.userInfo.nickName, res.userInfo.avatarUrl);
    btn.Hide();
});

调试技巧

在微信开发者工具中,可以通过鼠标指针变化来识别授权按钮的位置:

  • 当鼠标移动到授权按钮区域时,指针会从圈变成箭头
  • 这个特性可以帮助开发者准确定位按钮位置

鼠标变化

分辨率问题

分辨率类型

  1. 物理分辨率

    • 设备实际的像素点数
    • 例如:iPhone 14 Pro Max 为 1290*2796
    • 通过 Screen.widthScreen.height 获取
  2. 逻辑分辨率

    • 用于界面适配的抽象概念
    • 例如:iPhone 14 Pro Max 为 430*932
    • 通过 GetSystemInfoOption 获取

按钮位置计算

不同按钮使用不同的分辨率系统:

  1. 游戏圈按钮

    • 使用逻辑分辨率
    • 获取方式:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    WX.GetSystemInfo(new GetSystemInfoOption()
    {
        success = (info) =>
        {
          var dpr = info.pixelRatio;
          var width = info.screenWidth;
          var height = info.screenHeight;
        }
    });
    
  2. 授权按钮

    • 使用物理分辨率
    • 获取方式:
    1
    2
    
    var width = Screen.width;
    var height = Screen.height;
    

分辨率转换

  • DPR(Device Pixel Ratio)= 物理分辨率 / 逻辑分辨率
  • 例如:iPhone 14 Pro Max 的 DPR = 3

常见问题

  1. 按钮位置不准确

    • 检查是否使用了正确的分辨率系统
    • 验证坐标计算是否正确
    • 考虑设备适配问题
  2. 授权失败

    • 检查网络连接
    • 验证用户是否拒绝授权
    • 确认微信版本是否支持
  3. 按钮显示异常

    • 检查按钮样式设置
    • 验证按钮大小是否合适
    • 确认按钮层级是否正确

参考资源

57.12k 字
43篇文章