Unity — ShareSDK 获取微信头像

本文介绍如何在Unity项目中利用ShareSDK插件进行微信登录授权,并详细展示了回调函数的实现及微信用户信息和头像的获取方法。通过实例代码,读者可以了解如何处理授权结果、分享状态、好友关系等,以及如何根据获取的用户信息自定义本地数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ShareSDK获取微信头像

导入ShareSDK 的unity插件包,在这里插入图片描述
新建一个游戏对象并挂起 ShareSDK这个组件,填写好你申请的游戏参数,在这里插入图片描述
写好登陆授权的回调函数

  private void InitShareSDK()
    {
        Mir.Instance.cData.playerData.shareSDK = gameObject.GetComponent<ShareSDK>();

        Mir.Instance.cData.playerData.shareSDK.authHandler = OnAuthResultHandler;
        Mir.Instance.cData.playerData.shareSDK.shareHandler = OnShareResultHandler;
        Mir.Instance.cData.playerData.shareSDK.showUserHandler = OnGetUserInfoResultHandler;
        Mir.Instance.cData.playerData.shareSDK.getFriendsHandler = OnGetFriendsResultHandler;
        Mir.Instance.cData.playerData.shareSDK.followFriendHandler = OnFollowFriendResultHandler;
    }

    private void OnFollowFriendResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        
    }

    private void OnGetFriendsResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        
    }

    private void OnGetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
          
    }

    private void OnShareResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {

        if (state == ResponseState.Success)
        {
            print("share success");
            print(MiniJSON.jsonEncode(data));
        
        }
        else if (state == ResponseState.Fail)
        {


        }
        else if (state == ResponseState.Cancel)
        {


        }
    }

    private void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
       // string str = "";
        if (state == ResponseState.Success)
        {
            if (result != null && result.Count > 0)
            {
                Debug.Log("authorize success !" + "Platform :" + type + "result:" + MiniJSON.jsonEncode(result));
            }
            else
            {
                Debug.Log("authorize success !" + "Platform :" + type);
            }
            // str = "授权成功";
            Debug.Log("授权成功");

            

            SdkInfo data = new SdkInfo();
            data.userID = result["userID"].ToString();
            data.icon = result["icon"].ToString();
            data.token = result["token"].ToString();
            data.expiresTime = result["expiresTime"].ToString();
            data.openid = result["openid"].ToString();
            data.nickname = result["nickname"].ToString();
            data.province = result["province"].ToString();
            data.country = result["country"].ToString();
            data.refresh_token = result["refresh_token"].ToString();
            data.expiresIn = result["expiresIn"].ToString();
            data.city = result["city"].ToString();
            data.unionid = result["unionid"].ToString();
            data.gender = result["gender"].ToString();
            Debug.Log(data.icon + "==" + data.userID);
            Mir.Instance.cData.playerData.sdkData = data;

            _guestKey = PlayerPrefs.GetString("bycw_moba_guest_key");
            if (_guestKey == null || _guestKey.Length != 32)
            {
                _guestKey = utils.rand_str(32);
            }
            Mir.Instance.cmd.login.Login2GuestReq(_guestKey);

        }
        else if (state == ResponseState.Fail)
        {
#if UNITY_ANDROID
            print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            //this.str = "授权失败" + "fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"];
#elif UNITY_IPHONE
			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
#endif
        }
        else if (state == ResponseState.Cancel)
        {
            print("cancel !");
           // this.str = "取消授权";
        }
    }

我这里的做法是微信授权成功后,自己新建一个对象把sdk 的信息存在我本地,ShareSDK里面也有相关的数据接口,看你自己的实现方式,

//sdk 回调数据
public class SdkInfo
{
    public string userID;
    public string icon;
    public string token;
    public string expiresTime;
    public string openid;
    public string nickname;
    public string province;         //省份
    public string country;          //国家
    public string refresh_token;
    public string expiresIn;
    public string city;
    public string unionid;
    public string gender;           //性别  0 == 男

}

获取头像,直接封装一个方法出来,

   /// <summary>
    /// 获取头像
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public IEnumerator LoadImage_userIcon(Image userIcon)
    {
    	//Image 用来现在微信头像
        if (sdkData != null)
        {

            Debug.Log("微信头像");
            UnityWebRequest request = UnityWebRequestTexture.GetTexture(sdkData.icon);
            yield return request.SendWebRequest();

            Texture2D texture2D = DownloadHandlerTexture.GetContent(request);
            userIcon.sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), Vector2.zero);

        }

    }

    public SdkInfo sdkData { get; set; }
### Unity 中使用 ShareSDK 实现微信登录 #### 配置准备工作 为了使微信登录功能正常工作,需先完成必要的配置。这包括但不限于在 `Assets/Plugins/Android/assets` 文件夹中的 `ShareSDK.xml` 文件里指定应用特有的 AppKey 和对应的微信平台 ID 及 Secret[^2]。 ```xml <AppKey>your_app_key</AppKey> <Platform id="wechat"> <AppId>your_wechat_app_id</AppId> <AppSecret>your_wechat_secret</AppSecret> </Platform> ``` #### 调整脚本文件 针对仅需要支持微信登录的情况,可以简化默认生成的部分代逻辑。具体来说是在 `ShareSDKDevInfo.cs` 以及 `ShareSDK.cs` 这两个主要负责处理社交网络交互的类中移除不必要的部分,并专注于微信相关的初始化和事件响应函数[^3]。 #### 编写登录接口 下面是一个简单的 C# 方法用于触发微信授权流程: ```csharp public void OnWeChatLogin() { // 初始化 ShareSDK 平台参数 var platform = new Wechat(); // 设置回调监听器来接收登录结果 platform.SetUserListener(new UserActionListener()); // 开始执行登录操作 platform.Authorize(); } ``` 此方法应当被绑定至某个 UI 组件(比如按钮),以便玩家点击时调用微信认证对话框[^4]。 #### 处理返回数据 当用户同意或拒绝权限请求后,系统会通过之前设定好的监听者对象 (`UserActionListener`) 将最终状态反馈回来。此时可以在该类内部重载相应的方法来进行后续动作,例如保存用户的 OpenID 或 UnionID 到本地存储等。 ```csharp private class UserActionListener : Java.Lang.Object, IOnekeyShareCallback { public void onComplete(SHARE_MEDIA p0, int p1) { Debug.Log("WeChat Login Success"); // 获取并打印用户信息 var userInfo = ShareSDK.GetUserInfo(p0); Debug.Log($"OpenID: {userInfo.OpenId}, NickName: {userInfo.NickName}"); } public void onError(SHARE_MEDIA p0, ResponseState p1, Throwable p2, int p3) { Debug.LogError("Error occurred during login."); } } ``` 以上即为基于 ShareSDKUnity 工程内集成微信登录的大致步骤概述[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值