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; }