首页 > 其他分享 >【Unity微信】Unity发布微信小游戏+对接第三方SDK过程

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

时间:2024-10-16 17:10:20浏览次数:1  
标签:code Log 微信 js Unity 小游戏 result Debug WX

官方文档: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

标签:code,Log,微信,js,Unity,小游戏,result,Debug,WX
From: https://www.cnblogs.com/lovewaits/p/18470375

相关文章

  • Python小游戏5——猜谜语
    代码defguess_riddle():  riddles=[    {"question":"什么东西越洗越脏?","answer":"水"},    {"question":"什么布剪不断?","answer":"瀑布"},    {"question":"......
  • Python小游戏3——井字棋
    表格知识点知识点类别具体内容数据结构二维数组(列表):游戏板是一个3x3的二维列表函数print_board(board):打印游戏板状态 check_winner(board,player):检查玩家是否获胜 is_board_full(board):检查游戏板是否已满 tic_tac_toe():游戏主函数控制结构......
  • 微信消息语音播报秒实现
    1.监听系统消息通知注册一个监听系统消息的服务<serviceandroid:name=".MyNotificationListenerService"android:exported="true"android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">......
  • 微信小游戏一键跳广G工具
    天再给各位铁子分享一个小游戏跳GG的工具咱今天分享的这款跳GG的小工具使用非常非常简单,几十秒的GG瞬间就木有了,总之就是一个字----爽~!首先打开这个小工具,小工具就十几个M。点击启动就行,剩下你就不需要管了:然后进入微信小程序找你要玩的小游戏,玩的过程中不管你是要增加复......
  • 基于SSM+微信小程序的宠物管理系统1
    ......
  • 基于SSM+微信小程序的宠物店商城管理系统(宠物2)
    ......
  • 基于springboot+微信小程序校园自助打印管理系统(打印1)
    ......
  • Unity Pico开发之基础功能(1)
    前言:继专栏上一篇文章搭建开发环境后,本文就射线传送(包括区域传送、锚点传送)进行介绍,操纵摇杆在场景中移动、抓取物品、旋转镜头视角等基础功能将在下一篇文章中介绍。搭建开发环境传送门:UnityPico开发之环境搭建https://blog.csdn.net/m0_74799789/article/details/14282733......
  • Unity接入人工智能
    在Unity接入人工智能中,本篇实现了接入百度智能云ai进行npc智能对话,通过http方式,并非插件,适合于所有支持Http链接的Unity版本。对于Chartgpt可以参考本篇内容的实现过程。1-4节讲解测试,第5节讲解Unity中的实现,建议从头开始阅读。一、创建应用1.1注册百度智能云账号按照图片......
  • 微信小程序毕业设计-基于springboot+微信小程序的科校史馆博物馆小程序平台设计和实现
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......