From 033275833521f7dcc00958380195cb0c1dd5d2b4 Mon Sep 17 00:00:00 2001 From: tech Date: Thu, 9 Jan 2025 17:25:30 +0800 Subject: [PATCH] [U] Sync n3 --- .../tysdk/Editor/AndroidBuildProcessor.cs | 40 +++--- .../Editor/AndroidBuildProcessor.cs.meta | 2 +- .../tysdk/Editor/IOSBuildProcessor.cs | 16 +-- .../tysdk/Files/google-services.json.meta | 2 +- .../tysdk/Plugins/Android/SDKManager.java | 7 +- .../Packages/tysdk/Plugins/asap.core.dll | Bin 104960 -> 0 bytes .../Packages/tysdk/Plugins/asap.core.dll.meta | 87 ------------- .../Packages/tysdk/Plugins/iOS/Firebase.meta | 2 +- .../Packages/tysdk/Runtime/TYSdkFacade.cs | 114 ++++++++++-------- .../Packages/tysdk/Runtime/tysdk.asmdef | 4 +- 10 files changed, 98 insertions(+), 176 deletions(-) delete mode 100644 sdk-intergration/Packages/tysdk/Plugins/asap.core.dll delete mode 100644 sdk-intergration/Packages/tysdk/Plugins/asap.core.dll.meta diff --git a/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs b/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs index 31f8eea..6cdfd70 100644 --- a/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs +++ b/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs @@ -1,20 +1,20 @@ -using System.IO; -using UnityEditor.Android; - -namespace tysdk.editor -{ - - public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject - { - public int callbackOrder => 1; - - public void OnPostGenerateGradleAndroidProject(string path) - { - UnityEngine.Debug.Log($"OnPostGenerateGradleAndroidProject {path}"); - var projectPath = Directory.GetParent(path).ToString(); - var googleServicesJsonPath = "Packages/tysdk/Files/google-services.json"; - var googleServicesTargetPath = Path.Combine(projectPath, "launcher/google-services.json"); - File.Copy(googleServicesJsonPath, googleServicesTargetPath, true); - } - } -} +using System.IO; +using UnityEditor.Android; + +namespace tysdk.editor +{ + + public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject + { + public int callbackOrder => 1; + + public void OnPostGenerateGradleAndroidProject(string path) + { + UnityEngine.Debug.Log($"OnPostGenerateGradleAndroidProject {path}"); + var projectPath = Directory.GetParent(path).ToString(); + var googleServicesJsonPath = "Packages/tysdk/Files/google-services.json"; + var googleServicesTargetPath = Path.Combine(projectPath, "launcher/google-services.json"); + File.Copy(googleServicesJsonPath, googleServicesTargetPath, true); + } + } +} diff --git a/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs.meta b/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs.meta index 94687ef..c586b13 100644 --- a/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs.meta +++ b/sdk-intergration/Packages/tysdk/Editor/AndroidBuildProcessor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a2476ed86dea148a3b7327293f8372cd +guid: 56f87573a715b418e8502b3402d41a44 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/sdk-intergration/Packages/tysdk/Editor/IOSBuildProcessor.cs b/sdk-intergration/Packages/tysdk/Editor/IOSBuildProcessor.cs index 70df5ec..ef11a9d 100644 --- a/sdk-intergration/Packages/tysdk/Editor/IOSBuildProcessor.cs +++ b/sdk-intergration/Packages/tysdk/Editor/IOSBuildProcessor.cs @@ -55,6 +55,14 @@ namespace tysdk.editor File.WriteAllText(mainAppPath, newContent); } + private static void ProceeFirebasePlist(string target, PBXProject proj, string root) + { + var plistPath = Path.Combine("Packages/tysdk/Files", "GoogleService-Info.plist"); + File.Copy(plistPath, $"{root}/GoogleService-Info.plist", true); + var plistGuid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist", PBXSourceTree.Source); + proj.AddFileToBuild(target, plistGuid); + } + private static void XCodeSetSigingAndCapbilities(string target, PBXProject proj, string root) { var entitlementsContent = File.ReadAllText("Packages/tysdk/Files/Unity-iPhone.entitlements"); @@ -66,14 +74,6 @@ namespace tysdk.editor //proj.AddCapability(target, PBXCapabilityType.AssociatedDomains, "Unity-iPhone/Unity-iPhone.entitlements"); } - private static void ProceeFirebasePlist(string target, PBXProject proj, string root) - { - var plistPath = Path.Combine("Packages/tysdk/Files", "GoogleService-Info.plist"); - File.Copy(plistPath, $"{root}/GoogleService-Info.plist", true); - var plistGuid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist", PBXSourceTree.Source); - proj.AddFileToBuild(target, plistGuid); - } - private static void ProcessBuildSettings(PBXProject proj) { string target = proj.TargetGuidByName("GameAssembly"); diff --git a/sdk-intergration/Packages/tysdk/Files/google-services.json.meta b/sdk-intergration/Packages/tysdk/Files/google-services.json.meta index 5b32ace..d1b4a78 100644 --- a/sdk-intergration/Packages/tysdk/Files/google-services.json.meta +++ b/sdk-intergration/Packages/tysdk/Files/google-services.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: de52d9ff9949f4d54b71776fb23da414 +guid: fe43ff94ee6dd4dc980ffa685191687c TextScriptImporter: externalObjects: {} userData: diff --git a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java index b595b5a..3fc6ba6 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java +++ b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java @@ -72,13 +72,8 @@ public class SDKManager { if (i == 0) { JSONObject serverResponse = new JSONObject(s); JSONObject userInfo = serverResponse.getJSONObject("result"); - JSONObject userInfoReorganization = new JSONObject(); - userInfoReorganization.put("userId", userInfo.optString("userId")); - userInfoReorganization.put("token", userInfo.optString("token")); - userInfoReorganization.put("jwttoken", userInfo.optString("jwttoken")); - userInfoReorganization.put("loginChannelTypeC", userInfo.optString("loginChannelTypeC")); JSONObject userInfoResult = new JSONObject(); - userInfoResult.put("result", userInfoReorganization); + userInfoResult.put("result", userInfo); result.put("respObj", userInfoResult); } else { result.put("errStr", s); diff --git a/sdk-intergration/Packages/tysdk/Plugins/asap.core.dll b/sdk-intergration/Packages/tysdk/Plugins/asap.core.dll deleted file mode 100644 index dab26ccc459e67e3cffac3ae1063e38cbb97419e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104960 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 1U`#a|7x#Q)f7%oX3k%&&^au$rPi6-(M zMl!vlR1!NSSST}`LbcT%7p^r<-YZ#t@{+MQs)*L-`q{H_)FK(@n*Rv|@ zUcCwlg+#W`kPh4(X-L@j*cB@M(A}{!Cz>8j_KRJsqnS|GLFe=0T~^V9YvJVX8|(}S zc^Uq1trvfUM3_-|^pjBW;$uc+jiDa6IW?NkDzI^XLSTG2H^j_6J!vNH38NdGd{!0 z3lmWB*kbQ%tn&|keb$}ATfwvVV0ng+JPJKU{5a1i3G4HB#sBzUFVR>ueLNOIn#(z|mb$<* zf~x${$VY-anCKM0JWS{_!(WxT;PFAeKN9~!@;2c=*NQ)6l||Iado_^1fMH61WH9r1 zr11at5zVbvIL#9N3pw?wcpxx5*qR)bBWsE&vQlVvUaJB&K)$I#1Dpi2YKHo fcf$kq)6cJ~2mT~-+DA`5`s*s-Q@a13d*J^7s@aUx diff --git a/sdk-intergration/Packages/tysdk/Plugins/asap.core.dll.meta b/sdk-intergration/Packages/tysdk/Plugins/asap.core.dll.meta deleted file mode 100644 index fce6a44..0000000 --- a/sdk-intergration/Packages/tysdk/Plugins/asap.core.dll.meta +++ /dev/null @@ -1,87 +0,0 @@ -fileFormatVersion: 2 -guid: f09db8f4c73f97540a96ebe183df5fd1 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/sdk-intergration/Packages/tysdk/Plugins/iOS/Firebase.meta b/sdk-intergration/Packages/tysdk/Plugins/iOS/Firebase.meta index 9076a1f..9cfa941 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/iOS/Firebase.meta +++ b/sdk-intergration/Packages/tysdk/Plugins/iOS/Firebase.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bacddd479751940f38f3f6cbe40aed5c +guid: 07220c05f1f0b4944b33ce5b6d053876 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs index 950e7a5..11fa23e 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs @@ -14,35 +14,14 @@ namespace tysdk { public class AccountInfo { -#if UNITY_ANDROID - - private static Dictionary accoutTypeMap = new Dictionary(){ - {EAccoutType.hwGoogle.ToString(), EAccoutType.hwGoogle}, - {EAccoutType.hwFacebook.ToString(), EAccoutType.hwFacebook}, - {"tyGuest", EAccoutType.hwGuest} - }; -#else - - private static Dictionary accoutTypeMap = new Dictionary(){ - {"google", EAccoutType.hwGoogle}, - {"fb", EAccoutType.hwFacebook}, - {"tyGuest", EAccoutType.hwGuest}, - {"ios13", EAccoutType.Apple} - }; -#endif - public int userId; public string token; public string jwtToken; public string strUserId => userId.ToString(); - public string channelstr { - set{ - channel = accoutTypeMap[value]; - linkedAccout.Add(channel); - } - } public HashSet linkedAccout = new HashSet(); - public EAccoutType channel {get; private set;} + public EAccoutType channel {get; set;} + public string userName; + public string avatar; private const string KEY_ACCOUNT_INFO = "KEY_ACCOUNT_INFO"; @@ -54,23 +33,30 @@ namespace tysdk } } - public void AddLinkedAccount(string channel) + private static Dictionary accoutTypeMap = new Dictionary(){ + {"google", EAccoutType.hwGoogle}, + {"fb", EAccoutType.hwFacebook}, + {"tyGuest", EAccoutType.hwGuest}, + {"ios13", EAccoutType.Apple} + }; + + private static EAccoutType ConvertAccoutType(string accountType) { - if(accoutTypeMap.TryGetValue(channel, out var accoutType)) + if (accoutTypeMap.ContainsKey(accountType)) { - if (!linkedAccout.Contains(accoutType)) - { - linkedAccout.Add(accoutType); - } + return accoutTypeMap[accountType]; } + return (EAccoutType)Enum.Parse(typeof(EAccoutType), accountType); } public void Save() { JObject jInfo = new JObject(); - jInfo["channel"] = accoutTypeMap.First(x => x.Value == channel).Key; + jInfo["channel"] = channel.ToString(); jInfo["token"] = token; jInfo["userId"] = userId; + jInfo["userName"] = userName; + jInfo["avatar"] = avatar; jInfo["jwtToken"] = jwtToken; jInfo["linkedAccout"] = string.Join(",", linkedAccout.Select(x => x.ToString())); PlayerPrefs.SetString(KEY_ACCOUNT_INFO, jInfo.ToString()); @@ -86,14 +72,26 @@ namespace tysdk if (PlayerPrefs.HasKey(KEY_ACCOUNT_INFO)) { var jInfo = JObject.Parse(PlayerPrefs.GetString(KEY_ACCOUNT_INFO)); - return new AccountInfo() + var accountInfo = new AccountInfo() { userId = (int)jInfo["userId"], token = (string)jInfo["token"], - channelstr = (string)jInfo["channel"], + channel = ConvertAccoutType((string)jInfo["channel"]), jwtToken = (string)jInfo["jwtToken"], - linkedAccout = jInfo["linkedAccout"].ToString().Split(',').Select(x => (EAccoutType)Enum.Parse(typeof(EAccoutType), x)).ToHashSet() + linkedAccout = jInfo["linkedAccout"].ToString().Split(',').Select(x => ConvertAccoutType(x)).ToHashSet() }; + + if(jInfo.TryGetValue("userName", out var userName)) + { + accountInfo.userName = (string) userName; + } + + if(jInfo.TryGetValue("avatar", out var avatar)) + { + accountInfo.avatar = (string)avatar; + } + + return accountInfo; } else { @@ -184,10 +182,15 @@ namespace tysdk UnityBridgeFunc.UnityLogin(accoutType); - return await taskSource.Task; - + var loginInfo = await taskSource.Task; + if(loginInfo.isSuccess) + { + _accountInfo.channel = accoutType; + _accountInfo.AddLinkedAccount(accoutType); + _accountInfo.Save(); + } + return loginInfo; #endif - } public async Task LoginByToken() @@ -203,7 +206,12 @@ namespace tysdk UnityBridgeFunc.UnityLoginByTokenFun(accoutInfo.token); - return await taskSource.Task; + var loginInfo = await taskSource.Task; + if(loginInfo.isSuccess) + { + _accountInfo.Save(); + } + return loginInfo; } public void LoginResult(string json) @@ -221,7 +229,6 @@ namespace tysdk var userId = (int)loginData["userId"]; var token = (string)loginData["token"]; var jwtToken = (string)loginData["jwttoken"]; - var channelstr = (string)loginData["loginChannelTypeC"]; var savedInfo = AccountInfo.GetSavedAccoutInfo(); if(savedInfo == null || savedInfo.userId != userId) @@ -229,19 +236,16 @@ namespace tysdk _accountInfo = new AccountInfo() { userId = (int)loginData["userId"], + userName = (string)loginData["userName"], + avatar = (string)loginData["purl"], token = (string)loginData["token"], jwtToken = (string)loginData["jwttoken"], - channelstr = (string)loginData["loginChannelTypeC"] }; - - _accountInfo.Save(); } else { savedInfo.token = token; savedInfo.jwtToken = jwtToken; - savedInfo.AddLinkedAccount(channelstr); - savedInfo.Save(); _accountInfo = savedInfo; } @@ -290,12 +294,13 @@ namespace tysdk var result = await taskSource.Task; if (result.isSuccess) { - var savedInfo = AccountInfo.GetSavedAccoutInfo(); - if(savedInfo != null) + if(_accountInfo == null) + _accountInfo = AccountInfo.GetSavedAccoutInfo(); + + if(_accountInfo != null) { - savedInfo.AddLinkedAccount(accoutType); - savedInfo.Save(); - _accountInfo = savedInfo; + _accountInfo.AddLinkedAccount(accoutType); + _accountInfo.Save(); } } @@ -332,6 +337,17 @@ namespace tysdk UnityBridgeFunc.LinkAccount(accoutType); var result = await taskSource.Task; + if (result.isSuccess) + { + if(_accountInfo == null) + _accountInfo = AccountInfo.GetSavedAccoutInfo(); + + if(_accountInfo != null) + { + _accountInfo.AddLinkedAccount(accoutType); + _accountInfo.Save(); + } + } return result.isSuccess; } diff --git a/sdk-intergration/Packages/tysdk/Runtime/tysdk.asmdef b/sdk-intergration/Packages/tysdk/Runtime/tysdk.asmdef index 3036c0f..96408a6 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/tysdk.asmdef +++ b/sdk-intergration/Packages/tysdk/Runtime/tysdk.asmdef @@ -1,9 +1,7 @@ { "name": "tysdk", "rootNamespace": "tysdk", - "references": [ - "GUID:0a958a7eb80a248e1b8bc4553787c209" - ], + "references": [], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false,