From aae1a5870f4e6a9f8aaaea803596deee067421ab Mon Sep 17 00:00:00 2001 From: LuanShi Date: Tue, 18 Feb 2025 17:21:21 +0800 Subject: [PATCH] =?UTF-8?q?sdk=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Image/dly_btn_sjdl.png | Bin 0 -> 43356 bytes Assets/Image/dly_btn_sjdl.png.meta | 110 +++ Assets/Image/dly_btn_wxdl.png | Bin 0 -> 41340 bytes Assets/Image/dly_btn_wxdl.png.meta | 110 +++ Assets/Plugins/SDK.meta | 8 + Assets/Plugins/SDK/AndroidImpl.cs | 41 + .../SDK/AndroidImpl.cs.meta} | 2 +- Assets/Plugins/SDK/CommSDK.cs | 92 +++ Assets/Plugins/SDK/CommSDK.cs.meta | 12 + Assets/Plugins/SDK/CommSDKImpl.cs | 22 + Assets/Plugins/SDK/CommSDKImpl.cs.meta | 11 + Assets/Plugins/SDK/EnumState.cs | 67 ++ Assets/Plugins/SDK/EnumState.cs.meta | 12 + Assets/Plugins/SDK/MiniJSON.cs | 745 ++++++++++++++++++ Assets/Plugins/SDK/MiniJSON.cs.meta | 12 + Assets/Plugins/SDK/NativeBridgeUtil.cs | 101 +++ Assets/Plugins/SDK/NativeBridgeUtil.cs.meta | 11 + Assets/Scenes/Init.unity | 443 ++++++++++- Assets/Scripts/LoginAndPay/LoginView.cs | 208 ++--- Assets/WeChatLogin.cs | 48 -- 20 files changed, 1910 insertions(+), 145 deletions(-) create mode 100644 Assets/Image/dly_btn_sjdl.png create mode 100644 Assets/Image/dly_btn_sjdl.png.meta create mode 100644 Assets/Image/dly_btn_wxdl.png create mode 100644 Assets/Image/dly_btn_wxdl.png.meta create mode 100644 Assets/Plugins/SDK.meta create mode 100644 Assets/Plugins/SDK/AndroidImpl.cs rename Assets/{WeChatLogin.cs.meta => Plugins/SDK/AndroidImpl.cs.meta} (83%) create mode 100644 Assets/Plugins/SDK/CommSDK.cs create mode 100644 Assets/Plugins/SDK/CommSDK.cs.meta create mode 100644 Assets/Plugins/SDK/CommSDKImpl.cs create mode 100644 Assets/Plugins/SDK/CommSDKImpl.cs.meta create mode 100644 Assets/Plugins/SDK/EnumState.cs create mode 100644 Assets/Plugins/SDK/EnumState.cs.meta create mode 100644 Assets/Plugins/SDK/MiniJSON.cs create mode 100644 Assets/Plugins/SDK/MiniJSON.cs.meta create mode 100644 Assets/Plugins/SDK/NativeBridgeUtil.cs create mode 100644 Assets/Plugins/SDK/NativeBridgeUtil.cs.meta delete mode 100644 Assets/WeChatLogin.cs diff --git a/Assets/Image/dly_btn_sjdl.png b/Assets/Image/dly_btn_sjdl.png new file mode 100644 index 0000000000000000000000000000000000000000..acbca0cbec2806bae437f1d1fa6794881822970f GIT binary patch literal 43356 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 literal 0 HcmV?d00001 diff --git a/Assets/Image/dly_btn_sjdl.png.meta b/Assets/Image/dly_btn_sjdl.png.meta new file mode 100644 index 0000000..fc77963 --- /dev/null +++ b/Assets/Image/dly_btn_sjdl.png.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 27f253e451b91484b9dddd97028c0699 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Image/dly_btn_wxdl.png b/Assets/Image/dly_btn_wxdl.png new file mode 100644 index 0000000000000000000000000000000000000000..159a989221f7f1170c44508b4b5b4d68f8cf46de GIT binary patch literal 41340 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"currentActivity"); + InitSDK(callbackObj, callbackMethod); + } + + private string WxAppId = "wxe3784691d154266f"; + private string WxAppSecret = "e11c9277651822d48a00425d4ffc08e2"; + + public override void InitSDK(string callbackObj, string callbackMethod) + { + if (currActivity != null) + { + currActivity.Call("initSdk", callbackObj, callbackMethod, WxAppId, WxAppSecret); + } + } + + /// + /// Authorize the specified platform. + /// + public override void Authorize(int type, int reqID) + { + if (currActivity != null) + { + currActivity.Call("authorize", type, reqID); + } + } + } + + } +} \ No newline at end of file diff --git a/Assets/WeChatLogin.cs.meta b/Assets/Plugins/SDK/AndroidImpl.cs.meta similarity index 83% rename from Assets/WeChatLogin.cs.meta rename to Assets/Plugins/SDK/AndroidImpl.cs.meta index 339ae51..de8dfa3 100644 --- a/Assets/WeChatLogin.cs.meta +++ b/Assets/Plugins/SDK/AndroidImpl.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ae686ed626ce4f844bd3b8a007577ae7 +guid: 7aa1e0ac5ca98644d896e65604559a3f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/SDK/CommSDK.cs b/Assets/Plugins/SDK/CommSDK.cs new file mode 100644 index 0000000..f9bca73 --- /dev/null +++ b/Assets/Plugins/SDK/CommSDK.cs @@ -0,0 +1,92 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Reflection; +using ETModel.com.commsdk.unity3d; +using ETModel; + +namespace ETHotfix +{ + + namespace com.commsdk.unity3d + { + /// + ///公用的原生sdk + /// + public class CommSDKComponent : MonoBehaviour + { + private int WeReqID; + private CommSDKImpl commSdkUtils; + public EventWechatHandler responseHandler; + public void Init() + { + if (Application.platform == RuntimePlatform.Android) + { + Debug.Log("GameObject.name = " + gameObject.name); + commSdkUtils = new AndroidImpl(gameObject.name, "_Callback"); + } + } + + /// + /// callback the specified data. + /// + /// + /// Data. + /// + private void _Callback(string data) + { + if (data == null) + { + Debug.Log("OnWechatLogin DataIsNull" + data + "DataIsNull Data"); + return; + } + + Hashtable res = (Hashtable)MiniJSON.jsonDecode(data); + if (res == null || res.Count <= 0) + { + Debug.Log("OnWechatLogin ResIsNull" + data + "ResIsNull Data"); + return; + } + + int status = Convert.ToInt32(res["status"]); + int reqID = Convert.ToInt32(res["reqID"]); + int action = Convert.ToInt32(res["action"]); + Hashtable resp = null; + switch ((RespState)status) + { + case RespState.Success: + case RespState.Fail: + resp = (Hashtable)res["res"]; + break; + case RespState.Cancel: + break; + } + if (resp == null) + { + Debug.Log("OnWechatLogin RespIsNull" + data + "RespIsNull"); + } + + if (null != responseHandler) + { + responseHandler(reqID, (ActionType)action, (RespState)status, resp); + } + } + + public int Authorize(int type) + { + WeReqID++; + commSdkUtils.Authorize(type, WeReqID); + return WeReqID; + } + + /// + /// Event result listener. + /// + public delegate void EventWechatHandler(int reqID, ActionType type, RespState state, Hashtable data); + } + + } +} \ No newline at end of file diff --git a/Assets/Plugins/SDK/CommSDK.cs.meta b/Assets/Plugins/SDK/CommSDK.cs.meta new file mode 100644 index 0000000..0976e31 --- /dev/null +++ b/Assets/Plugins/SDK/CommSDK.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 359fd104cc365a345847d9b6c9bf8d75 +timeCreated: 1485338619 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SDK/CommSDKImpl.cs b/Assets/Plugins/SDK/CommSDKImpl.cs new file mode 100644 index 0000000..c4005c5 --- /dev/null +++ b/Assets/Plugins/SDK/CommSDKImpl.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using System.Collections; +namespace ETModel +{ + namespace com.commsdk.unity3d + { + + public abstract class CommSDKImpl + { + + public abstract void InitSDK(string objName, string methodName); + + /// + /// Authorize the specified platform. + /// + public abstract void Authorize(int type, int reqID); + } + + + } + +} diff --git a/Assets/Plugins/SDK/CommSDKImpl.cs.meta b/Assets/Plugins/SDK/CommSDKImpl.cs.meta new file mode 100644 index 0000000..a5b4e0a --- /dev/null +++ b/Assets/Plugins/SDK/CommSDKImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 276cac4abf4b98e47bd6304ab6ed6e6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SDK/EnumState.cs b/Assets/Plugins/SDK/EnumState.cs new file mode 100644 index 0000000..0309bbc --- /dev/null +++ b/Assets/Plugins/SDK/EnumState.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using System.Collections; + +namespace ETHotfix +{ + + namespace com.commsdk.unity3d + { + + + + /// + /// Response state. + /// + public enum RespState + { + Begin = 0, //Begin + Success = 1, //Success + Fail = 2, //Failure + Cancel = 3 //Cancel + } + + /// + /// action type + /// + public enum ActionType + { + Begin = 0, + Authorize = 1, //授权 + Share = 2, //分享 + Pay = 3, //支付 + Location = 4, // 定位返回 + XianLiaoAuthorize = 5, //闲聊授权 + DuoLiaoAuthorize = 6 //多聊授权 + } + + + public enum PlatformType + { + WeChat = 0, //微信好友 + WeChatMoments = 1, //微信朋友圈 + XlChat = 2, //闲聊 + DuoLiao = 3, //多聊 + MoWang = 4 //默往 + } + + /// + /// Content type. + /// + public enum ContentType + { + Auto = 0, //自动(iOS为自动,安卓仅为Text) + Text = 1, //文字分享 + Image = 2, //图文分享 + Webpage = 4, //链接分享 + Music = 5, //音乐分享 + Video = 6, //视频分享 + App = 7, //应用分享 + File = 8, //附件分享 + Emoji = 9, //表情分享 + LINK = 10 //闲聊链接分享 + } + + + + } +} diff --git a/Assets/Plugins/SDK/EnumState.cs.meta b/Assets/Plugins/SDK/EnumState.cs.meta new file mode 100644 index 0000000..f752789 --- /dev/null +++ b/Assets/Plugins/SDK/EnumState.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8ffdaed2b28fc2348988d036464d68b1 +timeCreated: 1485338619 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SDK/MiniJSON.cs b/Assets/Plugins/SDK/MiniJSON.cs new file mode 100644 index 0000000..921e34f --- /dev/null +++ b/Assets/Plugins/SDK/MiniJSON.cs @@ -0,0 +1,745 @@ +using System; +using System.Collections; +using System.Text; +using System.Collections.Generic; + +namespace ETModel +{ + + /* Based on the JSON parser from + * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + * + * I simplified it so that it doesn't throw exceptions + * and can be used in Unity iPhone with maximum code stripping. + */ + /// + /// This class encodes and decodes JSON strings. + /// Spec. details, see http://www.json.org/ + /// + /// JSON uses Arrays and Objects. These correspond here to the datatypes ArrayList and Hashtable. + /// All numbers are parsed to doubles. + /// + + + public class MiniJSON + { + private const int TOKEN_NONE = 0; + private const int TOKEN_CURLY_OPEN = 1; + private const int TOKEN_CURLY_CLOSE = 2; + private const int TOKEN_SQUARED_OPEN = 3; + private const int TOKEN_SQUARED_CLOSE = 4; + private const int TOKEN_COLON = 5; + private const int TOKEN_COMMA = 6; + private const int TOKEN_STRING = 7; + private const int TOKEN_NUMBER = 8; + private const int TOKEN_TRUE = 9; + private const int TOKEN_FALSE = 10; + private const int TOKEN_NULL = 11; + private const int BUILDER_CAPACITY = 2000; + + /// + /// On decoding, this value holds the position at which the parse failed (-1 = no error). + /// + protected static int lastErrorIndex = -1; + protected static string lastDecode = ""; + + + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// An ArrayList, a Hashtable, a double, a string, null, true, or false + public static object jsonDecode(string json) + { + // save the string for debug information + MiniJSON.lastDecode = json; + + if (json != null) + { + char[] charArray = json.ToCharArray(); + int index = 0; + bool success = true; + object value = MiniJSON.parseValue(charArray, ref index, ref success); + + if (success) + MiniJSON.lastErrorIndex = -1; + else + MiniJSON.lastErrorIndex = index; + + return value; + } + else + { + return null; + } + } + + + /// + /// Converts a Hashtable / ArrayList / Dictionary(string,string) object into a JSON string + /// + /// A Hashtable / ArrayList + /// A JSON encoded string, or null if object 'json' is not serializable + public static string jsonEncode(object json) + { + var builder = new StringBuilder(BUILDER_CAPACITY); + var success = MiniJSON.serializeValue(json, builder); + + return (success ? builder.ToString() : null); + } + + + /// + /// On decoding, this function returns the position at which the parse failed (-1 = no error). + /// + /// + public static bool lastDecodeSuccessful() + { + return (MiniJSON.lastErrorIndex == -1); + } + + + /// + /// On decoding, this function returns the position at which the parse failed (-1 = no error). + /// + /// + public static int getLastErrorIndex() + { + return MiniJSON.lastErrorIndex; + } + + + /// + /// If a decoding error occurred, this function returns a piece of the JSON string + /// at which the error took place. To ease debugging. + /// + /// + public static string getLastErrorSnippet() + { + if (MiniJSON.lastErrorIndex == -1) + { + return ""; + } + else + { + int startIndex = MiniJSON.lastErrorIndex - 5; + int endIndex = MiniJSON.lastErrorIndex + 15; + if (startIndex < 0) + startIndex = 0; + + if (endIndex >= MiniJSON.lastDecode.Length) + endIndex = MiniJSON.lastDecode.Length - 1; + + return MiniJSON.lastDecode.Substring(startIndex, endIndex - startIndex + 1); + } + } + + + #region Parsing + + protected static Hashtable parseObject(char[] json, ref int index) + { + Hashtable table = new Hashtable(); + int token; + + // { + nextToken(json, ref index); + + bool done = false; + while (!done) + { + token = lookAhead(json, index); + if (token == MiniJSON.TOKEN_NONE) + { + return null; + } + else if (token == MiniJSON.TOKEN_COMMA) + { + nextToken(json, ref index); + } + else if (token == MiniJSON.TOKEN_CURLY_CLOSE) + { + nextToken(json, ref index); + return table; + } + else + { + // name + string name = parseString(json, ref index); + if (name == null) + { + return null; + } + + // : + token = nextToken(json, ref index); + if (token != MiniJSON.TOKEN_COLON) + return null; + + // value + bool success = true; + object value = parseValue(json, ref index, ref success); + if (!success) + return null; + + table[name] = value; + } + } + + return table; + } + + + protected static ArrayList parseArray(char[] json, ref int index) + { + ArrayList array = new ArrayList(); + + // [ + nextToken(json, ref index); + + bool done = false; + while (!done) + { + int token = lookAhead(json, index); + if (token == MiniJSON.TOKEN_NONE) + { + return null; + } + else if (token == MiniJSON.TOKEN_COMMA) + { + nextToken(json, ref index); + } + else if (token == MiniJSON.TOKEN_SQUARED_CLOSE) + { + nextToken(json, ref index); + break; + } + else + { + bool success = true; + object value = parseValue(json, ref index, ref success); + if (!success) + return null; + + array.Add(value); + } + } + + return array; + } + + + protected static object parseValue(char[] json, ref int index, ref bool success) + { + switch (lookAhead(json, index)) + { + case MiniJSON.TOKEN_STRING: + return parseString(json, ref index); + case MiniJSON.TOKEN_NUMBER: + return parseNumber(json, ref index); + case MiniJSON.TOKEN_CURLY_OPEN: + return parseObject(json, ref index); + case MiniJSON.TOKEN_SQUARED_OPEN: + return parseArray(json, ref index); + case MiniJSON.TOKEN_TRUE: + nextToken(json, ref index); + return Boolean.Parse("TRUE"); + case MiniJSON.TOKEN_FALSE: + nextToken(json, ref index); + return Boolean.Parse("FALSE"); + case MiniJSON.TOKEN_NULL: + nextToken(json, ref index); + return null; + case MiniJSON.TOKEN_NONE: + break; + } + + success = false; + return null; + } + + + protected static string parseString(char[] json, ref int index) + { + string s = ""; + char c; + + eatWhitespace(json, ref index); + + // " + c = json[index++]; + + bool complete = false; + while (!complete) + { + if (index == json.Length) + break; + + c = json[index++]; + if (c == '"') + { + complete = true; + break; + } + else if (c == '\\') + { + if (index == json.Length) + break; + + c = json[index++]; + if (c == '"') + { + s += '"'; + } + else if (c == '\\') + { + s += '\\'; + } + else if (c == '/') + { + s += '/'; + } + else if (c == 'b') + { + s += '\b'; + } + else if (c == 'f') + { + s += '\f'; + } + else if (c == 'n') + { + s += '\n'; + } + else if (c == 'r') + { + s += '\r'; + } + else if (c == 't') + { + s += '\t'; + } + else if (c == 'u') + { + int remainingLength = json.Length - index; + if (remainingLength >= 4) + { + char[] unicodeCharArray = new char[4]; + Array.Copy(json, index, unicodeCharArray, 0, 4); + + uint codePoint = UInt32.Parse(new string(unicodeCharArray), System.Globalization.NumberStyles.HexNumber); + + // convert the integer codepoint to a unicode char and add to string + s += Char.ConvertFromUtf32((int)codePoint); + + // skip 4 chars + index += 4; + } + else + { + break; + } + } + } + else + { + s += c; + } + + } + + if (!complete) + return null; + + return s; + } + + + protected static double parseNumber(char[] json, ref int index) + { + eatWhitespace(json, ref index); + + int lastIndex = getLastIndexOfNumber(json, index); + int charLength = (lastIndex - index) + 1; + char[] numberCharArray = new char[charLength]; + + Array.Copy(json, index, numberCharArray, 0, charLength); + index = lastIndex + 1; + return Double.Parse(new string(numberCharArray)); // , CultureInfo.InvariantCulture); + } + + + protected static int getLastIndexOfNumber(char[] json, int index) + { + int lastIndex; + for (lastIndex = index; lastIndex < json.Length; lastIndex++) + if ("0123456789+-.eE".IndexOf(json[lastIndex]) == -1) + { + break; + } + return lastIndex - 1; + } + + + protected static void eatWhitespace(char[] json, ref int index) + { + for (; index < json.Length; index++) + if (" \t\n\r".IndexOf(json[index]) == -1) + { + break; + } + } + + + protected static int lookAhead(char[] json, int index) + { + int saveIndex = index; + return nextToken(json, ref saveIndex); + } + + + protected static int nextToken(char[] json, ref int index) + { + eatWhitespace(json, ref index); + + if (index == json.Length) + { + return MiniJSON.TOKEN_NONE; + } + + char c = json[index]; + index++; + switch (c) + { + case '{': + return MiniJSON.TOKEN_CURLY_OPEN; + case '}': + return MiniJSON.TOKEN_CURLY_CLOSE; + case '[': + return MiniJSON.TOKEN_SQUARED_OPEN; + case ']': + return MiniJSON.TOKEN_SQUARED_CLOSE; + case ',': + return MiniJSON.TOKEN_COMMA; + case '"': + return MiniJSON.TOKEN_STRING; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + return MiniJSON.TOKEN_NUMBER; + case ':': + return MiniJSON.TOKEN_COLON; + } + index--; + + int remainingLength = json.Length - index; + + // false + if (remainingLength >= 5) + { + if (json[index] == 'f' && + json[index + 1] == 'a' && + json[index + 2] == 'l' && + json[index + 3] == 's' && + json[index + 4] == 'e') + { + index += 5; + return MiniJSON.TOKEN_FALSE; + } + } + + // true + if (remainingLength >= 4) + { + if (json[index] == 't' && + json[index + 1] == 'r' && + json[index + 2] == 'u' && + json[index + 3] == 'e') + { + index += 4; + return MiniJSON.TOKEN_TRUE; + } + } + + // null + if (remainingLength >= 4) + { + if (json[index] == 'n' && + json[index + 1] == 'u' && + json[index + 2] == 'l' && + json[index + 3] == 'l') + { + index += 4; + return MiniJSON.TOKEN_NULL; + } + } + + return MiniJSON.TOKEN_NONE; + } + + #endregion + + + #region Serialization + + protected static bool serializeObjectOrArray(object objectOrArray, StringBuilder builder) + { + if (objectOrArray is Hashtable) + { + return serializeObject((Hashtable)objectOrArray, builder); + } + else if (objectOrArray is ArrayList) + { + return serializeArray((ArrayList)objectOrArray, builder); + } + else + { + return false; + } + } + + + protected static bool serializeObject(Hashtable anObject, StringBuilder builder) + { + builder.Append("{"); + + IDictionaryEnumerator e = anObject.GetEnumerator(); + bool first = true; + while (e.MoveNext()) + { + string key = e.Key.ToString(); + object value = e.Value; + + if (!first) + { + builder.Append(", "); + } + + serializeString(key, builder); + builder.Append(":"); + if (!serializeValue(value, builder)) + { + return false; + } + + first = false; + } + + builder.Append("}"); + return true; + } + + + protected static bool serializeDictionary(Dictionary dict, StringBuilder builder) + { + builder.Append("{"); + + bool first = true; + foreach (var kv in dict) + { + if (!first) + builder.Append(", "); + + serializeString(kv.Key, builder); + builder.Append(":"); + serializeString(kv.Value, builder); + + first = false; + } + + builder.Append("}"); + return true; + } + + + protected static bool serializeArray(ArrayList anArray, StringBuilder builder) + { + builder.Append("["); + + bool first = true; + for (int i = 0; i < anArray.Count; i++) + { + object value = anArray[i]; + + if (!first) + { + builder.Append(", "); + } + + if (!serializeValue(value, builder)) + { + return false; + } + + first = false; + } + + builder.Append("]"); + return true; + } + + + protected static bool serializeValue(object value, StringBuilder builder) + { + //Type t = value.GetType(); + //UnityEngine.Debug.Log("type: " + t.ToString() + " isArray: " + t.IsArray); + + if (value == null) + { + builder.Append("null"); + } + else if (value.GetType().IsArray) + { + serializeArray(new ArrayList((ICollection)value), builder); + } + else if (value is string) + { + serializeString((string)value, builder); + } + else if (value is Char) + { + serializeString(Convert.ToString((char)value), builder); + } + else if (value is decimal) + { + serializeString(Convert.ToString((decimal)value), builder); + } + else if (value is Hashtable) + { + serializeObject((Hashtable)value, builder); + } + else if (value is Dictionary) + { + serializeDictionary((Dictionary)value, builder); + } + else if (value is ArrayList) + { + serializeArray((ArrayList)value, builder); + } + else if ((value is Boolean) && ((Boolean)value == true)) + { + builder.Append("true"); + } + else if ((value is Boolean) && ((Boolean)value == false)) + { + builder.Append("false"); + } + else if (value.GetType().IsPrimitive) + { + serializeNumber(Convert.ToDouble(value), builder); + } + else + { + return false; + } + + return true; + } + + + protected static void serializeString(string aString, StringBuilder builder) + { + builder.Append("\""); + + char[] charArray = aString.ToCharArray(); + for (int i = 0; i < charArray.Length; i++) + { + char c = charArray[i]; + if (c == '"') + { + builder.Append("\\\""); + } + else if (c == '\\') + { + builder.Append("\\\\"); + } + else if (c == '\b') + { + builder.Append("\\b"); + } + else if (c == '\f') + { + builder.Append("\\f"); + } + else if (c == '\n') + { + builder.Append("\\n"); + } + else if (c == '\r') + { + builder.Append("\\r"); + } + else if (c == '\t') + { + builder.Append("\\t"); + } + else + { + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) + { + builder.Append(c); + } + else + { + builder.Append("\\u" + Convert.ToString(codepoint, 16).PadLeft(4, '0')); + } + } + } + + builder.Append("\""); + } + + + protected static void serializeNumber(double number, StringBuilder builder) + { + builder.Append(Convert.ToString(number)); // , CultureInfo.InvariantCulture)); + } + + #endregion + + } + + + + #region Extension methods + + public static class MiniJsonExtensions + { + public static string toJson(this Hashtable obj) + { + return MiniJSON.jsonEncode(obj); + } + + + public static string toJson(this Dictionary obj) + { + return MiniJSON.jsonEncode(obj); + } + + + public static ArrayList arrayListFromJson(this string json) + { + return MiniJSON.jsonDecode(json) as ArrayList; + } + + + public static Hashtable hashtableFromJson(this string json) + { + return MiniJSON.jsonDecode(json) as Hashtable; + } + } + + #endregion + +} + + diff --git a/Assets/Plugins/SDK/MiniJSON.cs.meta b/Assets/Plugins/SDK/MiniJSON.cs.meta new file mode 100644 index 0000000..9ceabb3 --- /dev/null +++ b/Assets/Plugins/SDK/MiniJSON.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f15edb53581ba284f959684b8b76e9a4 +timeCreated: 1485338621 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SDK/NativeBridgeUtil.cs b/Assets/Plugins/SDK/NativeBridgeUtil.cs new file mode 100644 index 0000000..b798c1d --- /dev/null +++ b/Assets/Plugins/SDK/NativeBridgeUtil.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using System.Collections; +using ETHotfix.com.commsdk.unity3d; +using System.Text.RegularExpressions; +using System; +using System.Collections.Generic; +using ETModel; +using ETModel.com.commsdk.unity3d; + + + +/// +/// 原生code 与Unity通信 +/// +public class NativeBridgeUtil : MonoBehaviour +{ + + // 单例模式 + public static NativeBridgeUtil Instance { get; private set; } + + CommSDKComponent csdk; + public void Awake() + { + // 实现单例模式 + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + else + { + Instance = this; + DontDestroyOnLoad(gameObject); + } + gameObject.name = "NativeReceiver"; + csdk = gameObject.AddComponent(); + csdk.Init(); + csdk.responseHandler = OnWechatResponse; + } + + public void Start() + { + +#if UNITY_ANDROID //android系统 + AndroidJNI.AttachCurrentThread(); +#endif + } + + #region 通用SDK + //0 1 微信 2 闲聊 3多聊 + public void WeChatLogin(int type) + { +#if UNITY_ANDROID || UNITY_IOS || UNITY_IPHONE + csdk.Authorize(type); +#endif + } + + void OnWechatResponse(int reqID, ActionType type, RespState state, Hashtable data) + { + Debug.Log("OnWechatResponse: reqid=" + reqID + ",action=" + type + ",state=" + state); + switch (type) + { + case ActionType.Authorize: + OnAuthorizedHandler(reqID, state, data); + break; + case ActionType.Share: + break; + case ActionType.Pay: + break; + case ActionType.Location: + break; + } + } + + //微信申请授权后回调 + void OnAuthorizedHandler(int reqID, RespState state, Hashtable result) + { + if (state == RespState.Success) + { + //UILoginCtrl.Self.OnWechatLogin(result); + Debug.Log("OnAuthorizedHandler->Success:result=" + result); + string unionid = result["unionid"].ToString(); + Debug.Log("OnAuthorizedHandler->Success:unionid=" + unionid); + } + else if (state == RespState.Fail) + { + string errorMsg = result["error_msg"].ToString(); + string statck = result["stack"].ToString(); + Debug.Log("OnAuthorizedHandler->Fail:errorMsg=" + errorMsg + ",statck=" + statck); + } + else if (state == RespState.Cancel) + { + Debug.Log("OnAuthorizedHandler: Cancel"); + } + } + + #endregion +} + + + diff --git a/Assets/Plugins/SDK/NativeBridgeUtil.cs.meta b/Assets/Plugins/SDK/NativeBridgeUtil.cs.meta new file mode 100644 index 0000000..074cdfd --- /dev/null +++ b/Assets/Plugins/SDK/NativeBridgeUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 845cd578293274746aef9615b7c5048c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Init.unity b/Assets/Scenes/Init.unity index a5a0556..78d05b9 100644 --- a/Assets/Scenes/Init.unity +++ b/Assets/Scenes/Init.unity @@ -471,6 +471,76 @@ MonoBehaviour: m_FirstSelected: {fileID: 0} m_sendNavigationEvents: 1 m_DragThreshold: 5 +--- !u!1001 &24259649 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3375001057570166699, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_Name + value: NativeReceiver + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3452914372860290207, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 8586933507933314822, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, type: 3} --- !u!1 &39222622 GameObject: m_ObjectHideFlags: 0 @@ -645,6 +715,80 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 45376342} m_CullTransparentMesh: 0 +--- !u!1 &160562201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 160562202} + - component: {fileID: 160562204} + - component: {fileID: 160562203} + m_Layer: 5 + m_Name: Image (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &160562202 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 160562201} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.6, y: 0.6, z: 1} + m_Children: [] + m_Father: {fileID: 705294046} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 295.86} + m_SizeDelta: {x: 1130, y: 526} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &160562203 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 160562201} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 63d2a9582e37ede419f177ee40443388, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &160562204 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 160562201} + m_CullTransparentMesh: 0 --- !u!1 &179665039 GameObject: m_ObjectHideFlags: 0 @@ -996,6 +1140,44 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 656682076} m_CullTransparentMesh: 0 +--- !u!1 &705294045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705294046} + m_Layer: 5 + m_Name: loginBthTrans + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &705294046 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705294045} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1719537384} + - {fileID: 1445372296} + - {fileID: 160562202} + m_Father: {fileID: 1392791841} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -172.5} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &867391742 GameObject: m_ObjectHideFlags: 0 @@ -1282,12 +1464,12 @@ GameObject: m_Component: - component: {fileID: 1302099225} m_Layer: 5 - m_Name: GameObject + m_Name: PhoneTrans m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1302099225 RectTransform: m_ObjectHideFlags: 0 @@ -1485,6 +1667,7 @@ RectTransform: - {fileID: 1796563212} - {fileID: 1302099225} - {fileID: 1768218918} + - {fileID: 705294046} m_Father: {fileID: 75} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1511,6 +1694,127 @@ MonoBehaviour: SendCodeButton: {fileID: 1957083329} SendCodeButtonText: {fileID: 192227197} LoginButton: {fileID: 867391744} + PhoneTrans: {fileID: 1302099224} + loginBthTrans: {fileID: 705294045} + PhoneLoginButton: {fileID: 1445372299} + WxLoginButton: {fileID: 1719537387} +--- !u!1 &1445372295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1445372296} + - component: {fileID: 1445372298} + - component: {fileID: 1445372297} + - component: {fileID: 1445372299} + m_Layer: 5 + m_Name: phoneLogin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1445372296 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445372295} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 705294046} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 250, y: 0} + m_SizeDelta: {x: 327, y: 109} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1445372297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445372295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: b712e65990021194795e721125b0ad46, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &1445372298 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445372295} + m_CullTransparentMesh: 0 +--- !u!114 &1445372299 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445372295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1445372297} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null --- !u!1 &1622434996 GameObject: m_ObjectHideFlags: 0 @@ -1652,6 +1956,123 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1622434996} m_CullTransparentMesh: 0 +--- !u!1 &1719537383 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1719537384} + - component: {fileID: 1719537386} + - component: {fileID: 1719537385} + - component: {fileID: 1719537387} + m_Layer: 5 + m_Name: wxLogin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1719537384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719537383} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 705294046} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -250, y: 0} + m_SizeDelta: {x: 327, y: 109} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1719537385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719537383} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 27f253e451b91484b9dddd97028c0699, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &1719537386 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719537383} + m_CullTransparentMesh: 0 +--- !u!114 &1719537387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719537383} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1719537385} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null --- !u!1 &1722103140 GameObject: m_ObjectHideFlags: 0 @@ -2014,6 +2435,24 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1957083327} m_CullTransparentMesh: 0 +--- !u!1 &2072301149 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3375001057570166699, guid: 9b0f4d97ae0b01149a8ba8adb6bd35e2, + type: 3} + m_PrefabInstance: {fileID: 24259649} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2072301150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072301149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 845cd578293274746aef9615b7c5048c, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &9222194805866882313 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/LoginAndPay/LoginView.cs b/Assets/Scripts/LoginAndPay/LoginView.cs index c58c5e4..d135898 100644 --- a/Assets/Scripts/LoginAndPay/LoginView.cs +++ b/Assets/Scripts/LoginAndPay/LoginView.cs @@ -1,95 +1,115 @@ -using System; -using System.Collections; -using Cysharp.Threading.Tasks; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UI; - -public class LoginView : MonoBehaviour -{ - public InputField PhoneNumberInputField; - public InputField VerifyCodeInputField; - public Text ErrorText; - public Button SendCodeButton; - public Text SendCodeButtonText; - public Button LoginButton; - - - // Start is called before the first frame update - void Start() +using System; +using System.Collections; +using Cysharp.Threading.Tasks; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using ETHotfix; + +public class LoginView : MonoBehaviour +{ + public InputField PhoneNumberInputField; + public InputField VerifyCodeInputField; + public Text ErrorText; + public Button SendCodeButton; + public Text SendCodeButtonText; + public Button LoginButton; + + public GameObject PhoneTrans; + public GameObject loginBthTrans; + + public Button PhoneLoginButton; + public Button WxLoginButton; + + + // Start is called before the first frame update + void Start() + { + SendCodeButton.onClick.AddListener(SendVerifyCode); + LoginButton.onClick.AddListener(Login); + PhoneLoginButton.onClick.AddListener(ClickPhoneLoginButton); + WxLoginButton.onClick.AddListener(ClickWxLoginButton); + // 读取缓存的手机号 + if (PlayerPrefs.HasKey("CachedPhoneNumber")) + { + string cachedPhoneNumber = PlayerPrefs.GetString("CachedPhoneNumber"); + if (!string.IsNullOrEmpty(cachedPhoneNumber)) + { + HttpManager.Instance.phoneNum = cachedPhoneNumber; + SceneManager.LoadScene("LoadingScreen"); + } + } + } + + private void SendVerifyCode() + { + SendVerifyCodeTask().Forget(); + } + + async UniTask SendVerifyCodeTask() + { + CodeResponse codeResponse = await HttpManager.Instance.RequestPost("request-code", new CodeRequest(){phone = PhoneNumberInputField.text}); + if (codeResponse.message == "验证码已发送") + { + SendCodeButton.interactable = false; + Countdown(30).Forget(); + } + + ErrorText.text = codeResponse.message; + + } + + private async UniTaskVoid Countdown(int duration) + { + // SendCodeButtonText.color = Color.gray; + while (duration > 0) + { + SendCodeButtonText.text = $"发送验证码({duration})"; + await UniTask.Delay(TimeSpan.FromSeconds(1), ignoreTimeScale: false); + duration--; + } + SendCodeButtonText.text = "发送验证码"; + SendCodeButton.interactable = true; + // SendCodeButtonText.color = Color.black; + } + + + + void Login() + { + LoginTask().Forget(); + NativeBridgeUtil.Instance.WeChatLogin(1); + } + + async UniTask LoginTask() + { + string phonenum = PhoneNumberInputField.text; + LoginResponse loginResponse = await HttpManager.Instance.RequestPost("verify-code", new LoginRequest(){phone = phonenum, code = VerifyCodeInputField.text}); + if (loginResponse.message == "验证成功") + { + // 缓存手机号 + PlayerPrefs.SetString("CachedPhoneNumber", phonenum); + PlayerPrefs.Save(); + + //ShowHomeView(phonenum); + //SceneManager.LoadSceneAsync("LoadingScreen"); + HttpManager.Instance.phoneNum = phonenum; + SceneManager.LoadScene("LoadingScreen"); + } + else + { + ErrorText.text = loginResponse.message; + } + } + + void ClickPhoneLoginButton() { - SendCodeButton.onClick.AddListener(SendVerifyCode); - LoginButton.onClick.AddListener(Login); - // 读取缓存的手机号 - if (PlayerPrefs.HasKey("CachedPhoneNumber")) - { - string cachedPhoneNumber = PlayerPrefs.GetString("CachedPhoneNumber"); - if (!string.IsNullOrEmpty(cachedPhoneNumber)) - { - HttpManager.Instance.phoneNum = cachedPhoneNumber; - SceneManager.LoadScene("LoadingScreen"); - } - } - } - - private void SendVerifyCode() - { - SendVerifyCodeTask().Forget(); - } - - async UniTask SendVerifyCodeTask() - { - CodeResponse codeResponse = await HttpManager.Instance.RequestPost("request-code", new CodeRequest(){phone = PhoneNumberInputField.text}); - if (codeResponse.message == "验证码已发送") - { - SendCodeButton.interactable = false; - Countdown(30).Forget(); - } - - ErrorText.text = codeResponse.message; - - } - - private async UniTaskVoid Countdown(int duration) - { - // SendCodeButtonText.color = Color.gray; - while (duration > 0) - { - SendCodeButtonText.text = $"发送验证码({duration})"; - await UniTask.Delay(TimeSpan.FromSeconds(1), ignoreTimeScale: false); - duration--; - } - SendCodeButtonText.text = "发送验证码"; - SendCodeButton.interactable = true; - // SendCodeButtonText.color = Color.black; - } - - - - void Login() - { - LoginTask().Forget(); - } - - async UniTask LoginTask() - { - string phonenum = PhoneNumberInputField.text; - LoginResponse loginResponse = await HttpManager.Instance.RequestPost("verify-code", new LoginRequest(){phone = phonenum, code = VerifyCodeInputField.text}); - if (loginResponse.message == "验证成功") - { - // 缓存手机号 - PlayerPrefs.SetString("CachedPhoneNumber", phonenum); - PlayerPrefs.Save(); - - //ShowHomeView(phonenum); - //SceneManager.LoadSceneAsync("LoadingScreen"); - HttpManager.Instance.phoneNum = phonenum; - SceneManager.LoadScene("LoadingScreen"); - } - else - { - ErrorText.text = loginResponse.message; - } - } - -} + + } + + void ClickWxLoginButton() + { + NativeBridgeUtil.Instance.WeChatLogin(1); + } + +} diff --git a/Assets/WeChatLogin.cs b/Assets/WeChatLogin.cs deleted file mode 100644 index b9b80db..0000000 --- a/Assets/WeChatLogin.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class WeChatLogin : MonoBehaviour -{ - - // 单例模式 - public static WeChatLogin Instance { get; private set; } - - private void Awake() - { - // 实现单例模式 - if (Instance != null && Instance != this) - { - Destroy(gameObject); - } - else - { - Instance = this; - DontDestroyOnLoad(gameObject); - } - } - - // 发起微信登录 - public void Login() - { -#if UNITY_ANDROID && !UNITY_EDITOR - using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) - { - AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); - // 调用你在 Android 插件中实现的微信登录方法 - using (AndroidJavaClass wxApiClass = new AndroidJavaClass("com.yourcompany.wxapi.WXEntryActivity")) - { - // 这里可以调用一个静态方法,例如 LoginWeChat() - wxApiClass.CallStatic("LoginWeChat", "your_state_value"); - } - } -#endif - } - - // 该方法会被 Android 端通过 UnitySendMessage 调用,传回登录结果(JSON格式字符串) - public void OnWeChatLoginResult(string result) - { - Debug.Log("微信登录返回:" + result); - // 在此解析 result,得到 unionid、openid 等信息 - } -}