【Unity微信】Unity发布微信小游戏+对接第三方SDK过程

news/2024/10/22 7:58:36

官方文档:https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/

上面的文档,能完成库的导入和发布操作
下面开始调用接口获取玩家信息

 1  
 2     /// <summary>
 3     /// 初始化SDK
 4     /// </summary>
 5     private void InitSDK()
 6     {
 7         WX.InitSDK((code) =>
 8         {
 9             Debug.Log("微信SDK初始化成功");
10  
11             LoginOption loginOption = new LoginOption()
12             {
13                 success = LoginSuccess,
14                 fail = (result) => { Debug.Log($"登录失败 code={result.errno} msg={result.errMsg}"); }
15             };
16  
17             Debug.Log("开始登录");
18             WX.Login(loginOption);
19         });
20     }
21  
22  
23     /// <summary>
24     /// 登陆成功回调
25     /// </summary>
26     /// <param name="result"></param>
27     private void LoginSuccess(LoginSuccessCallbackResult result)
28     {
29         Debug.Log($"登录成功 code={result.code} msg={result.errMsg}");
30  
31         code = result.code;
32         GetSettingOption getSettingOption = new GetSettingOption()
33         {
34             success = GetSettingSuccess,
35             fail = (result) => { Debug.Log($"获取设置信息失败 {result.errMsg}"); }
36         };
37         WX.GetSetting(getSettingOption);
38     }
39  
40  
41  
42     /// <summary>
43     /// 获取玩家配置成功
44     /// </summary>
45     /// <param name="result"></param>
46     private void GetSettingSuccess(GetSettingSuccessCallbackResult result)
47     {
48         if (!result.authSetting.ContainsKey("scope.userInfo") || !result.authSetting["scope.userInfo"])
49         {
50             Debug.Log("生成按钮开始请求获取用户信息");
51  
52             //此处设置虚拟按钮大小 
53             WXUserInfoButton wxUserInfoButton = WX.CreateUserInfoButton(0, 0, Screen.width, Screen.height, "zh_CN", false);
54             wxUserInfoButton.Show();
55             wxUserInfoButton.OnTap((data) =>
56             {
57                 if (data.errCode == 0)
58                 {
59                     //获取成功
60                     Debug.Log($"用户同意授权 用户名:{data.userInfo.nickName} 用户头像{data.userInfo.avatarUrl}");
61                     Xcxlogin();
62                     wxUserInfoButton.Hide();
63                 }
64                 else
65                 {
66                     Debug.Log("用户拒绝授权");
67                     wxUserInfoButton.Hide();
68                 }
69             });
70         }
71         else
72         {
73             Debug.Log("已获取过权限");
74             GetUserInfoOption getUserInfoOption = new GetUserInfoOption()
75             {
76                 lang = "zh_CN",
77                 withCredentials = false,
78                 success = GetUserInfoSuccess,
79                 fail = (result) => { Debug.Log($"获取玩家信息失败 {result.errMsg}"); }
80             };
81             WX.GetUserInfo(getUserInfoOption);
82         }
83     }
84  
85     /// <summary>
86     /// 获取玩家信息成功回调
87     /// </summary>
88     /// <param name="data"></param>
89     private void GetUserInfoSuccess(GetUserInfoSuccessCallbackResult data)
90     {
91         Debug.Log($"用户名:{data.userInfo.nickName} 用户头像{data.userInfo.avatarUrl}");   
92     }

第一次操作的玩家,会有一个问题(反正我遇到了),没有弹获取权限弹窗,直接失败的
这个问题是开发后台的用户隐私没配置好,打开微信公众平台>设置>基本信息>服务内容声明

按照顺序配置更新,然后重新运行就可以正常弹窗,确定后成功返回用户信息

 

=客户端获取玩家的唯一OpenID

WX.GetUserInfo
这个接口返回的基本有用的只有用户昵称和头像地址
我们需要一个用户唯一的ID(OpenID)来作为用户标识,一般可以用来作为登录账号或者记录ID

 而微信返回的OpenID在这个加密数据里面,我们需要反编译一下

 1 IEnumerator GetSessionKeyFromServer(string code)
 2 {
 3     string url = $"https://api.weixin.qq.com/sns/jscode2session?appid={appid}&secret={secret}&js_code={code}&grant_type=authorization_code"; // 替换为你的服务器地址
 4 
 5     using (UnityWebRequest www = UnityWebRequest.Get(url))
 6     {
 7         yield return www.SendWebRequest();
 8         if (www.result == UnityWebRequest.Result.Success)
 9         {
10             // 假设服务器返回session_key
11             string sessionKey = www.downloadHandler.text;
12 
13             Debug.Log("Received session key: " + sessionKey);
14             // 可以进一步通过JS获取用户加密数据并解密
15             GetUserInfo(sessionKey);
16         }
17         else
18         {
19             Debug.LogError("Failed to get session key: " + www.error);
20         }
21     }
22 }

