• Unity微信小游戏登录授权获取用户信息



    请添加图片描述

    前言:

    最近需要在接微信获取用户信息的功能,在小游戏官方API中翻找资料。不得不说官方接口很多、很全,但是真的很乱而且部分遗漏。
    对于不明所以的人来说,真的非常不友好。文档一堆堆的罗列下来,有些也不知道要怎么组合使用。
    文档下有不少留言也是“骂骂咧咧”想必也和在下一样遇到了不少麻烦,也有朋友为此特地建立群组专门讨论这些问题。
    在各方碰壁与尝试下,终于拿到了用户的基本信息,在此记录分享一下:


    一、登录

    首先需要登录一下,我这需要用到Code,不需要的可以忽视。不过如果你是刚接触,我建议你一步步照着做。
    使用 WX.Login() 接口进行登陆:
    参考代码如下:

    LoginOption info = new LoginOption();
    info.complete = (aa) =>{ /*登录完成处理,成功失败都会调*/ };
    info.fail = (aa) => { /*登录失败处理*/ };
    info.success = (aa) =>
    {
        //登录成功处理
        Debug.Log("__OnLogin success登陆成功!查看Code:" + aa.code);
        //登录成功...这完成后,跳到下一步,《二、查看授权》
    };
    WX.Login(info);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    接口详情:https://developers.weixin.qq.com/minigame/dev/api/open-api/login/wx.login.html


    二、查看授权

    我们需要看下授权情况,之前有没有授权过,因为如果授权过就不用再调用的接口了。
    使用 WX.GetSetting()接口进行查询:
    参考代码如下:

    GetSettingOption info = new GetSettingOption();
    info.complete = (aa) => { /*获取完成*/ };
    info.fail = (aa) => { /*获取失败*/};
    info.success = (aa) =>
    {
        if (!aa.authSetting.ContainsKey("scope.userInfo") || !aa.authSetting["scope.userInfo"])
        {
            //《三、调起授权》
        }
        else
        {
            //《四、获取用户信息》
        }
    };
    WX.GetSetting(info);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    接口详情:https://developers.weixin.qq.com/minigame/dev/api/open-api/setting/wx.getSetting.html


    三、调起授权(特详细)

    查看未有相关授权后,我们需要调起面板让用户选择授权。实话说这一步卡了我很久,也是没有看到相关文章和文档写了这些内容才决定出这个文章。
    使用接口 WX.Authorize() 我们还需要创建一个按钮用户点击才开始授权,使用接口:WX.CreateUserInfoButton()
    先上代码:

    //调用请求获取用户信息
    WXUserInfoButton btn = WX.CreateUserInfoButton(0, 0, Screen.width, Screen.height, "zh_CN", true);
    btn.OnTap((res) =>
    {
        if (res.errCode == 0)
        {
            //用户已允许获取个人信息,返回的data即为用户信息
            Debug.Log(res.userInfo.nickName);
        }
        else
        {
            Debug.Log("用户未允许获取个人信息");
        }
        btn.Hide();
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    需要使用WX.CreateUserInfoButton接口在屏幕上创建一个“透明的” “透明的” “透明的”区域,你需要在下面有个UI引导用户去点击。

    我里我表示吐槽,刚开始没看到这个透明区,以为没起作用。
    接口详情:https://developers.weixin.qq.com/minigame/dev/api/open-api/user-info/wx.createUserInfoButton.html

    以为这就完了吗?没有…
    在这里插入图片描述

    到这一步会出现一个错误,需要你提供授权…?当是很疑惑这不是就是调用授权的吗,为啥还有这一步。
    后面在群才问到,原来在微信公众平台也需要做设置…

    微信公众平台的设置

    微信公众平台中设置 > 服务内容声明 中设置 用户隐私保护指引隐私授权弹窗
    在这里插入图片描述

    吐槽:需要先设置用户隐私保护指引,否则就会像这样一只转圈:
    在这里插入图片描述

    于是我们先设置 用户隐私保护指引
    在这里插入图片描述

    选择下面这个:
    在这里插入图片描述

    然后根据项目情况写一下:
    在这里插入图片描述

    然后下一步再去开启这个就可以了:
    在这里插入图片描述

    需要注意的这个选项开启后无法关闭,请详查看文档。

    设置好了以后就可顺利获得用户基本信息了。


    四、获取用户信息

    经过了上面的授权下次就可以直接获取用户信息了,通过接口WX.GetUserInfo()
    //直接获取用户信息
    GetUserInfoOption userInfo = new GetUserInfoOption()
    {
    withCredentials = true,
    lang = “zh_CN”,
    success = (data) =>
    {
    Debug.Log(data.userInfo.nickName);
    }
    };
    WX.GetUserInfo(userInfo);
    接口详情:https://developers.weixin.qq.com/minigame/dev/api/open-api/user-info/wx.getUserInfo.html


    结语:

    网上的资料也很多,但是我觉得真的太零碎了,而且有些Unity也真的用不了。
    官方文档也一直在各种弃用,Demo也起不到多大作用,在些分享给大家。
    如果你觉得有用的话,请 点选 和 收藏,谢谢。

  • 相关阅读:
    uniapp获取Android硬件的uuid,附:网络的判断
    asp.net core 入口 验证token,但有的接口要跳过验证
    《安富莱嵌入式周报》第323期:NASA开源二代星球探索小车, Matlab2023b,蓝牙照明标准NLC, Xilinx发布电机套件,Clang V17发布
    求矩阵的行列式和逆矩阵 det()和inv()
    Matlab | TCP通信
    HBase 进阶
    软件设计模式原则(二)开闭原则
    决策树介绍
    【杂项】通过Excel为字符串产生条码
    ERA5再分析资料下载攻略
  • 原文地址:https://blog.csdn.net/ww1351646544/article/details/132542637