chicken_dy/Assets/HCMiniSdk/Scripts/WebGL/HCWX/HCSDKManager.cs

943 lines
34 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#if WEBGL_WX
using System;
using System.Collections.Generic;
using System.Linq;
using HC;
using HC.MiniJSON;
using HC.Plugins;
using UnityEngine;
using UnityEngine.UI;
using WeChatWASM;
public class GameClubDataCallback
{
public int Code;
public string Msg;
public string PlatformMsg;
/// **type说明**
/// | type取值 | 说明 | subKey | GameClubDataByType.value |
/// | ------- | -------------------------------------- | -------- | -------- |
/// | 1 | 加入该游戏圈时间 | 无需传入 | 秒级Unix时间戳 |
/// | 3 | 用户禁言状态 | 无需传入 | 0正常 1禁言 |
/// | 4 | 当天(自然日)点赞贴子数 | 无需传入 | |
/// | 5 | 当天(自然日)评论贴子数 | 无需传入 | |
/// | 6 | 当天(自然日)发表贴子数 | 无需传入 | |
/// | 7 | 当天(自然日)发表视频贴子数 | 无需传入 | |
/// | 8 | 当天(自然日)赞官方贴子数 | 无需传入 | |
/// | 9 | 当天(自然日)评论官方贴子数 | 无需传入 | |
/// | 10 | 当天(自然日)发表到本圈子话题的贴子数 | 传入话题id从mp-游戏圈话题管理处获取 | |
public Dictionary<int, object> Data;
}
public class ShowGameClubCallback
{
public const int CODE_ERROR = -1;
public const int CODE_SUCCESS = 0;
public const int CODE_CLICK = 1;
public const int CODE_BACK_GAME = 99;
public int Code;
public string Msg;
public bool IsClick;
}
public class WxPrivacyCallback
{
public int Code;
public string PrivacyContractName;
public bool NeedAuthorization;
public string Msg;
}
public class WxAuthAuthorizeCallback
{
public string Msg;
public Dictionary<string, bool> AuthSettingDictionary;
public Dictionary<string, string> SubscriptionsSettingDictionary;
public Dictionary<string, bool> MiniprogramAuthSettingDictionary;
public bool SubscriptionsSettingMainSwitch = false;
}
public class WxUserInfo
{
public const int CODE_AUTH_DENY = -2;
public const int CODE_ERROR = -1;
public const int CODE_SUCCESS = 0;
public const int CODE_NOT_AUTHORIZE_1 = 1;
public const int CODE_NOT_AUTHORIZE_2 = 2;
public int Code;
public string Msg;
public string AvatarUrl { get; set; }
public string City { get; set; }
public string Country { get; set; }
public double Gender { get; set; }
public string Language { get; set; }
public string NickName { get; set; }
public string Province { get; set; }
}
public class BoxPosition
{
public readonly int Width;
public readonly int Height;
public readonly int X;
public readonly int Y;
public BoxPosition(RectTransform pRect, Camera pCam = null, bool isPixelRatio = false)
{
var tWorldCorners = new Vector3[4];
pRect.GetWorldCorners(tWorldCorners);
var tTopLeft = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[1]);
var tBottomRight = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[3]);
var tWidth = Mathf.Abs(tBottomRight.x - tTopLeft.x);
var tHeight = Mathf.Abs(tBottomRight.y - tTopLeft.y);
var left = tTopLeft.x;
var top = Screen.height - tTopLeft.y;
var scaleSize = 1.0;
if (isPixelRatio)
{
scaleSize = WX.GetSystemInfoSync().pixelRatio;
}
// 这个地方wx的js代码会自己除以一个换算比例所以C#代码这里就不除了。
// 真实宽度
Width = (int)(tWidth / scaleSize);
// 真实高度
Height = (int)(tHeight / scaleSize);
// 真实x
X = (int)(left / scaleSize);
// 真实y
Y = (int)(top / scaleSize);
}
}
[System.Serializable]
public class OpenDataMessage
{
public const string TypeShowFriendsRank = "showFriendsRank";
public const string TypeSetUserRecord = "setUserRecord";
public const string TypeShowGroupFriendsRank = "showGroupFriendsRank";
// type 用于表明事件类型
public string type;
public string scoreKey;
public int score;
}
public partial class HCSDKManager
{
private Dictionary<RectTransform, WXGameClubButton> _cacheWxGameClubButton = new();
private static Action<ShowGameClubCallback> _ShowGameClubCallback;
private static Action<OnShowListenerResult> OnShowListener = _ =>
{
_ShowGameClubCallback?.Invoke(new ShowGameClubCallback
{
Code = ShowGameClubCallback.CODE_BACK_GAME,
IsClick = true,
Msg = "回到游戏"
});
if (OnShowListener != null)
{
WX.OffShow(OnShowListener);
}
};
#region
/// <summary>
/// 设置用户排行榜的分数
/// </summary>
/// <param name="score">记录</param>
/// <param name="callback">回调【保留】</param>
/// <param name="key">排行榜key【保留】</param>
/// <param name="extra">额外记录【保留】</param>
public void SetUserRecord(int score, Action<bool, string> callback = null, string key = "hc_score", Dictionary<string, object> extra = null)
{
HCDebugger.LogDebug($"[ShowFriendsRank] SetUserRecord score {score}");
// var wxgame = new Dictionary<string, object>
// {
// ["score"] = score,
// ["update_time"] = HCTimeTools.GetCurrentTimestamp()
// };
// var value = new Dictionary<string, object>
// {
// ["wxgame"] = wxgame
// };
// if (extra != null)
// {
// foreach (var keyValuePair in extra)
// {
// value.AddIfNotExists(keyValuePair.Key, keyValuePair.Value);
// }
// }
// var valueString = Json.Serialize(value);
// HCDebugger.LogDebug($"[SetUserRecord] key = {key} value = {value}");
// SetUserCloudStorage(new Dictionary<string, string>
// {
// ["key"] = key,
// ["value"] = valueString
// }, callback);
var openDataMessage = new OpenDataMessage()
{
type = OpenDataMessage.TypeSetUserRecord,
// scoreKey = key,
score = score
};
WXBase.GetOpenDataContext().PostMessage(JsonUtility.ToJson(openDataMessage));
}
/// <summary>
/// 检查权限
/// </summary>
/// <param name="callback"></param>
public void CheckWxFriendInteraction(Action<bool> callback)
{
HCDebugger.LogDebug("[ShowFriendsRank] CheckWxFriendInteraction");
#if UNITY_EDITOR
if (HCTools.GetPlayerPrefsInt("CheckWxFriendInteraction") == 0)
{
HCTools.SavePlayerPrefsInt("CheckWxFriendInteraction", 1);
callback.Invoke(false);
}
else
{
callback.Invoke(true);
}
return;
#endif
GetSetting(result => { callback.Invoke(result.AuthSettingDictionary.TryGetValue("scope.WxFriendInteraction", out var isHave) && isHave); });
}
/// <summary>
/// 申请权限
/// </summary>
/// <param name="callback"></param>
public void ApplyForWxFriendInteraction(Action<bool> callback)
{
HCDebugger.LogDebug("[ShowFriendsRank] ApplyForWxFriendInteraction");
#if UNITY_EDITOR
callback.Invoke(true);
return;
#endif
RequestAuthorize("scope.WxFriendInteraction", callback);
}
/// <summary>
/// 显示排行榜
/// </summary>
/// <param name="gameObject">挂载点</param>
/// <param name="callback">回调 主要用于显示失败,没有权限的时候,游戏处理逻辑</param>
/// <param name="pCam">相机</param>
/// <param name="key">排行榜key【保留】</param>
public void ShowFriendsRankAndRequestAuthorize(GameObject gameObject, Action<int, string> callback = null, Camera pCam = null, string key = "hc_score")
{
CheckWxFriendInteraction(result =>
{
if (result)
{
FriendsRank();
}
else
{
ApplyForWxFriendInteraction(applyResult =>
{
if (applyResult)
{
FriendsRank();
}
else
{
callback?.Invoke(-1, "no permission");
}
});
}
});
return;
void FriendsRank()
{
ShowFriendsRank(gameObject, pCam, key);
callback?.Invoke(0, "success");
}
}
public void ShowFriendsRank(GameObject gameObject, Camera pCam = null, string key = "hc_score")
{
HCDebugger.LogDebug($"[ShowFriendsRank] show open data start key = {key}");
const string prefabName = "Prefabs/hc_FriendsRank";
RawImage rawImage = null;
var tempComponent = gameObject.GetComponent<RawImage>();
if (tempComponent != null)
{
rawImage = tempComponent;
}
var target = gameObject.transform.Find(prefabName.Replace("/", "_"));
if (rawImage == null)
{
if (target == null)
{
var loadedPrefab = Resources.Load(prefabName) as GameObject;
if (loadedPrefab == null) return;
// 实例化加载的Prefab
var instantiatedPrefab = Instantiate(loadedPrefab, gameObject.transform, true);
// 设置实例化后的Prefab的名称为自定义名称
instantiatedPrefab.name = prefabName.Replace("/", "_");
// 设置实例化后的Prefab的位置
// 获取实例化后的Prefab的RectTransform组件
var rectTransform = instantiatedPrefab.GetComponent<RectTransform>();
// 将边距设置为0
rectTransform.offsetMin = Vector2.zero;
rectTransform.offsetMax = Vector2.zero;
instantiatedPrefab.transform.localScale = Vector3.one;
rawImage = instantiatedPrefab.GetComponent<RawImage>();
}
else
{
rawImage = target.GetComponent<RawImage>();
}
}
if (rawImage == null)
{
HCDebugger.LogError("排行榜 - 获取RawImage异常");
return;
}
var pRect = gameObject.GetComponent<RectTransform>();
if (pRect == null)
{
HCDebugger.LogError("排行榜 - 获取盒子位置信息失败");
return;
}
#if UNITY_EDITOR
if (!ColorUtility.TryParseHtmlString("#FF0000", out var color)) return;
rawImage.texture = null;
rawImage.color = color;
return;
#endif
var boxPosition = new BoxPosition(pRect, pCam);
HCDebugger.LogDebug($"[ShowFriendsRank] show open data {boxPosition.X} {boxPosition.Y} {boxPosition.Width} {boxPosition.Height}");
var openDataMessage = new OpenDataMessage()
{
type = OpenDataMessage.TypeShowFriendsRank,
scoreKey = key
};
WXBase.ShowOpenData(rawImage.texture, boxPosition.X, boxPosition.Y, boxPosition.Width, boxPosition.Height);
HCDebugger.LogDebug($"[ShowFriendsRank] show open data {JsonUtility.ToJson(openDataMessage)}");
WXBase.GetOpenDataContext().PostMessage(JsonUtility.ToJson(openDataMessage));
}
public void CloseFriendsRank()
{
HCDebugger.LogDebug("[ShowFriendsRank] CloseFriendsRank");
#if UNITY_EDITOR
return;
#endif
WXBase.HideOpenData();
}
#endregion
/// <summary>
/// 获取当前设置的权限
/// </summary>
/// <param name="callback">回调内容</param>
/// <param name="withSubscriptions">是否同时获取用户订阅消息的订阅状态,默认不获取。</param>
public void GetSetting(Action<WxAuthAuthorizeCallback> callback, bool withSubscriptions = false)
{
WX.GetSetting(new GetSettingOption
{
withSubscriptions = withSubscriptions,
success = result =>
{
var errMsg = result.errMsg;
var authSetting = result.authSetting;
var subscriptionsSetting = result.subscriptionsSetting;
var miniprogramAuthSetting = result.miniprogramAuthSetting;
var authSettingDictionary = new Dictionary<string, bool>();
var subscriptionsSettingDictionary = new Dictionary<string, string>();
var miniprogramAuthSettingDictionary = new Dictionary<string, bool>();
if (authSetting != null)
{
foreach (var keyValuePair in authSetting)
{
authSettingDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}
}
var subscriptionsSettingMainSwitch = false;
if (subscriptionsSetting is { itemSettings: not null })
{
subscriptionsSettingMainSwitch = subscriptionsSetting.mainSwitch;
foreach (var keyValuePair in subscriptionsSetting.itemSettings)
{
subscriptionsSettingDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}
}
if (miniprogramAuthSetting != null)
{
foreach (var keyValuePair in miniprogramAuthSetting)
{
miniprogramAuthSettingDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}
}
callback.Invoke(new WxAuthAuthorizeCallback
{
Msg = errMsg,
AuthSettingDictionary = authSettingDictionary,
SubscriptionsSettingDictionary = subscriptionsSettingDictionary,
MiniprogramAuthSettingDictionary = miniprogramAuthSettingDictionary,
SubscriptionsSettingMainSwitch = subscriptionsSettingMainSwitch
});
},
fail = result =>
{
callback.Invoke(new WxAuthAuthorizeCallback
{
Msg = result.errMsg,
AuthSettingDictionary = new Dictionary<string, bool>(),
SubscriptionsSettingDictionary = new Dictionary<string, string>(),
MiniprogramAuthSettingDictionary = new Dictionary<string, bool>()
});
},
});
}
public void SetUserCloudStorage(Dictionary<string, string> saveData, Action<bool, string> callback)
{
var kvDataList = saveData.Select(kv => new KVData { key = kv.Key, value = kv.Value }).ToArray();
WX.SetUserCloudStorage(new SetUserCloudStorageOption
{
KVDataList = kvDataList,
success = result => { callback?.Invoke(true, result.errMsg); },
fail = result =>
{
HCDebugger.LogError($"[SetUserCloudStorage] error msg = {result.errMsg}");
callback?.Invoke(false, result.errMsg);
}
});
}
public void RequestAuthorize(string scope, Action<bool> callback)
{
WX.Authorize(new AuthorizeOption
{
scope = scope,
success = _ => { callback.Invoke(true); },
fail = result =>
{
HCDebugger.LogError($"[RequestAuthorize] fail = {result.errMsg}");
callback.Invoke(false);
}
});
}
/// <summary>
/// 打开设置权限
/// </summary>
/// <param name="callback">设置权限内容</param>
/// <param name="withSubscriptions">是否同时获取用户订阅消息的订阅状态,默认不获取。</param>
public void OpenSetting(Action<WxAuthAuthorizeCallback> callback, bool withSubscriptions = false)
{
WX.OpenSetting(new OpenSettingOption
{
withSubscriptions = withSubscriptions,
fail = result =>
{
callback.Invoke(new WxAuthAuthorizeCallback
{
Msg = result.errMsg,
AuthSettingDictionary = new Dictionary<string, bool>(),
SubscriptionsSettingDictionary = new Dictionary<string, string>(),
MiniprogramAuthSettingDictionary = new Dictionary<string, bool>()
});
},
success = result =>
{
var errMsg = result.errMsg;
var authSetting = result.authSetting;
var subscriptionsSetting = result.subscriptionsSetting;
var authSettingDictionary = new Dictionary<string, bool>();
var subscriptionsSettingDictionary = new Dictionary<string, string>();
var miniprogramAuthSettingDictionary = new Dictionary<string, bool>();
if (authSetting != null)
{
foreach (var keyValuePair in authSetting)
{
authSettingDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}
}
var subscriptionsSettingMainSwitch = false;
if (subscriptionsSetting is { itemSettings: not null })
{
subscriptionsSettingMainSwitch = subscriptionsSetting.mainSwitch;
foreach (var keyValuePair in subscriptionsSetting.itemSettings)
{
subscriptionsSettingDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}
}
callback.Invoke(new WxAuthAuthorizeCallback
{
Msg = errMsg,
AuthSettingDictionary = authSettingDictionary,
SubscriptionsSettingDictionary = subscriptionsSettingDictionary,
MiniprogramAuthSettingDictionary = miniprogramAuthSettingDictionary,
SubscriptionsSettingMainSwitch = subscriptionsSettingMainSwitch
});
}
});
}
public void GetUserInfo(Action<WxUserInfo> callback)
{
GetSetting(result =>
{
if (result.AuthSettingDictionary.TryGetValue("scope.userInfo", out var hasAuthorize))
{
if (hasAuthorize)
{
WX.GetUserInfo(new GetUserInfoOption
{
success = result =>
{
var errMsg = result.errMsg;
var userInfo = result.userInfo;
var userInfoAvatarUrl = userInfo.avatarUrl;
var userInfoCity = userInfo.city;
var userInfoCountry = userInfo.country;
var userInfoGender = userInfo.gender;
var userInfoLanguage = userInfo.language;
var userInfoNickName = userInfo.nickName;
var userInfoProvince = userInfo.province;
callback.Invoke(new WxUserInfo
{
Code = WxUserInfo.CODE_SUCCESS,
Msg = result.errMsg,
AvatarUrl = userInfoAvatarUrl,
City = userInfoCity,
Country = userInfoCountry,
Gender = userInfoGender,
Language = userInfoLanguage,
NickName = userInfoNickName,
Province = userInfoProvince,
});
},
fail = result =>
{
callback.Invoke(new WxUserInfo
{
Code = WxUserInfo.CODE_ERROR,
Msg = result.errMsg
});
},
complete = result =>
{
var errMsg = result.errMsg;
}
});
}
else
{
callback.Invoke(new WxUserInfo
{
Code = WxUserInfo.CODE_NOT_AUTHORIZE_2,
Msg = result.Msg
});
}
}
else
{
callback.Invoke(new WxUserInfo
{
Code = WxUserInfo.CODE_NOT_AUTHORIZE_1,
Msg = result.Msg
});
}
});
}
WXUserInfoButton _wxUserInfoButton;
public void CreateUserInfoButton(RectTransform pRect, Action<WxUserInfo> callback, Camera pCam = null, string lang = "zh_CN", bool withCredentials = false)
{
var boxPosition = new BoxPosition(pRect, pCam);
_wxUserInfoButton = WXBase.CreateUserInfoButton(boxPosition.X, boxPosition.Y, boxPosition.Width, boxPosition.Height, lang, withCredentials);
_wxUserInfoButton.OnTap(result =>
{
if (result.errCode != 0)
{
callback.Invoke(new WxUserInfo
{
Code = WxUserInfo.CODE_AUTH_DENY,
Msg = result.errMsg,
AvatarUrl = "",
City = "",
Country = "",
Gender = 0,
Language = "",
NickName = "",
Province = "",
});
return;
}
var errMsg = result.errMsg;
var userInfo = result.userInfo;
var userInfoAvatarUrl = userInfo.avatarUrl;
var userInfoCity = userInfo.city;
var userInfoCountry = userInfo.country;
var userInfoGender = userInfo.gender;
var userInfoLanguage = userInfo.language;
var userInfoNickName = userInfo.nickName;
var userInfoProvince = userInfo.province;
var wxUserInfo = new WxUserInfo
{
Code = WxUserInfo.CODE_SUCCESS,
Msg = result.errMsg,
AvatarUrl = userInfoAvatarUrl,
City = userInfoCity,
Country = userInfoCountry,
Gender = userInfoGender,
Language = userInfoLanguage,
NickName = userInfoNickName,
Province = userInfoProvince,
};
var hciBaseAnalytics = HCAnalyticsManager.Instance.GetAnalyticsPlugin(TrackEventPlatform.TD);
((HCTDAnalyticsWebGL)hciBaseAnalytics)?.TrackWxUserInfo(wxUserInfo);
callback.Invoke(wxUserInfo);
});
_wxUserInfoButton.Show();
}
public void CloseUserInfoButton()
{
_wxUserInfoButton?.Hide();
_wxUserInfoButton?.Destroy();
_wxUserInfoButton = null;
}
public void GetWxPrivacySetting(Action<WxPrivacyCallback> callback)
{
WX.GetPrivacySetting(new GetPrivacySettingOption
{
success = result =>
{
var resultPrivacyContractName = result.privacyContractName;
var resultNeedAuthorization = result.needAuthorization;
var errMsg = result.errMsg;
callback?.Invoke(new WxPrivacyCallback
{
Code = 0,
Msg = errMsg,
NeedAuthorization = resultNeedAuthorization,
PrivacyContractName = resultPrivacyContractName,
});
},
fail = result =>
{
var errMsg = result.errMsg;
callback?.Invoke(new WxPrivacyCallback
{
Code = -1,
Msg = errMsg
});
},
complete = result =>
{
var errMsg = result.errMsg;
}
});
}
/// <summary>
///
/// </summary>
/// <param name="buttonImageUrl">按钮的url</param>
/// <param name="pRect">显示位置</param>
/// <param name="pCam"></param>
/// <param name="openlink"></param>
/// <param name="hasRedDot"></param>
/// <param name="callback">显示/点击回调</param>
public void ShowGameClubButton(string buttonImageUrl, RectTransform pRect, Camera pCam = null, string openlink = null, bool? hasRedDot = null, Action<ShowGameClubCallback> callback = null)
{
#if UNITY_EDITOR
callback?.Invoke(new ShowGameClubCallback
{
Code = ShowGameClubCallback.CODE_SUCCESS,
IsClick = false
});
return;
#endif
if (_cacheWxGameClubButton.ContainsKey(pRect))
{
HCDebugger.LogError("游戏圈子Icon正在显示");
callback?.Invoke(new ShowGameClubCallback
{
Code = ShowGameClubCallback.CODE_ERROR,
Msg = "游戏圈子Icon正在显示"
});
return;
}
var tWorldCorners = new Vector3[4];
pRect.GetWorldCorners(tWorldCorners);
var tTopLeft = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[1]);
var tBottomRight = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[3]);
var tWidth = Mathf.Abs(tBottomRight.x - tTopLeft.x);
var tHeight = Mathf.Abs(tBottomRight.y - tTopLeft.y);
var left = tTopLeft.x;
var top = Screen.height - tTopLeft.y;
// 0.5
var scaleSize = WX.GetSystemInfoSync().pixelRatio;
// 真实宽度
var width = (int)(tWidth / scaleSize);
// 真实高度
var height = (int)(tHeight / scaleSize);
// 真实x
var x = (int)(left / scaleSize);
// 真实y
var y = (int)(top / scaleSize);
var gameClubButton = WXBase.CreateGameClubButton(new WXCreateGameClubButtonParam
{
type = GameClubButtonType.image,
image = buttonImageUrl,
style = new GameClubButtonStyle
{
left = x,
top = y,
width = width,
height = height,
},
openlink = openlink,
hasRedDot = hasRedDot
});
callback?.Invoke(new ShowGameClubCallback
{
Code = ShowGameClubCallback.CODE_SUCCESS,
Msg = "show success"
});
gameClubButton.OnTap(() =>
{
callback?.Invoke(new ShowGameClubCallback
{
Code = ShowGameClubCallback.CODE_CLICK,
Msg = "click success",
IsClick = true
});
_ShowGameClubCallback = callback;
WX.OnShow(OnShowListener);
});
_cacheWxGameClubButton.Add(pRect, gameClubButton);
}
/// <summary>
/// 关闭指定位置的button如果不传关闭所有button
/// 要和传入的是同一个对象
/// </summary>
/// <param name="pRect"></param>
public void CloseGameClubButton(RectTransform pRect = null)
{
if (pRect == null)
{
foreach (var wxGameClubButton in _cacheWxGameClubButton.Values)
{
wxGameClubButton?.Hide();
wxGameClubButton?.OffTap();
wxGameClubButton?.Destroy();
}
_cacheWxGameClubButton.Clear();
}
else
{
if (_cacheWxGameClubButton.TryGetValue(pRect, out var button))
{
button?.Hide();
button?.OffTap();
button?.Destroy();
_cacheWxGameClubButton.Remove(pRect);
}
else
{
HCDebugger.LogError($"传入的RectTransform 不存在 {pRect}");
}
}
}
public void GetGameClubData(Action<GameClubDataCallback> call = null, string sessionId = "")
{
var list = new List<DataType>
{
new() { type = 1 },
new() { type = 3 },
new() { type = 4 },
new() { type = 5 },
new() { type = 6 },
new() { type = 7 },
new() { type = 8 },
new() { type = 9 }
};
if (!string.IsNullOrEmpty(sessionId))
{
list.Add(new DataType { type = 10, subKey = sessionId });
}
var dataTypeList = list.ToArray();
WX.RequirePrivacyAuthorize(new RequirePrivacyAuthorizeOption
{
complete = result => { HCDebugger.LogDebug($"[RequirePrivacyAuthorize] [complete] errMsg = {result.errMsg}"); },
fail = result =>
{
call?.Invoke(new GameClubDataCallback
{
Code = -1,
Msg = "RequirePrivacyAuthorize fail",
PlatformMsg = result.errMsg,
Data = new Dictionary<int, object>()
});
HCDebugger.LogDebug($"[RequirePrivacyAuthorize] [fail] errMsg = {result.errMsg}");
},
success = result =>
{
HCDebugger.LogDebug($"[RequirePrivacyAuthorize] [success] errMsg = {result.errMsg}");
WX.GetGameClubData(new GetGameClubDataOption
{
dataTypeList = dataTypeList,
complete = generalCallbackResult =>
{
var errMsg = generalCallbackResult.errMsg;
HCDebugger.LogDebug($"[GetGameClubData] [complete] errMsg = {errMsg}");
},
fail = generalCallbackResult =>
{
var errMsg = generalCallbackResult.errMsg;
call?.Invoke(new GameClubDataCallback
{
Code = -2,
Msg = "GetGameClubData fail",
PlatformMsg = errMsg,
Data = new Dictionary<int, object>()
});
HCDebugger.LogDebug($"[GetGameClubData] [fail] errMsg = {errMsg}");
},
success = getGameClubDataSuccessCallbackResult =>
{
var errMsg = getGameClubDataSuccessCallbackResult.errMsg;
var signature = getGameClubDataSuccessCallbackResult.signature;
var iv = getGameClubDataSuccessCallbackResult.iv;
var encryptedData = getGameClubDataSuccessCallbackResult.encryptedData;
var cloudID = getGameClubDataSuccessCallbackResult.cloudID;
HCDebugger.LogDebug($"[GetGameClubData] [success] errMsg = {errMsg} signature = {signature} iv = {iv} encryptedData = {encryptedData}");
// 需要传递给川哥解析
if (string.IsNullOrEmpty(iv) || string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(encryptedData))
{
call?.Invoke(new GameClubDataCallback
{
Code = -3,
Msg = "GameClubData is Null",
PlatformMsg = errMsg,
Data = new Dictionary<int, object>()
});
return;
}
HCServer.Instance.WxDataDecrypt(iv, encryptedData, signature, (code, msg, result) =>
{
if (code == 0)
{
try
{
var resultContent = result.content;
var contentData = (Dictionary<string, object>)Json.Deserialize(resultContent);
var watermark = contentData["watermark"];
var dataList = (List<object>)contentData["dataList"];
var resultData = new Dictionary<int, object>();
foreach (Dictionary<string, object> item in dataList)
{
var dataType = (Dictionary<string, object>)item["dataType"];
var type = dataType["type"];
var value = item["value"];
resultData.Add(int.Parse("" + type), value);
}
call?.Invoke(new GameClubDataCallback
{
Code = 0,
Msg = "success",
PlatformMsg = msg,
Data = resultData
});
}
catch (Exception e)
{
call?.Invoke(new GameClubDataCallback
{
Code = -4,
Msg = "Server Data Exception",
PlatformMsg = e.Message,
Data = new Dictionary<int, object>()
});
}
}
else
{
call?.Invoke(new GameClubDataCallback
{
Code = code,
Msg = "Server Fail",
PlatformMsg = msg,
Data = new Dictionary<int, object>()
});
}
});
},
});
}
});
}
}
#endif