上面方法参数解释:

appid:AppID(小程序ID)
secret:AppSecret(小程序密钥)
code: WX.Login接口,登录成功的返回值

 

 上面请求返回的sessionKey里包含了OpenID等隐私数据的解密Json字符串

{"session_key":"******","openid":"******","unionid":"******"}

=对接第三方SDK js文件
一般的js代码编写以及C#调用官方示例:https://docs.unity3d.com/cn/2021.3/Manual/webgl-interactingwithbrowserscripting.html
第三方的SDK js文件:sdk.js(举例)
1.将上面的sdk.js文件放入Unity工程Assets/WX-WASM-SDK-V2/Runtime/wechat-default 目录下面
2.打开该目录下的game.js文件,加入引用

import './sdk'

3.在目录Assets/Plugins/WebGL目录下新建文件sdk.jslib

mergeInto(LibraryManager.library, {SDKInit: function (id) {opensdk.init({appid: UTF8ToString(id),//将C#传递到Js层的参数正确转换成字符串
        success:function(res){SendMessage('CSDKCallBack','OnInitSuccess',JSON.stringify(res));},fail:function(res){SSendMessage('CSDKCallBack','OnInitFailure',JSON.stringify(res));}});},});

opensdk.init是sdk.js中的接口,在jslib里面正常调用
SendMessage向Unity发送消息


4.C#层:

[DllImport("__Internal")]
private static extern void SDKInit(string id);void Start()
{SDKInit("123"); 
}

根据上面步骤既可完成对接第三方SDK js

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

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

相关文章

pikachu靶场搭建

使用Dockers 搭建靶场安装docker 因为我使用的是kali 这里就直接安装了apt-get install docker.io搜索 pikachu 的镜像容器┌──(root㉿kali)-[/home/kali] └─# docker search pikachu NAME DESCRIPTION STARS …

NSString 与 Unicode

这篇文章里,我会先向你简单地讲一下 Unicode 这个标准,然后解释 NSString 是怎么处理它的,再讨论一下你可能会遇到的一些常见问题。英文: https://www.objc.io/issues/9-strings/unicode/ https://learn.microsoft.com/en-us/dotnet/api/system.string.normalize?view=net-…

Oracle NUMBER类型可以接受的最大值是多少?

首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486498&idx=1&sn=9c2cc6490d3799117366910ef95fbd42&chksm=ea375852dd40d14465adc718841c288fa8941aaf772a8957af9c4107e2d70841b80e5c9a3d98&token…

开发者故事:基于 KubeSphere LuBan 架构打造下一代云交付平台

前言 在 KubeSphere Marketplace,个人开发者的创意和才能正在逐渐崭露头角。今日,我们荣幸地向大家介绍 Shipper 云交付平台的开发者——凌波,一位云原生领域的资深专家。 凌波巧妙融合 KubeSphere 平台的特性,通过原生适配的精湛技艺,匠心独运地打造了 Shipper 平台。现在…

通义灵码介绍

通义灵码,是基于通义大模型的智能编程辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云的云服务使用场景调优,助力开发者高效、流畅地编码。 核心场景 代码智能生成 经过…

基于ROS2的智能协同系统

基于ROS2的智能协同系统 任务一: 基础任务配置ubuntu环境,注意ROS版本与ubuntu版本间的对应关系安装ROS 2框架使用Publisher-Subscriber结构,完成两个node节点间传输数据功能传输文字与视频STEP: 配置Ubuntu环境 安装VMware 安装虚拟机(VMware)保姆级教程(附安装包)_vmwa…

客服系统结束对话,拉黑用户,拉黑用户IP功能

我们做在线客服系统,经常遇到有来捣乱的人,在我们的对话框页面胡乱发言 或者辱骂客服人员,我们客服系统支持将这个对话结束,把这个人来黑,把他的IP拉黑的功能 针对捣乱的人,可以一键三连,对方再也不能废话 gofly.v1kf.com 十年开发经验程序员,离职全心创业中,历时三年…

倒排索引

什么是倒排索引 倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。 倒排索引的结构 倒排索引通常包含两个主要部分: 词项字典(Term Dictionary):存储所有词项及其相关信息(如词频、位…