commit fa9e70346274c980201353a8e78c76d03f4c66d3 Author: ci-gitlab Date: Thu Jul 20 14:07:06 2023 +0800 feat:update upm diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..74bd7f7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,222 @@ +# ChangeLog + +## 3.13.0 +### Fixed Bugs +- Android & iOS: 支持新的 scope (basic_info & email) +- Android: 修复一些情况下的错误崩溃 +- iOS: 支持更安全的有端授权协议 + +## 3.11.1 + +### Fixed Bugs +- iOS: 修复登录模块对系统 URL 回调的使用方式 + +### Dependencies + +- TapTap.Common v3.11.1 + +## 3.11.0 + +### Dependencies + +- TapTap.Common v3.11.0 + +## 3.10.0 + +### Dependencies + +- TapTap.Common v3.10.0 + +## 3.9.0 + +### Dependencies + +- TapTap.Common v3.9.0 + +## 3.8.0 + +### Dependencies + +- TapTap.Common v3.8.0 + +## 3.7.1 + +### Dependencies + +- TapTap.Common v3.7.1 + +## 3.7.0 + +### Optimization and fixed bugs +- 添加获取互关列表接口 + +### Dependencies + +- TapTap.Common v3.7.0 + + +## 3.6.3 + +### Optimization and fixed bugs +- Android 尝试修复静态变量丢失的问题 + +### Dependencies + +- TapTap.Common v3.6.3 + +## 3.6.1 + +### Optimization and fixed bugs +- UI 优化 + +### Dependencies + +- TapTap.Common v3.6.1 + +## 3.6.0 + +### Optimization and fixed bugs + +- 优化未安装 iOS Support 时 Editor 编译问题 + +### Dependencies + +- TapTap.Common v3.6.0 + +## 3.5.2 + +### New Feature + +- 新增 PC Web 授权登录 + +### Dependencies + +- TapTap.Common v3.5.2 + +## 3.5.0 + +### Optimization and fixed bugs +- 内嵌 web 登录页面支持异形刘海屏的正常展示 + +### Dependencies + +- TapTap.Common v3.5.0 + +## 3.4.0 + +### Dependencies + +- TapTap.Common v3.4.0 + +## 3.3.0 + +### Optimization and fixed bugs + +- 优化 iOS Plist.info 修改方式,防止覆盖工程原有配置。 + +### Dependencies + +- TapTap.Common v3.3.0 + +## 3.2.1 + +### New Feature + +- 新增 TapTap 登录权限配置范围 + +### Dependencies + +- TapTap.Common v3.2.0 + +## 3.2.0 + +### New Feature + +- 支持 PC 端使用 TapTap 登录 + +### Dependencies + +- TapTap.Common v3.2.0 + +## 3.1.0 + +### Dependencies + +- TapTap.Common v3.1.0 + +## 3.0.0 + +### New Feature + +- 新增 TapTap OAuth 相关接口 + ``` + // 登陆 + TapLogin.Login(); + // 登出 + TapLogin.Logout(); + ``` +- 新增篝火测试资格 + ``` + var boolean = await TapLogin.GetTestQualification(); + ``` + +### Dependencies + +- TapTap.Common v3.0.0 + +## 2.1.7 + +### Optimization + +- 更新 iOS 拦截 openUrl 方式 + +### Dependencies + +- TapTap.Common v2.1.7 + +### 2.1.6 + +### Optimization and fixed bugs + +- 修复 TapTap 授权登录的一些 UI 问题 + +### Dependencies + +- TapTap.Common v2.1.6 + +### 2.1.5 + +### New Feature + +- 云玩内唤起 TapTap 客户端登陆 + +### 2.1.4 + +### Dependencies + +- TapTap.Common v2.1.4 + +### 2.1.3 + +### Dependencies + +- TapTap.Common v2.1.3 + +### 2.1.2 + +### Dependencies + +- TapTap.Common v2.1.2 + +## 2.1.1 + +### Dependencies + +- TapTap.Common v2.1.1 + +## 2.0.0 + +### Feature + +* TapTap Login + diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 0000000..4a33cab --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eeb07bf1995f44e02bf1e2f6c996794c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation.meta b/Documentation.meta new file mode 100644 index 0000000..08d25da --- /dev/null +++ b/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2c93960c5ec14a968e71901b4eaeaab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/README.md b/Documentation/README.md new file mode 100644 index 0000000..ef0eb1d --- /dev/null +++ b/Documentation/README.md @@ -0,0 +1,58 @@ +## TapTap.Login + +## 使用前提 + +使用 TapTap.Login 前提是必须依赖以下库: + +* [TapTap.Common](https://github.com/TapTap/TapCommon-Unity.git) + +> 如果游戏需要支持 PC 平台 ,则参考[ PC配置文档 ](PC.md) + +### 1.初始化 + +#### 如果配合 `TapBoostrap` 使用,则不需要调用初始化接口 + +```c# +TapLogin.Init(string clientID); +``` + +### 2.唤起 TapTap 网页 或者 TapTap 客户端进行登陆 + +登陆成功之后,会返回 `AccessToken` + +```c# +var accessToken = await TapLogin.Login(); +``` + +配置权限范围 + +```c# +// 默认使用 public_profile + +var accessToken = await TapLogin.Login(new []{"public_profile"}) +; +``` + +### 3. 获取 TapTap AccessToken + +```c# +var accessToken = await TapLogin.GetAccessToken(); +``` + +### 4. 获取 TapTap Profile + +```c# +var profile = await TapLogin.FetchProfile(); +``` + +### 5. 获取篝火测试资格 + +```c# +var boolean = await TapLogin.GetTestQualification(); +``` + +### 6. 退出登陆 + +```c# +TapLogin.Logout(); +``` \ No newline at end of file diff --git a/Documentation/README.md.meta b/Documentation/README.md.meta new file mode 100644 index 0000000..365fa39 --- /dev/null +++ b/Documentation/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bba3a05fa298643d1a20c3cab5614c17 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile.meta b/Mobile.meta new file mode 100644 index 0000000..badc8c5 --- /dev/null +++ b/Mobile.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b342e9aa171b743c5996484a958afba5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Editor.meta b/Mobile/Editor.meta new file mode 100644 index 0000000..69dfef6 --- /dev/null +++ b/Mobile/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b459e69a01b34fc29e293ebc89f27f6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Editor/TapLoginIOSProcessor.cs b/Mobile/Editor/TapLoginIOSProcessor.cs new file mode 100644 index 0000000..9ae7691 --- /dev/null +++ b/Mobile/Editor/TapLoginIOSProcessor.cs @@ -0,0 +1,67 @@ +using System.IO; +using TapTap.Common.Editor; +using UnityEditor; +using UnityEditor.Callbacks; +#if UNITY_IOS || UNITY_STANDALONE_OSX +using UnityEditor.iOS.Xcode; +#endif +using UnityEngine; + +namespace TapTap.Login.Editor +{ +#if UNITY_IOS || UNITY_STANDALONE_OSX + public static class TapLoginIOSProcessor + { + // 添加标签,unity导出工程后自动执行该函数 + [PostProcessBuild(103)] + public static void OnPostprocessBuild(BuildTarget buildTarget, string path) + { + var parentFolder = Directory.GetParent(Application.dataPath)?.FullName; + + var plistFile = TapFileHelper.RecursionFilterFile(parentFolder + "/Assets/Plugins/", "TDS-Info.plist"); + + if (!plistFile.Exists) + { + Debug.LogError("TapSDK Can't find TDS-Info.plist in Project/Assets/Plugins/!"); + } + + + if (buildTarget is BuildTarget.iOS) + { +#if UNITY_IOS + TapCommonCompile.HandlerPlist(Path.GetFullPath(path), plistFile.FullName); +#endif + } + else if (buildTarget is BuildTarget.StandaloneOSX) + { + Debug.Log($"path:{path}"); + Debug.Log($"path:{Path.GetFullPath(path)}"); + Debug.Log($"dir:{Path.GetDirectoryName(path)}"); + Debug.Log($"dir:{Path.GetFileName(path)}"); + // 获得工程路径 +#if UNITY_2020_1_OR_NEWER + var directory = Path.GetDirectoryName(path); + if (string.IsNullOrEmpty(directory)) + { + directory = ""; + } + + var fileName = Path.GetFileName(path); + if (!fileName.EndsWith(".xcodeproj")) + { + fileName += ".xcodeproj"; + } + + var projPath = Path.Combine(directory, $"{fileName}/project.pbxproj"); +#elif UNITY_2019_1_OR_NEWER + var projPath = Path.Combine(path, "project.pbxproj"); +#else +#endif +#if UNITY_IOS + TapCommonCompile.HandlerPlist(Path.GetFullPath(path), plistFile.FullName, true); +#endif + } + } + } +#endif +} \ No newline at end of file diff --git a/Mobile/Editor/TapLoginIOSProcessor.cs.meta b/Mobile/Editor/TapLoginIOSProcessor.cs.meta new file mode 100644 index 0000000..f0fb142 --- /dev/null +++ b/Mobile/Editor/TapLoginIOSProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 543a4c42d7c774f1cb7a7b18b19c6c5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Editor/TapLoginMobileProcessBuild.cs b/Mobile/Editor/TapLoginMobileProcessBuild.cs new file mode 100644 index 0000000..0d2bfeb --- /dev/null +++ b/Mobile/Editor/TapLoginMobileProcessBuild.cs @@ -0,0 +1,20 @@ +using System; +using UnityEditor.Build.Reporting; +using TapTap.Common.Editor; + +namespace TapTap.Login.Mobile.Editor { + public class TapLoginMobileProcessBuild : SDKLinkProcessBuild { + public override int callbackOrder => 0; + + public override string LinkPath => "TapTap/Login/link.xml"; + + public override LinkedAssembly[] LinkedAssemblies => new LinkedAssembly[] { + new LinkedAssembly { Fullname = "TapTap.Login.Runtime" }, + new LinkedAssembly { Fullname = "TapTap.Login.Mobile.Runtime" } + }; + + public override Func IsTargetPlatform => (report) => { + return BuildTargetUtils.IsSupportMobile(report.summary.platform); + }; + } +} diff --git a/Mobile/Editor/TapLoginMobileProcessBuild.cs.meta b/Mobile/Editor/TapLoginMobileProcessBuild.cs.meta new file mode 100644 index 0000000..77720c6 --- /dev/null +++ b/Mobile/Editor/TapLoginMobileProcessBuild.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa860a43f603e4d569a2efe38e2760d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef b/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef new file mode 100644 index 0000000..e8de837 --- /dev/null +++ b/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "TapTap.Login.Mobile.Editor", + "references": [ + "GUID:616cea76def2d4f059b94440fc8cc03d" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef.meta b/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef.meta new file mode 100644 index 0000000..2ca26db --- /dev/null +++ b/Mobile/Editor/TapTap.Login.Mobile.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 60aa8897230d6419da34689f63383ebd +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime.meta b/Mobile/Runtime.meta new file mode 100644 index 0000000..79d95b6 --- /dev/null +++ b/Mobile/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8126ac1a2c05c468581fbae88a51caad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime/ITapLogin.cs b/Mobile/Runtime/ITapLogin.cs new file mode 100644 index 0000000..c2e0a21 --- /dev/null +++ b/Mobile/Runtime/ITapLogin.cs @@ -0,0 +1,46 @@ +using System.Threading.Tasks; +using TapTap.Common; + +namespace TapTap.Login.Mobile +{ + public interface ITapLogin + { + void Init(string clientID); + + void Init(string clientID, bool isCn, bool roundCorner); + + void ChangeConfig(bool roundCorner, bool isPortrait); + + Task FetchProfile(); + + Task GetProfile(); + + Task GetAccessToken(); + + Task Login(); + + Task Login(string[] permissions); + + Task GetTestQualification(); + + void Logout(); + } + + public interface ITapLoginResultListener + { + void LoginCancel(); + + void LoginError(TapError error); + + void LoginSuccess(AccessToken token); + } + + public static class TapLoginConstants + { + public static string TAP_LOGIN_SERVICE = "TDSLoginService"; + + public static string TAP_LOGIN_SERVICE_CLZ = "com.taptap.sdk.wrapper.TDSLoginService"; + + public static string TAP_LOGIN_SERVICE_IMPL = "com.taptap.sdk.wrapper.TDSLoginServiceImpl"; + } +} \ No newline at end of file diff --git a/Mobile/Runtime/ITapLogin.cs.meta b/Mobile/Runtime/ITapLogin.cs.meta new file mode 100644 index 0000000..d348aef --- /dev/null +++ b/Mobile/Runtime/ITapLogin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69b41de145ee74f908e40d3c44ff7b6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime/TapLoginImpl.cs b/Mobile/Runtime/TapLoginImpl.cs new file mode 100644 index 0000000..60a0f38 --- /dev/null +++ b/Mobile/Runtime/TapLoginImpl.cs @@ -0,0 +1,230 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using TapTap.Common; + +namespace TapTap.Login.Mobile +{ + public class TapLoginImpl : ITapLogin + { + private TapLoginImpl() + { + EngineBridge.GetInstance() + .Register(TapLoginConstants.TAP_LOGIN_SERVICE_CLZ, TapLoginConstants.TAP_LOGIN_SERVICE_IMPL); + } + + private static volatile TapLoginImpl _sInstance; + + private static readonly object Locker = new object(); + + public static TapLoginImpl GetInstance() + { + lock (Locker) + { + if (_sInstance == null) + { + _sInstance = new TapLoginImpl(); + } + } + + return _sInstance; + } + + public void Init(string clientID) + { + EngineBridge.GetInstance().CallHandler(new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("init") + .Args("clientID", clientID) + .CommandBuilder()); + } + + public void Init(string clientID, bool isCn, bool roundCorner) + { + EngineBridge.GetInstance().CallHandler(new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("initWithClientID") + .Args("clientID", clientID) + .Args("regionType", isCn) + .Args("roundCorner", roundCorner) + .CommandBuilder()); + } + + public void ChangeConfig(bool roundCorner, bool isPortrait) + { + EngineBridge.GetInstance().CallHandler(new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("changeConfig") + .Args("roundCorner", roundCorner) + .Args("isPortrait", isPortrait) + .CommandBuilder()); + } + + + public async Task FetchProfile() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("fetchProfileForCurrentAccessToken") + .Callback(true) + .OnceTime(true) + .CommandBuilder(); + var result = await EngineBridge.GetInstance().Emit(command); + if (!EngineBridge.CheckResult(result)) + { + throw new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, "TapSDK fetchProfile Failed!"); + } + + var loginWrapper = new TapLoginWrapper(result.content); + if (loginWrapper.LoginCallbackCode == 0) + { + return new Profile(loginWrapper.Wrapper); + } + + throw new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, loginWrapper.Wrapper); + } + + public async Task GetProfile() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("currentProfile") + .Callback(true) + .OnceTime(true) + .CommandBuilder(); + var result = await EngineBridge.GetInstance().Emit(command); + if (!EngineBridge.CheckResult(result)) + { + throw new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, "TapSDK GetProfile Failed!"); + } + + return new Profile(result.content); + } + + public async Task GetAccessToken() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("currentAccessToken") + .Callback(true) + .OnceTime(true) + .CommandBuilder(); + + var result = await EngineBridge.GetInstance().Emit(command); + + if (!EngineBridge.CheckResult(result)) + { + throw new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, "TapSDK GetAccessToken Failed!"); + } + + return new AccessToken(result.content); + } + + public async Task Login() + { + var tcs = new TaskCompletionSource(); + RegisterLoginCallback(tcs); + StartLogin(new[] { TapLogin.TAP_LOGIN_SCOPE_PUBLIC_PROFILE }); + return await tcs.Task; + } + + public async Task Login(string[] permissions) + { + var tcs = new TaskCompletionSource(); + RegisterLoginCallback(tcs); + StartLogin(permissions); + return await tcs.Task; + } + + public void Logout() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("logout") + .CommandBuilder(); + + EngineBridge.GetInstance().CallHandler(command); + } + + public async Task GetTestQualification() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("getTestQualification") + .Callback(true) + .OnceTime(true) + .CommandBuilder(); + + var result = await EngineBridge.GetInstance().Emit(command); + + if (!EngineBridge.CheckResult(result)) + { + throw new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, + "TapSDK GetTestQualification Failed!"); + } + + var dic = Json.Deserialize(result.content) as Dictionary; + var testQualification = SafeDictionary.GetValue(dic, "userTestQualification"); + return testQualification == 1; + } + + private static void StartLogin(string[] permissions) + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("startTapLogin") + .Args("permissions", permissions) + .CommandBuilder(); + EngineBridge.GetInstance().CallHandler(command); + } + + + private static void RegisterLoginCallback(TaskCompletionSource tcs) + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("registerLoginCallback") + .Callback(true) + .OnceTime(false) + .CommandBuilder(); + + EngineBridge.GetInstance().CallHandler(command, result => + { + if (!EngineBridge.CheckResult(result)) + { + tcs.TrySetException(new TapException((int)TapErrorCode.ERROR_CODE_BRIDGE_EXECUTE, + "TapSDK Login Failed!")); + return; + } + + var wrapper = new TapLoginWrapper(result.content); + + switch (wrapper.LoginCallbackCode) + { + case 0: + tcs.TrySetResult(new AccessToken(wrapper.Wrapper)); + break; + case 1: + tcs.TrySetException(new TapException((int)TapErrorCode.ERROR_CODE_BIND_CANCEL, + "Login Cancel")); + break; + default: + var tapError = TapError.SafeConstructorTapError(wrapper.Wrapper); + tcs.TrySetException(new TapException(tapError.code, + tapError.errorDescription)); + break; + } + + UnRegisterLoginCallback(); + }); + } + + private static void UnRegisterLoginCallback() + { + var command = new Command.Builder() + .Service(TapLoginConstants.TAP_LOGIN_SERVICE) + .Method("unregisterLoginCallback") + .CommandBuilder(); + EngineBridge.GetInstance().CallHandler(command); + } + } +} \ No newline at end of file diff --git a/Mobile/Runtime/TapLoginImpl.cs.meta b/Mobile/Runtime/TapLoginImpl.cs.meta new file mode 100644 index 0000000..0bb665b --- /dev/null +++ b/Mobile/Runtime/TapLoginImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a4684c9ef1d943ffba49b2e8d38906c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime/TapLoginMobile.cs b/Mobile/Runtime/TapLoginMobile.cs new file mode 100644 index 0000000..bea4b6f --- /dev/null +++ b/Mobile/Runtime/TapLoginMobile.cs @@ -0,0 +1,57 @@ +using System.Threading.Tasks; + +namespace TapTap.Login.Mobile +{ + public class TapLoginMobile : Internal.ITapLoginPlatform + { + public void Init(string clientID) + { + TapLoginImpl.GetInstance().Init(clientID); + } + + public void Init(string clientID, bool isCn, bool roundCorner) + { + TapLoginImpl.GetInstance().Init(clientID, isCn, roundCorner); + } + + public void ChangeConfig(bool roundCorner, bool isPortrait) + { + TapLoginImpl.GetInstance().ChangeConfig(roundCorner, isPortrait); + } + + public Task FetchProfile() + { + return TapLoginImpl.GetInstance().FetchProfile(); + } + + public Task GetProfile() + { + return TapLoginImpl.GetInstance().GetProfile(); + } + + public Task GetAccessToken() + { + return TapLoginImpl.GetInstance().GetAccessToken(); + } + + public Task Login() + { + return TapLoginImpl.GetInstance().Login(); + } + + public Task Login(string[] permissions) + { + return TapLoginImpl.GetInstance().Login(permissions); + } + + public void Logout() + { + TapLoginImpl.GetInstance().Logout(); + } + + public Task GetTestQualification() + { + return TapLoginImpl.GetInstance().GetTestQualification(); + } + } +} \ No newline at end of file diff --git a/Mobile/Runtime/TapLoginMobile.cs.meta b/Mobile/Runtime/TapLoginMobile.cs.meta new file mode 100644 index 0000000..589f4db --- /dev/null +++ b/Mobile/Runtime/TapLoginMobile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4295ff79f49ab4cd6a6d8895c03abb78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime/TapLoginWrapper.cs b/Mobile/Runtime/TapLoginWrapper.cs new file mode 100644 index 0000000..544f75d --- /dev/null +++ b/Mobile/Runtime/TapLoginWrapper.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using TapTap.Common; + +namespace TapTap.Login.Mobile +{ + public class TapLoginWrapper + { + public string Wrapper; + + public int LoginCallbackCode; + + public TapLoginWrapper(string json) + { + var dic = Json.Deserialize(json) as Dictionary; + Wrapper = SafeDictionary.GetValue(dic, "wrapper"); + LoginCallbackCode = SafeDictionary.GetValue(dic, "loginCallbackCode"); + } + } +} \ No newline at end of file diff --git a/Mobile/Runtime/TapLoginWrapper.cs.meta b/Mobile/Runtime/TapLoginWrapper.cs.meta new file mode 100644 index 0000000..eeefbce --- /dev/null +++ b/Mobile/Runtime/TapLoginWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13f1c9f969a6c45ad906faf33c39c76e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef b/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef new file mode 100644 index 0000000..4e4e3d7 --- /dev/null +++ b/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef @@ -0,0 +1,20 @@ +{ + "name": "TapTap.Login.Mobile.Runtime", + "references": [ + "GUID:e8754b6153389406c963cd52996cc80f", + "GUID:0b3f64ec33f5b4da98a17367a35b82f2", + "GUID:43c632eee0a6f42cdaf21080b154f3a1" + ], + "includePlatforms": [ + "Android", + "iOS" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef.meta b/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef.meta new file mode 100644 index 0000000..95c4937 --- /dev/null +++ b/Mobile/Runtime/TapTap.Login.Mobile.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ff51c32c188e424b97bac52a5cb5184 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/PC.md b/PC.md new file mode 100644 index 0000000..6996232 --- /dev/null +++ b/PC.md @@ -0,0 +1,60 @@ +# TapTap Login PC 登录接入文档 + +> TapTap.Login PC 支持 Window 以及 Mac 两种平台,提供 Web 浏览器授权以及 TapTap 客户端扫码登录 + + +## 在 Mac 平台使用 TapTap.Login + +### 1. 编译配置 + +* 打开 *BuildSetting* 选择 *PC、Mac & Linux Standalone* Platform,*Target Platform* 选择 MacOS +* 勾选 *Create XCode Project* ,选择输出 XCode 工程进行编译 + +### 2. 配置 URL Types + +* 打开输出的 *XCode Project* , 选择 *Target* ,点击 *Info* ,展开 *URL Types*,请检查是否自动添加以下 URL Scheme,如果未添加,则手动添加进去。 +> TapWeb : open-taptap-{clientId} + +* 或者修改 *Info.plist* ,添加以下配置 + +```xml +CFBundleURLTypes + + + CFBundleURLName + TapWeb + CFBundleURLSchemes + + open-taptap-{client_id} + + + +``` + +## 在 Window 平台使用 TapTap.Login + +#### 给 Window 添加游戏注册表 + +``` +Windows Registry Editor Version 5.00 + +[HKEY_CLASSES_ROOT\open-taptap-{client_id}] +@="{游戏名称}" +"URL Protocol"="{程序.exe 安装路径}}" + +[HKEY_CLASSES_ROOT\open-taptap-{client_id}] +@="{游戏名称}" + +[HKEY_CLASSES_ROOT\open-taptap-{client_id}] + +[HKEY_CLASSES_ROOT\open-taptap-{client_id}\Shell\Open] + +[HKEY_CLASSES_ROOT\open-taptap-{client_id}\Shell\Open\Command] +@="\"{程序.exe 安装路径}\" \"%1\"" + +``` + +打开 Window 注册表编辑器,查看 `HKEY_CLASSES_ROOT\open-taptap-{clientId}` 是否存在以及等该目录下是否包含 `DefaultIcon`、`Shell\Open\Command` 是否匹配上文中的参数 + + + diff --git a/PC.md.meta b/PC.md.meta new file mode 100644 index 0000000..2850fe0 --- /dev/null +++ b/PC.md.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0acb126baaec47058c09c039fb0df359 +timeCreated: 1639126466 \ No newline at end of file diff --git a/Plugins.meta b/Plugins.meta new file mode 100644 index 0000000..6f22dba --- /dev/null +++ b/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 389763214cb6d491d83a645bbf33a750 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Android.meta b/Plugins/Android.meta new file mode 100644 index 0000000..924e4a1 --- /dev/null +++ b/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b872f00946c04ccea41c19eb6ae406a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Android/libs.meta b/Plugins/Android/libs.meta new file mode 100644 index 0000000..6b8bb11 --- /dev/null +++ b/Plugins/Android/libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ef9a962e4bd24262a889ea13fed9c07 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Android/libs/TapLogin_3.19.1.aar b/Plugins/Android/libs/TapLogin_3.19.1.aar new file mode 100644 index 0000000..cdd7575 Binary files /dev/null and b/Plugins/Android/libs/TapLogin_3.19.1.aar differ diff --git a/Plugins/Android/libs/TapLogin_3.19.1.aar.meta b/Plugins/Android/libs/TapLogin_3.19.1.aar.meta new file mode 100644 index 0000000..5c8874d --- /dev/null +++ b/Plugins/Android/libs/TapLogin_3.19.1.aar.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 5151181fcdc5945978d9dc210cb5523e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS.meta b/Plugins/iOS.meta new file mode 100644 index 0000000..5ce5153 --- /dev/null +++ b/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 667a75a1a23fe417c89c8e75fdba321b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework.meta b/Plugins/iOS/TapLoginSDK.framework.meta new file mode 100644 index 0000000..8079dd5 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 0cb5e9195d4db4ef29b7f5c2c756f40e +folderAsset: yes +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: 0 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers.meta b/Plugins/iOS/TapLoginSDK.framework/Headers.meta new file mode 100644 index 0000000..62eace3 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 171b732fe9f8c4837b7cb5628396fddb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h b/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h new file mode 100644 index 0000000..e2880f6 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h @@ -0,0 +1,26 @@ +// +// AccountGlobalError.h +// TapTapLoginSource +// +// Created by Bottle K on 2020/12/15. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +FOUNDATION_EXPORT NSString *const LOGIN_ERROR_ACCESS_DENIED; +FOUNDATION_EXPORT NSString *const LOGIN_ERROR_INVALID_GRANT; +FOUNDATION_EXPORT NSString *const LOGIN_ERROR_PERMISSION_RESULT; + +@interface AccountGlobalError : NSObject +@property (nonatomic, assign) NSInteger code; +@property (nonatomic, copy) NSString *msg; +@property (nonatomic, copy) NSString *error; +@property (nonatomic, copy) NSString *errorDescription; + +- (instancetype)initWithName:(NSString *)errorName NSError:(NSError *)error; + +- (NSString *)toJsonString; +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h.meta new file mode 100644 index 0000000..ae77d05 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/AccountGlobalError.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b64f131357f1a4e3abcee048ecc0b7fd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h b/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h new file mode 100644 index 0000000..1b06fb1 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h @@ -0,0 +1,26 @@ +// +// IscTapLoginService.h +// Pods-TDSLoginSource_Example +// +// Created by Bottle K on 2020/12/15. +// + +#import +#import +NS_ASSUME_NONNULL_BEGIN + +@interface IscTapLoginService : NSObject ++ (void)addSDKLoginResultDelegate:(NSString *)sdkName delegate:(id )delegate; + ++ (void)removeSDKLoginResultDelegate:(NSString *)sdkName; + ++ (void)startSDKLogin:(NSString *)sdkName permission:(NSArray *)permissions; + ++ (void)handleLoginError:(NSDictionary *)params; + ++ (void)changeConfigWithClientId:(NSString *)clientId + regionType:(RegionType)region + token:(TTSDKAccessToken *)token; +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h.meta new file mode 100644 index 0000000..d48046c --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/IscTapLoginService.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 56d376a9fe0fc423aa3e40e2df791647 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h new file mode 100644 index 0000000..c326752 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h @@ -0,0 +1,62 @@ +// +// TTSDKAccessToken.h +// TapTapSDK +// +// Created by TapTap on 2017/10/17. +// Copyright © 2017年 易玩. All rights reserved. +// + +#import + +/** + * @brief TapTap登录授权数据封装类 + * + * 该类封装了所有授权提供的返回数据 + */ +@interface TTSDKAccessToken : NSObject + +/// 唯一标志 +@property (nonatomic, copy) NSString * kid; + +/// 认证码 +@property (nonatomic, copy) NSString * accessToken; + +/// 认证码类型 +@property (nonatomic, copy) NSString * tokenType; + +/// mac密钥 +@property (nonatomic, copy) NSString * macKey; + +/// mac密钥计算方式 +@property (nonatomic, copy) NSString * macAlgorithm; + +/// 用户授权的权限,多个时以逗号隔开 +@property (nonatomic, copy) NSString * scope; + +/// 用户授权的权限 Array 形式 +@property (nonatomic, copy) NSArray * scopeArray; + +/// 根据JSON生成 TTSDKAccessToken +/// @param accessTokenString json字符串类型的AccessToken ++ (TTSDKAccessToken *)build:(NSString *)accessTokenString; + +/// 通过参数生成实例 ++ (TTSDKAccessToken *)build:(NSString *)kid accessToken:(NSString *)accessToken tokenType:(NSString *)tokenType macKey:(NSString *)macKey macAlgorithm:(NSString *)macAlgorithm; + ++ (TTSDKAccessToken *)build:(NSString *)kid accessToken:(NSString *)accessToken tokenType:(NSString *)tokenType macKey:(NSString *)macKey macAlgorithm:(NSString *)macAlgorithm scope:(NSArray *)scope; + +/// 转换成json字符串 +- (NSString *)toJsonString; + ++ (NSArray *)scopeStringToArray:(NSString *)scopeString; + +/** + * @brief 获取当前认证 + * + * 该认证会优先读取本地缓存,不存在时将会返回nil + */ ++ (TTSDKAccessToken *)currentAccessToken; + ++ (void)setCurrentToken:(TTSDKAccessToken *)token; + +@end diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h.meta new file mode 100644 index 0000000..b200b0a --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKAccessToken.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca1191d4b28db4188ab632cfe644acb8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h new file mode 100644 index 0000000..732574f --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h @@ -0,0 +1,31 @@ +// +// TTSDKConfig.h +// TapTapSDK +// +// Created by wzb on 2020/5/13. +// Copyright © 2020 易玩. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +#define TapLoginSDKErrorDomain @"TapLoginSDKErrorDomain" + +typedef NS_ENUM (NSInteger, RegionType) { + RegionTypeCN, + RegionTypeIO +}; + +@interface TTSDKConfig : NSObject + +/// 是否为圆角,默认为圆角 +@property (nonatomic, assign) BOOL roundCorner; +/// 限定登录客户端 +@property (nonatomic, assign) RegionType regionType; +/// Server URL +@property (nonatomic, copy) NSString *serverURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h.meta new file mode 100644 index 0000000..098d64b --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKConfig.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f78a3c00039b1495a8de303c85af6fa4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h new file mode 100644 index 0000000..e56ec2f --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h @@ -0,0 +1,29 @@ +// +// TTSDKLoginResult.h +// TapTapSDK +// +// Created by TapTap on 2017/10/17. +// Copyright © 2017年 易玩. All rights reserved. +// + +#import + +@class TTSDKAccessToken; + +/** + * @brief 登入结果 + * + * 该类封装了登入的响应结果(非NSError情况下) + */ +@interface TTSDKLoginResult : NSObject + +/// 授权Token +@property (nonatomic, copy) TTSDKAccessToken *token; + +/// 用户是否选择取消授权(非拒绝授权,拒绝授权将在NSError中进行返回) +@property (nonatomic, readonly) BOOL isCancelled; + +- (instancetype)initWithToken:(TTSDKAccessToken *)token + isCancelled:(BOOL)isCancelled; + +@end diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h.meta new file mode 100644 index 0000000..7cfb939 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKLoginResult.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0da0eb4d246e5447fb10b08663acfa9a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h new file mode 100644 index 0000000..92722fe --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h @@ -0,0 +1,46 @@ +// +// TTSDKProfile.h +// TapTapSDK +// +// Created by TapTap on 2017/10/27. +// Copyright © 2017年 易玩. All rights reserved. +// + +#import + +/** + * @brief TapTap用户信息封装类 + * + * 该类封装了所有用户信息提供的返回数据 + */ +@interface TTSDKProfile : NSObject + +/// 用户名 +@property (nonatomic, readonly, strong) NSString *name; + +/// 用户头像 +@property (nonatomic, readonly, strong) NSString *avatar; + +/// open id +@property (nonatomic, readonly, strong) NSString *openid; + +/// union id +@property (nonatomic, readonly, strong) NSString *unionid; + +@property (nonatomic, readonly, strong) NSString *email; + +@property (nonatomic, readonly, assign, getter = isEmailVerified) BOOL emailVerified; + +- (instancetype)initWithJSON:(NSDictionary *)json; + +/** + * @brief 获取当前用户信息 + * + * 该用户信息会优先读取本地缓存,不存在时将会返回nil + */ ++ (TTSDKProfile *)currentProfile; + ++ (void)fetchProfileForCurrentAccessToken:(void (^)(TTSDKProfile *profile, NSError *error))handler; + +- (NSString *)toJsonString; +@end diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h.meta new file mode 100644 index 0000000..ed8b736 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TTSDKProfile.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c5d7d17194cda40d18631256e04d00aa +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h new file mode 100644 index 0000000..c363af2 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h @@ -0,0 +1,59 @@ +// +// TapFriends.h +// TapLoginSDK +// +// Created by pzheng on 2022/02/23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Tap Friend Info +@interface TapFriendInfo : NSObject + +/// Nickname. +@property (nonatomic, readonly) NSString *name; + +/// Avatar. +@property (nonatomic, readonly) NSString *avatar; + +/// Open ID. +@property (nonatomic, readonly) NSString *openid; + +@end + +/// Query Result +@interface TapFriendResult : NSObject + +/// List of `TapFriendInfo`. +@property (nonatomic, nullable, readonly) NSArray *data; + +/// The start index of the next query. +@property (nonatomic, nullable, readonly) NSString *cursor; + +@end + +/// Query Option +@interface TapFriendQueryOption : NSObject + +/// The limit of the result. +@property (nonatomic) NSUInteger size; + +/// The start index of this query. +@property (nonatomic, nullable) NSString *cursor; + +@end + +/// Tap Friends +@interface TapFriends : NSObject + +/// Query mutual list. +/// @param option See `TapFriendQueryOption`. +/// @param callback Result callback. ++ (void)queryMutualListWithOption:(TapFriendQueryOption * _Nullable)option + callback:(void (^)(TapFriendResult * _Nullable result, NSError * _Nullable error))callback; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h.meta new file mode 100644 index 0000000..7f4efca --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapFriends.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 91e438df41aea4bc9b8fffb15bff9bf9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h new file mode 100644 index 0000000..df58235 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h @@ -0,0 +1,79 @@ +// +// TapLoginHelper.h +// TapTapLoginSource +// +// Created by Bottle K on 2020/12/2. +// + +#import +#import +#import +#import +#import +#import +#import + +#define TapLoginSDK @"TapLogin" +#define TapLoginSDK_VERSION_NUMBER @"31901001" +#define TapLoginSDK_VERSION @"3.19.1" + +NS_ASSUME_NONNULL_BEGIN + +@interface TapLoginHelper : NSObject + +/// 初始化 +/// @param clientID clientID ++ (void)initWithClientID:(NSString *)clientID; + +/// 初始化 +/// @param clientID clientID +/// @param config 配置项 ++ (void)initWithClientID:(NSString *)clientID config:(TTSDKConfig *_Nullable)config; + +/// 修改登录配置 +/// @param config 配置项 ++ (void)changeTapLoginConfig:(TTSDKConfig *_Nullable)config; + +/// 设置登录回调 +/// @param delegate 回调 ++ (void)registerLoginResultDelegate:(id )delegate; + +/// 移除登录回调 ++ (void)unregisterLoginResultDelegate; + +/// 获取当前设置的登录回调 ++ (id )getLoginResultDelegate; + +/// 开始登录流程 +/// @param permissions 权限列表 ++ (void)startTapLogin:(NSArray *)permissions; + +/// 获取当前 Token ++ (TTSDKAccessToken *)currentAccessToken; + +/// 获取当前 Profile ++ (TTSDKProfile *)currentProfile; + +/// 获取当前服务器上最新的 Profile +/// @param callback 回调 ++ (void)fetchProfileForCurrentAccessToken:(void (^)(TTSDKProfile *profile, NSError *error))callback; + +/// 登出 ++ (void)logout; + +/// 获取当前用户是否有测试资格 +/// @param callback 回调 ++ (void)getTestQualification:(void (^)(BOOL isQualified, NSError *_Nullable error))callback; + +/// 当前是否有国内客户端支持 ++ (BOOL)isTapTapClientSupport; + +/// 当前是否有国外客户端支持 ++ (BOOL)isTapTapGlobalClientSupport; + +/// 监听 url 回调 +/// @param url url ++ (BOOL)handleTapTapOpenURL:(NSURL *)url __attribute__((deprecated("Please use [TDSHandleUrl handleOpenURL:]"))); +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h.meta new file mode 100644 index 0000000..87c8ea6 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginHelper.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae7152728fd9c4a06800a21a26968465 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h new file mode 100644 index 0000000..1f011f4 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h @@ -0,0 +1,26 @@ +// +// TapLoginSDK.h +// TapLoginSDK +// +// Created by Bottle K on 2021/3/25. +// + +#import + +//! Project version number for TapLoginSDK. +FOUNDATION_EXPORT double TapLoginSDKVersionNumber; + +//! Project version string for TapLoginSDK. +FOUNDATION_EXPORT const unsigned char TapLoginSDKVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h.meta new file mode 100644 index 0000000..3b273ba --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapLoginSDK.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: beb0f65d46a6345ae940dffd322cad95 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h b/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h new file mode 100644 index 0000000..6fe7738 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h @@ -0,0 +1,28 @@ +// +// TapTapLoginResultDelegate.h +// Pods-TDSLoginSource_Example +// +// Created by Bottle K on 2020/12/15. +// + +#import +#import +#import +NS_ASSUME_NONNULL_BEGIN + +@protocol TapTapLoginResultDelegate + +/// 登录成功回调 +/// @param token token对象 +- (void)onLoginSuccess:(TTSDKAccessToken *)token; + +/// 登录取消 +- (void)onLoginCancel; + +/// 登录失败 +/// @param error 失败原因 +- (void)onLoginError:(AccountGlobalError *)error; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h.meta b/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h.meta new file mode 100644 index 0000000..bb77a50 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Headers/TapTapLoginResultDelegate.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c65dd21f3aee54e6f83eaba1b5f3b4af +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Info.plist b/Plugins/iOS/TapLoginSDK.framework/Info.plist new file mode 100644 index 0000000..f244048 Binary files /dev/null and b/Plugins/iOS/TapLoginSDK.framework/Info.plist differ diff --git a/Plugins/iOS/TapLoginSDK.framework/Info.plist.meta b/Plugins/iOS/TapLoginSDK.framework/Info.plist.meta new file mode 100644 index 0000000..2de48ba --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Info.plist.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a425b7174df844844a1a03d3216ee120 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Modules.meta b/Plugins/iOS/TapLoginSDK.framework/Modules.meta new file mode 100644 index 0000000..1fa6a85 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Modules.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7ccb2201ac1545ee97a2518f7c70cc6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap b/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap new file mode 100644 index 0000000..4c98ef4 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module TapLoginSDK { + umbrella header "TapLoginSDK.h" + + export * + module * { export * } +} diff --git a/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap.meta b/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap.meta new file mode 100644 index 0000000..593b846 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/Modules/module.modulemap.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9ee1754935e11442ab51454950dd37a7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK b/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK new file mode 100644 index 0000000..b3f7c24 Binary files /dev/null and b/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK differ diff --git a/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK.meta b/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK.meta new file mode 100644 index 0000000..084c816 --- /dev/null +++ b/Plugins/iOS/TapLoginSDK.framework/TapLoginSDK.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 280aa7755723542c3b75ebf67cf80a3f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/zxing.unity.dll b/Plugins/zxing.unity.dll new file mode 100644 index 0000000..1ef2e26 Binary files /dev/null and b/Plugins/zxing.unity.dll differ diff --git a/Plugins/zxing.unity.dll.meta b/Plugins/zxing.unity.dll.meta new file mode 100644 index 0000000..8367da5 --- /dev/null +++ b/Plugins/zxing.unity.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 44603b497110848c1bee102b300ad164 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..e1eb74b --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +## [TapTap.Login](./Documentation/README.md) + +## 使用前提 + +使用 TapTap.Login 前提是必须依赖以下库: + +* [TapTap.Common](https://github.com/TapTap/TapCommon-Unity.git) + +> 如果游戏需要支持 PC Platform ,则参考[ PC配置文档 ](./PC.md) + +### 1.初始化 + +#### 如果配合 `TapBoostrap` 使用,则不需要调用初始化接口 + +```c# +TapLogin.Init(string clientID); +``` + +### 2.唤起 TapTap 网页 或者 TapTap 客户端进行登陆 + +登陆成功之后,会返回 `AccessToken` + +```c# +var accessToken = await TapLogin.Login(); +``` + +配置权限范围 + +```c# +// 默认使用 public_profile + +var accessToken = await TapLogin.Login(new []{"public_profile"}) +; +``` + +### 3. 获取 TapTap AccessToken + +```c# +var accessToken = await TapLogin.GetAccessToken(); +``` + +### 4. 获取 TapTap Profile + +```c# +var profile = await TapLogin.FetchProfile(); +``` + +### 5. 获取篝火测试资格 + +```c# +var boolean = await TapLogin.GetTestQualification(); +``` + +### 6. 退出登陆 + +```c# +TapLogin.Logout(); +``` \ No newline at end of file diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 0000000..7807717 --- /dev/null +++ b/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c720d298abf1847cca49e4f58f9972e8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime.meta b/Runtime.meta new file mode 100644 index 0000000..e2b5c9f --- /dev/null +++ b/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ae9b1c1f703a4bdc9ee0b6d24c4194a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal.meta b/Runtime/Internal.meta new file mode 100644 index 0000000..9136b2b --- /dev/null +++ b/Runtime/Internal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24cd5e31f29ae47b5866be602d4bd83c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/ITapLoginPlatform.cs b/Runtime/Internal/ITapLoginPlatform.cs new file mode 100644 index 0000000..92c051a --- /dev/null +++ b/Runtime/Internal/ITapLoginPlatform.cs @@ -0,0 +1,25 @@ +using System.Threading.Tasks; + +namespace TapTap.Login.Internal { + public interface ITapLoginPlatform { + void Init(string clientID); + + void Init(string clientID, bool isCn, bool roundCorner); + + void ChangeConfig(bool roundCorner, bool isPortrait); + + Task FetchProfile(); + + Task GetProfile(); + + Task GetAccessToken(); + + Task Login(); + + Task Login(string[] permissions); + + void Logout(); + + Task GetTestQualification(); + } +} diff --git a/Runtime/Internal/ITapLoginPlatform.cs.meta b/Runtime/Internal/ITapLoginPlatform.cs.meta new file mode 100644 index 0000000..aeccf7a --- /dev/null +++ b/Runtime/Internal/ITapLoginPlatform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4087c690e3ccd4ac38ad7d9062573224 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/Init.meta b/Runtime/Internal/Init.meta new file mode 100644 index 0000000..000b878 --- /dev/null +++ b/Runtime/Internal/Init.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7755e949d0f964a27a68a703b5758d90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/Init/LoginInitTask.cs b/Runtime/Internal/Init/LoginInitTask.cs new file mode 100644 index 0000000..e45e9d1 --- /dev/null +++ b/Runtime/Internal/Init/LoginInitTask.cs @@ -0,0 +1,12 @@ +using TapTap.Common; +using TapTap.Common.Internal.Init; + +namespace TapTap.Login.Internal.Init { + public class LoginInitTask : IInitTask { + public int Order => 11; + + public void Init(TapConfig config) { + TapLogin.Init(config.ClientID, config.RegionType == RegionType.CN, true); + } + } +} diff --git a/Runtime/Internal/Init/LoginInitTask.cs.meta b/Runtime/Internal/Init/LoginInitTask.cs.meta new file mode 100644 index 0000000..762032d --- /dev/null +++ b/Runtime/Internal/Init/LoginInitTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef4050f6c70464872a62df912446e757 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/Region.cs b/Runtime/Internal/Region.cs new file mode 100644 index 0000000..a9a49db --- /dev/null +++ b/Runtime/Internal/Region.cs @@ -0,0 +1,67 @@ +namespace TapTap.Login.Internal +{ + public abstract class Region + { + public abstract string WebHost(); + + public abstract string ApiHost(); + + public abstract string AccountHost(); + + public string CodeUrl() + { + return WebHost() + "/oauth2/v1/device/code"; + } + + public string TokenUrl() + { + return WebHost() + "/oauth2/v1/token"; + } + + public string ProfileUrl() + { + return ApiHost() + "/account/profile/v1?client_id="; + } + + public string AccountUrl() + { + return AccountHost() + "/authorize?"; + } + } + + public class RegionCN : Region + { + public override string WebHost() + { + return "https://accounts.tapapis.cn"; + } + + public override string ApiHost() + { + return "https://open.tapapis.cn"; + } + + public override string AccountHost() + { + return "https://accounts.taptap.cn"; + } + } + + public class RegionIO : Region + { + public override string WebHost() + { + return "https://accounts.tapapis.com"; + } + + public override string ApiHost() + { + return "https://open.tapapis.com"; + } + + public override string AccountHost() + { + return "https://accounts.taptap.io"; + } + } +} \ No newline at end of file diff --git a/Runtime/Internal/Region.cs.meta b/Runtime/Internal/Region.cs.meta new file mode 100644 index 0000000..882a9e1 --- /dev/null +++ b/Runtime/Internal/Region.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1feada2e0e7bd49db8a8fa50ad07bc6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public.meta b/Runtime/Public.meta new file mode 100644 index 0000000..bfe4288 --- /dev/null +++ b/Runtime/Public.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 397e36f43b9fe4d309a388111a8cb950 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/AccessToken.cs b/Runtime/Public/AccessToken.cs new file mode 100644 index 0000000..08310f1 --- /dev/null +++ b/Runtime/Public/AccessToken.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using TapTap.Common; +using UnityEngine; + +namespace TapTap.Login +{ + public class AccessToken + { + public string kid; + + public string accessToken; + + public string tokenType; + + public string macKey; + + public string macAlgorithm; + + public HashSet scopeSet; + + public AccessToken(string json) + { + var dic = Json.Deserialize(json) as Dictionary; + kid = SafeDictionary.GetValue(dic, "kid"); + accessToken = SafeDictionary.GetValue(dic, "access_token"); + tokenType = SafeDictionary.GetValue(dic, "token_type"); + macKey = SafeDictionary.GetValue(dic, "mac_key"); + macAlgorithm = SafeDictionary.GetValue(dic, "mac_algorithm"); + string scopeStr = SafeDictionary.GetValue(dic, "scope"); + if (string.IsNullOrEmpty(scopeStr)) + { + scopeSet = new HashSet(); + } + else + { + try + { + scopeSet = new HashSet(scopeStr.Split(' ')); + } + catch (Exception e) + { + scopeSet = new HashSet(); + } + } + } + + public AccessToken() + { + + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Runtime/Public/AccessToken.cs.meta b/Runtime/Public/AccessToken.cs.meta new file mode 100644 index 0000000..83da57c --- /dev/null +++ b/Runtime/Public/AccessToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b1c85172abe742f18d2bb494252eed8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/Profile.cs b/Runtime/Public/Profile.cs new file mode 100644 index 0000000..eed808c --- /dev/null +++ b/Runtime/Public/Profile.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using TapTap.Common; +using UnityEngine; + +namespace TapTap.Login +{ + public class Profile + { + public string name; + + public string avatar; + + public string openid; + + public string unionid; + + public string email; + + public bool emailVerified; + + public Profile(string json) + { + var dic = Json.Deserialize(json) as Dictionary; + name = SafeDictionary.GetValue(dic, "name"); + avatar = SafeDictionary.GetValue(dic, "avatar"); + openid = SafeDictionary.GetValue(dic, "openid"); + unionid = SafeDictionary.GetValue(dic, "unionid"); + email = SafeDictionary.GetValue(dic, "email"); + emailVerified = SafeDictionary.GetValue(dic, "email_verified"); + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Runtime/Public/Profile.cs.meta b/Runtime/Public/Profile.cs.meta new file mode 100644 index 0000000..998cbbf --- /dev/null +++ b/Runtime/Public/Profile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6645cb881ce9c41d5a8cc4708dd67200 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/TapFriendInfo.cs b/Runtime/Public/TapFriendInfo.cs new file mode 100644 index 0000000..a99c4db --- /dev/null +++ b/Runtime/Public/TapFriendInfo.cs @@ -0,0 +1,15 @@ +namespace TapTap.Friends { + public class TapFriendInfo { + public string Name { + get; internal set; + } + + public string Avatar { + get; internal set; + } + + public string OpenId { + get; internal set; + } + } +} diff --git a/Runtime/Public/TapFriendInfo.cs.meta b/Runtime/Public/TapFriendInfo.cs.meta new file mode 100644 index 0000000..19d8068 --- /dev/null +++ b/Runtime/Public/TapFriendInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1704f54f800454b3fb4e7e8473f9cb37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/TapFriendResult.cs b/Runtime/Public/TapFriendResult.cs new file mode 100644 index 0000000..b88dfc3 --- /dev/null +++ b/Runtime/Public/TapFriendResult.cs @@ -0,0 +1,13 @@ +using System.Collections.ObjectModel; + +namespace TapTap.Friends { + public class TapFriendResult { + public ReadOnlyCollection FriendList { + get; internal set; + } + + public string Cursor { + get; internal set; + } + } +} diff --git a/Runtime/Public/TapFriendResult.cs.meta b/Runtime/Public/TapFriendResult.cs.meta new file mode 100644 index 0000000..2970f16 --- /dev/null +++ b/Runtime/Public/TapFriendResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10c88cb0d937247c3a4c6af903d5503d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/TapFriends.cs b/Runtime/Public/TapFriends.cs new file mode 100644 index 0000000..67189ff --- /dev/null +++ b/Runtime/Public/TapFriends.cs @@ -0,0 +1,145 @@ +using System; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using TapTap.Login; +using TapTap.Common; +using TapTap.Login.Internal; +using System.Net.Http; +using System.Net.Http.Headers; +using TapTap.Common.Internal.Json; +using TapTap.Common.Internal.Http; +using LC.Newtonsoft.Json; +using System.Security.Cryptography; +using System.Text; + +namespace TapTap.Friends { + public class TapFriends { + private static HttpClient httpClient = null; + + public static async Task QueryMutualList(string cursor = null, int size = 100) { + AccessToken accessToken = await TapLogin.GetAccessToken(); + if (accessToken == null) { + throw new ArgumentNullException(nameof(accessToken)); + } + string url = $"{TapTapSdk.CurrentRegion.ApiHost()}/friends/v1/list"; + Dictionary queryParams = new Dictionary { + { "max_size", size }, + {"client_id",TapTapSdk.ClientId } + }; + if (!string.IsNullOrEmpty(cursor)) { + queryParams.Add("continuation_token", cursor); + } + IEnumerable queryPairs = queryParams.Select(kv => $"{kv.Key}={kv.Value}"); + string queries = string.Join("&", queryPairs); + url = $"{url}?{queries}"; + + var dt = DateTime.UtcNow - new DateTime(1970, 1, 1); + var ts = (int)dt.TotalSeconds; + var uri = new Uri(url); + Dictionary headers = new Dictionary { + { "Authorization", "MAC " + GetAuthorizationHeader(accessToken.kid,accessToken.macKey,accessToken.macAlgorithm, + "GET",uri.PathAndQuery,uri.Host,"443", ts)} + }; + if (httpClient == null) + { + httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + httpClient.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8")); + + } + HttpRequestMessage request = new HttpRequestMessage + { + RequestUri = new Uri(url), + Method = HttpMethod.Get, + }; + HttpRequestHeaders reqHeaders = request.Headers; + if (reqHeaders != null) + { + foreach (KeyValuePair kv in headers) + { + reqHeaders.Add(kv.Key, kv.Value.ToString()); + } + } + TapHttpUtils.PrintRequest(httpClient, request); + + HttpResponseMessage originResponse = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); + request.Dispose(); + string resultString = await originResponse.Content.ReadAsStringAsync(); + originResponse.Dispose(); + TapHttpUtils.PrintResponse(originResponse, resultString); + + Dictionary response; + if (originResponse.IsSuccessStatusCode) + { + response = JsonConvert.DeserializeObject>(resultString, + TapJsonConverter.Default); + } + else + { + throw new TapException(((int)originResponse.StatusCode), resultString); + } + if (response.TryGetValue("data", out object dataObj) && + dataObj is Dictionary data) { + TapFriendResult result = new TapFriendResult(); + if (data.TryGetValue("list", out object listObj) && listObj is List list) { + result.FriendList = list.Cast>() + .Select(item => new TapFriendInfo { + OpenId = item["openid"] as string, + Name = item.TryGetValue("nickname", out object nicknameObj) && (nicknameObj is string nickname) ? + nickname : null, + Avatar = item.TryGetValue("avatar", out object avatarObj) && (avatarObj is string avatar) ? + avatar : null + }) + .ToList() + .AsReadOnly(); + + result.Cursor = data.TryGetValue("is_truncated", out object isTruncatedObj) && + isTruncatedObj is bool isTruncated && + isTruncated ? + (data.TryGetValue("next_continuation_token", out object nextSkipObj) && + (nextSkipObj is string nextSkip) ? + nextSkip : null) : null; + return result; + + } + } + return null; + } + + private static string GetAuthorizationHeader(string kid, + string macKey, + string macAlgorithm, + string method, + string uri, + string host, + string port, + int timestamp) + { + var nonce = new Random().Next().ToString(); + + var normalizedString = $"{timestamp}\n{nonce}\n{method}\n{uri}\n{host}\n{port}\n\n"; + + HashAlgorithm hashGenerator; + switch (macAlgorithm) + { + case "hmac-sha-256": + hashGenerator = new HMACSHA256(Encoding.ASCII.GetBytes(macKey)); + break; + case "hmac-sha-1": + hashGenerator = new HMACSHA1(Encoding.ASCII.GetBytes(macKey)); + break; + default: + throw new InvalidOperationException("Unsupported MAC algorithm"); + } + + var hash = Convert.ToBase64String(hashGenerator.ComputeHash(Encoding.ASCII.GetBytes(normalizedString))); + + var authorizationHeader = new StringBuilder(); + authorizationHeader.AppendFormat(@"id=""{0}"",ts=""{1}"",nonce=""{2}"",mac=""{3}""", + kid, timestamp, nonce, hash); + + return authorizationHeader.ToString(); + } + } +} diff --git a/Runtime/Public/TapFriends.cs.meta b/Runtime/Public/TapFriends.cs.meta new file mode 100644 index 0000000..0a13913 --- /dev/null +++ b/Runtime/Public/TapFriends.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63d7af19c75ee4a89b130a0a0e1736e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/TapLogin.cs b/Runtime/Public/TapLogin.cs new file mode 100644 index 0000000..a7bcdbd --- /dev/null +++ b/Runtime/Public/TapLogin.cs @@ -0,0 +1,63 @@ +using System.Threading.Tasks; +using TapTap.Login.Internal; +using TapTap.Common.Internal.Utils; + +namespace TapTap.Login +{ + public class TapLogin + { + public const string TAP_LOGIN_SCOPE_BASIC_INFO = "basic_info"; + public const string TAP_LOGIN_SCOPE_PUBLIC_PROFILE = "public_profile"; + public const string TAP_LOGIN_SCOPE_USER_FRIENDS = "user_friends"; + public const string TAP_LOGIN_SCOPE_EMAIL = "email"; + + private static ITapLoginPlatform platformWrapper; + + static TapLogin() { + platformWrapper = BridgeUtils.CreateBridgeImplementation(typeof(ITapLoginPlatform), + "TapTap.Login") as ITapLoginPlatform; + } + + public static void Init(string clientID) { + platformWrapper.Init(clientID); + TapTapSdk.SDKInitialize(clientID, true); + } + + public static void Init(string clientID, bool isCn, bool roundCorner) { + platformWrapper.Init(clientID, isCn, roundCorner); + TapTapSdk.SDKInitialize(clientID, isCn); + } + + public static void ChangeConfig(bool roundCorner, bool isPortrait) { + platformWrapper.ChangeConfig(roundCorner, isPortrait); + } + + public static Task FetchProfile() { + return platformWrapper.FetchProfile(); + } + + public static Task GetProfile() { + return platformWrapper.GetProfile(); + } + + public static Task GetAccessToken() { + return platformWrapper.GetAccessToken(); + } + + public static Task Login() { + return platformWrapper.Login(); + } + + public static Task Login(string[] permissions) { + return platformWrapper.Login(permissions); + } + + public static void Logout() { + platformWrapper.Logout(); + } + + public static Task GetTestQualification() { + return platformWrapper.GetTestQualification(); + } + } +} \ No newline at end of file diff --git a/Runtime/Public/TapLogin.cs.meta b/Runtime/Public/TapLogin.cs.meta new file mode 100644 index 0000000..6219ae5 --- /dev/null +++ b/Runtime/Public/TapLogin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c60164586f7bc46bfb3013f5beb91f81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Public/TapTapSdk.cs b/Runtime/Public/TapTapSdk.cs new file mode 100644 index 0000000..4c7ffdd --- /dev/null +++ b/Runtime/Public/TapTapSdk.cs @@ -0,0 +1,20 @@ +using TapTap.Common; + +namespace TapTap.Login.Internal +{ + public static class TapTapSdk + { + public const string Version = "1.2.0"; + + public static string ClientId { get; private set; } + + public static Region CurrentRegion { get; private set; } + + public static void SDKInitialize(string clientId, bool isCn) + { + ClientId = clientId; + CurrentRegion = isCn ? (Region)new RegionCN() : new RegionIO(); + TapLocalizeManager.SetCurrentRegion(isCn); + } + } +} \ No newline at end of file diff --git a/Runtime/Public/TapTapSdk.cs.meta b/Runtime/Public/TapTapSdk.cs.meta new file mode 100644 index 0000000..7d4711b --- /dev/null +++ b/Runtime/Public/TapTapSdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 762c5963339fb430e974398fae5bb511 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/TapTap.Login.Runtime.asmdef b/Runtime/TapTap.Login.Runtime.asmdef new file mode 100644 index 0000000..290b230 --- /dev/null +++ b/Runtime/TapTap.Login.Runtime.asmdef @@ -0,0 +1,15 @@ +{ + "name": "TapTap.Login.Runtime", + "references": [ + "GUID:0b3f64ec33f5b4da98a17367a35b82f2" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/TapTap.Login.Runtime.asmdef.meta b/Runtime/TapTap.Login.Runtime.asmdef.meta new file mode 100644 index 0000000..eba7550 --- /dev/null +++ b/Runtime/TapTap.Login.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e8754b6153389406c963cd52996cc80f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone.meta b/Standalone.meta new file mode 100644 index 0000000..ff93668 --- /dev/null +++ b/Standalone.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31c94f56cfbed4fa2af034971d6dde47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Editor.meta b/Standalone/Editor.meta new file mode 100644 index 0000000..eabbaae --- /dev/null +++ b/Standalone/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5994a776f5ee4f8998f23dd47cb2fef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Editor/TapLoginStandaloneProcessBuild.cs b/Standalone/Editor/TapLoginStandaloneProcessBuild.cs new file mode 100644 index 0000000..8f804da --- /dev/null +++ b/Standalone/Editor/TapLoginStandaloneProcessBuild.cs @@ -0,0 +1,22 @@ +using System; +using UnityEditor.Build.Reporting; +using TapTap.Common.Editor; + +namespace TapTap.Login.Editor +{ + public class TapLoginStandaloneProcessBuild : SDKLinkProcessBuild + { + public override int callbackOrder => 0; + + public override string LinkPath => "TapTap/Login/link.xml"; + + public override LinkedAssembly[] LinkedAssemblies => new LinkedAssembly[] { + new LinkedAssembly { Fullname = "TapTap.Login.Runtime" }, + new LinkedAssembly { Fullname = "TapTap.Login.Standalone.Runtime" } + }; + + public override Func IsTargetPlatform => (report) => { + return BuildTargetUtils.IsSupportStandalone(report.summary.platform); + }; + } +} \ No newline at end of file diff --git a/Standalone/Editor/TapLoginStandaloneProcessBuild.cs.meta b/Standalone/Editor/TapLoginStandaloneProcessBuild.cs.meta new file mode 100644 index 0000000..f8b3d64 --- /dev/null +++ b/Standalone/Editor/TapLoginStandaloneProcessBuild.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7661a47473b9c438980a7d4b0be90e2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef b/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef new file mode 100644 index 0000000..eb322b1 --- /dev/null +++ b/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "TapTap.Login.Standalone.Editor", + "references": [ + "GUID:616cea76def2d4f059b94440fc8cc03d" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef.meta b/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef.meta new file mode 100644 index 0000000..b8f53e5 --- /dev/null +++ b/Standalone/Editor/TapTap.Login.Standalone.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ff2731b992f0b4736afeff3719a96ad4 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources.meta b/Standalone/Resources.meta new file mode 100644 index 0000000..8350073 --- /dev/null +++ b/Standalone/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7396550db8b6142668fe2dab2457c315 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Prefabs.meta b/Standalone/Resources/Prefabs.meta new file mode 100644 index 0000000..047f994 --- /dev/null +++ b/Standalone/Resources/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32e8212d1e4f3425d83ba0ecb6d9c87f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab b/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab new file mode 100644 index 0000000..7ef0cf7 --- /dev/null +++ b/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab @@ -0,0 +1,2760 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1056244519764904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224001354146292790} + - component: {fileID: 222481293561095608} + - component: {fileID: 114554977022300202} + - component: {fileID: 114568000997432188} + - component: {fileID: 4171343356862956612} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224001354146292790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056244519764904} + 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: 224076888652929146} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222481293561095608 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056244519764904} + m_CullTransparentMesh: 1 +--- !u!114 &114554977022300202 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056244519764904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE920" +--- !u!114 &114568000997432188 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056244519764904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114554977022300202} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &4171343356862956612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1056244519764904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &1193215591612352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224208046306343802} + - component: {fileID: 222083448071919468} + - component: {fileID: 114135413614373290} + - component: {fileID: 1007499618560969334} + m_Layer: 5 + m_Name: Status + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224208046306343802 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193215591612352} + 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: 224718936248725256} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -390} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222083448071919468 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193215591612352} + m_CullTransparentMesh: 1 +--- !u!114 &114135413614373290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193215591612352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &1007499618560969334 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193215591612352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &1223405102646914 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224349194079863330} + - component: {fileID: 222180531317380510} + - component: {fileID: 114094418602330432} + - component: {fileID: 114138526812747854} + - component: {fileID: 1413082019910608536} + m_Layer: 5 + m_Name: Notice2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224349194079863330 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223405102646914} + 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: 224076888652929146} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 14} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222180531317380510 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223405102646914} + m_CullTransparentMesh: 1 +--- !u!114 &114094418602330432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223405102646914} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.078431375, g: 0.7254902, b: 0.78431374, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 3b1c92b10dde9426cbbccfbbd9c05cb1, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE902\uE901\uE900" +--- !u!114 &114138526812747854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223405102646914} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114094418602330432} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1413082019910608536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1223405102646914} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &1288202492286524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224555448362034682} + - component: {fileID: 222065527164217754} + - component: {fileID: 114462825623851946} + m_Layer: 5 + m_Name: QRCodeSmallBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224555448362034682 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288202492286524} + 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: 224718936248725256} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200, y: -146} + m_SizeDelta: {x: 180, y: 180} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222065527164217754 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288202492286524} + m_CullTransparentMesh: 1 +--- !u!114 &114462825623851946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288202492286524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: e566f05a80791430ebad8154cf2e0153, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1288743788507898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224781566814767164} + - component: {fileID: 222288773324413080} + - component: {fileID: 114270678634517226} + - component: {fileID: 114587482238481962} + m_Layer: 5 + m_Name: RefreshButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224781566814767164 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288743788507898} + 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: 224667366762974222} + - {fileID: 224974753354552528} + m_Father: {fileID: 224208115287414650} + 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: 0, y: 0} + m_SizeDelta: {x: 100, y: 110} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222288773324413080 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288743788507898} + m_CullTransparentMesh: 1 +--- !u!114 &114270678634517226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288743788507898} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a60d2c639f46d4ce894ac9c1faf81e86, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114587482238481962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288743788507898} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114270678634517226} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1326628716219120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224974753354552528} + - component: {fileID: 222023283663315222} + - component: {fileID: 114084132066421224} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224974753354552528 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326628716219120} + 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: 224781566814767164} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222023283663315222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326628716219120} + m_CullTransparentMesh: 1 +--- !u!114 &114084132066421224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326628716219120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 13199a88a311149089187eea28606a3f, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1343215775437582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224952865744259402} + - component: {fileID: 222589036224298850} + - component: {fileID: 114524267162324766} + - component: {fileID: 114182425307715978} + - component: {fileID: 5363505065118244905} + m_Layer: 5 + m_Name: Notice3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224952865744259402 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343215775437582} + 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: 224718936248725256} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 200, y: 100} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222589036224298850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343215775437582} + m_CullTransparentMesh: 1 +--- !u!114 &114524267162324766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343215775437582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE914\uE90E\uE906\uE919\uE90D\uE903\uE90C" +--- !u!114 &114182425307715978 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343215775437582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114524267162324766} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &5363505065118244905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343215775437582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &1364272316567620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224076888652929146} + - component: {fileID: 222094947316534824} + - component: {fileID: 114942796211385600} + - component: {fileID: 8501268884808308792} + - component: {fileID: 5939079889981415535} + m_Layer: 5 + m_Name: Notice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224076888652929146 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364272316567620} + 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: 224403132933707118} + - {fileID: 224001354146292790} + - {fileID: 224349194079863330} + m_Father: {fileID: 224718936248725256} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 200, y: 120} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222094947316534824 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364272316567620} + m_CullTransparentMesh: 1 +--- !u!114 &114942796211385600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364272316567620} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8501268884808308792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364272316567620} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 7 + m_Spacing: 2 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &5939079889981415535 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364272316567620} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &1408553183044094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224217234328424304} + - component: {fileID: 222704094267761204} + - component: {fileID: 114726497317607614} + m_Layer: 5 + m_Name: QRCodeBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224217234328424304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408553183044094} + 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: 224718936248725256} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200, y: -136} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222704094267761204 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408553183044094} + m_CullTransparentMesh: 1 +--- !u!114 &114726497317607614 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408553183044094} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 063ea801346ec4ee6a70131557a1b5f7, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1542022621155186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224406378007279908} + - component: {fileID: 222769154153583858} + - component: {fileID: 114970416193299554} + m_Layer: 5 + m_Name: Close + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224406378007279908 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542022621155186} + 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: 5586536578432998106} + m_Father: {fileID: 224718936248725256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 48, y: 0} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222769154153583858 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542022621155186} + m_CullTransparentMesh: 1 +--- !u!114 &114970416193299554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1542022621155186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1662798478929992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224403132933707118} + - component: {fileID: 222522478928618218} + - component: {fileID: 114826673492036608} + - component: {fileID: 114488611853214532} + - component: {fileID: 1308144289790743758} + m_Layer: 5 + m_Name: Notice1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224403132933707118 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662798478929992} + 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: 224076888652929146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 14} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222522478928618218 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662798478929992} + m_CullTransparentMesh: 1 +--- !u!114 &114826673492036608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662798478929992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE910\uE916\uE91D" +--- !u!114 &114488611853214532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662798478929992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 0 + 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114826673492036608} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1308144289790743758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662798478929992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &1749708743928082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224144653408527664} + - component: {fileID: 222272988310271742} + - component: {fileID: 114650273804705212} + - component: {fileID: 3993069767099736763} + m_Layer: 5 + m_Name: SubStatus + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224144653408527664 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749708743928082} + 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: 224718936248725256} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -420} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222272988310271742 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749708743928082} + m_CullTransparentMesh: 1 +--- !u!114 &114650273804705212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749708743928082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6, g: 0.6, b: 0.6, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &3993069767099736763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749708743928082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &1897706071416842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224208115287414650} + - component: {fileID: 222514976122377968} + - component: {fileID: 114795113803725366} + m_Layer: 5 + m_Name: Refresh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224208115287414650 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897706071416842} + 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: 224781566814767164} + m_Father: {fileID: 224718936248725256} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200, y: -156} + m_SizeDelta: {x: 160, y: 160} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222514976122377968 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897706071416842} + m_CullTransparentMesh: 1 +--- !u!114 &114795113803725366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897706071416842} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.9529412} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1897908802238046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224667366762974222} + - component: {fileID: 222230038600199628} + - component: {fileID: 114366854623395088} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224667366762974222 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897908802238046} + 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: 224781566814767164} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -60} + m_SizeDelta: {x: 75, y: 25} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222230038600199628 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897908802238046} + m_CullTransparentMesh: 1 +--- !u!114 &114366854623395088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897908802238046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.078431375, g: 0.7254902, b: 0.78431374, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE904\uE909\uE918\uE91B" +--- !u!1 &1954637882154232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224575306207820326} + - component: {fileID: 222110526104909654} + - component: {fileID: 114847954481016976} + m_Layer: 5 + m_Name: QRImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224575306207820326 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954637882154232} + 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: 224718936248725256} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200, y: -156} + m_SizeDelta: {x: 160, y: 160} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222110526104909654 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954637882154232} + m_CullTransparentMesh: 1 +--- !u!114 &114847954481016976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954637882154232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 0} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!1 &1988411968899274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224718936248725256} + - component: {fileID: 222194775545726812} + - component: {fileID: 114158668541600830} + m_Layer: 5 + m_Name: TapTapSdkQRCodeWindow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224718936248725256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988411968899274} + 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: 224406378007279908} + - {fileID: 1287628093688890418} + - {fileID: 2226679929402887945} + - {fileID: 224217234328424304} + - {fileID: 224555448362034682} + - {fileID: 224575306207820326} + - {fileID: 224208115287414650} + - {fileID: 224076888652929146} + - {fileID: 224952865744259402} + - {fileID: 1592072733947156768} + - {fileID: 2143995953673627777} + - {fileID: 1885214057858868487} + - {fileID: 4555650039303814685} + - {fileID: 8655794023076712133} + - {fileID: 224208046306343802} + - {fileID: 224144653408527664} + m_Father: {fileID: 0} + 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: 0, y: 0} + m_SizeDelta: {x: 800, y: 480} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222194775545726812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988411968899274} + m_CullTransparentMesh: 1 +--- !u!114 &114158668541600830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988411968899274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 86b9e58454341479496cd09b34eb515a, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &150226284421809259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1885214057858868487} + - component: {fileID: 3119365251458936821} + - component: {fileID: 2204299582533945346} + m_Layer: 5 + m_Name: WebIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1885214057858868487 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150226284421809259} + 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: 224718936248725256} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -200, y: -170} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3119365251458936821 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150226284421809259} + m_CullTransparentMesh: 1 +--- !u!114 &2204299582533945346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150226284421809259} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 24984427533904e829daf33cf945d740, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &247066806693140351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2226679929402887945} + - component: {fileID: 3452393676198722448} + - component: {fileID: 7990442181361041222} + - component: {fileID: 7512879347860324706} + m_Layer: 0 + m_Name: ScanLogin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2226679929402887945 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247066806693140351} + 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: 224718936248725256} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200, y: -90} + m_SizeDelta: {x: 0, y: 22} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3452393676198722448 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247066806693140351} + m_CullTransparentMesh: 1 +--- !u!114 &7990442181361041222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247066806693140351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u5B89\u5168\u626B\u7801\u767B\u5F55" +--- !u!114 &7512879347860324706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247066806693140351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &658739829220809330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2982580310857647298} + - component: {fileID: 3256792160625140969} + - component: {fileID: 774178880156365463} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2982580310857647298 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 658739829220809330} + 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: 1287628093688890418} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 52, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3256792160625140969 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 658739829220809330} + m_CullTransparentMesh: 0 +--- !u!114 &774178880156365463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 658739829220809330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: cec9725b4221741949f3a4539a94c8cf, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1168046447864612446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287628093688890418} + - component: {fileID: 4863089779993337429} + - component: {fileID: 4871760174556878090} + m_Layer: 5 + m_Name: TitleContent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1287628093688890418 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168046447864612446} + 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: 8323737686996370292} + - {fileID: 3628082805042060876} + - {fileID: 2982580310857647298} + - {fileID: 6122778418638070077} + m_Father: {fileID: 224718936248725256} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -25} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4863089779993337429 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168046447864612446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 7 + m_Spacing: 3 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &4871760174556878090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168046447864612446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &2149779302729841542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3098557503136184609} + - component: {fileID: 7714257206580032546} + - component: {fileID: 1285548740285093998} + - component: {fileID: 1396427246809547135} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3098557503136184609 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149779302729841542} + 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: 8655794023076712133} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7714257206580032546 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149779302729841542} + m_CullTransparentMesh: 1 +--- !u!114 &1285548740285093998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149779302729841542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 3b1c92b10dde9426cbbccfbbd9c05cb1, type: 3} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u8DF3\u8F6C\u81F3 TapTap" +--- !u!114 &1396427246809547135 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2149779302729841542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &2454279924397193051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3628082805042060876} + - component: {fileID: 7115468023948664980} + - component: {fileID: 1471356546683235396} + m_Layer: 5 + m_Name: TitleLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3628082805042060876 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2454279924397193051} + 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: 1287628093688890418} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 35, y: -15} + m_SizeDelta: {x: 54, y: 18} + m_Pivot: {x: 0, y: 1} +--- !u!222 &7115468023948664980 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2454279924397193051} + m_CullTransparentMesh: 1 +--- !u!114 &1471356546683235396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2454279924397193051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\uE920" +--- !u!1 &2730601806833423713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4555650039303814685} + - component: {fileID: 7207187395040338108} + - component: {fileID: 7462883172677547021} + - component: {fileID: 1054837921495637892} + m_Layer: 5 + m_Name: WebDescription + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4555650039303814685 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2730601806833423713} + 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: 224718936248725256} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -200, y: -244} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &7207187395040338108 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2730601806833423713} + m_CullTransparentMesh: 1 +--- !u!114 &7462883172677547021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2730601806833423713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.53333336, g: 0.53333336, b: 0.53333336, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1.6 + m_Text: "\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u524D\u5F80\u7F51\u9875\u6D4F\u89C8\u5668\uFF0C\n\u6388\u6743 + TapTap \u8D26\u53F7\uFF0C\u5B8C\u6210\u540E\u5C06\u81EA\u52A8\u8FD4\u56DE\u6E38\u620F\u3002" +--- !u!114 &1054837921495637892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2730601806833423713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1 &3438966774921750295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8655794023076712133} + - component: {fileID: 6369464628964629009} + - component: {fileID: 5636145399286364804} + - component: {fileID: 8494712241897329145} + m_Layer: 5 + m_Name: WebLoginButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8655794023076712133 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3438966774921750295} + 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: 3098557503136184609} + m_Father: {fileID: 224718936248725256} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -200, y: -320} + m_SizeDelta: {x: 200, y: 36} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &6369464628964629009 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3438966774921750295} + m_CullTransparentMesh: 1 +--- !u!114 &5636145399286364804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3438966774921750295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c40d5e66443dd4ee892103750b8d2d5f, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8494712241897329145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3438966774921750295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, 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_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5636145399286364804} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4409233443017323083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5586536578432998106} + - component: {fileID: 7116334986608814414} + - component: {fileID: 1448976349139204931} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5586536578432998106 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409233443017323083} + 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: 224406378007279908} + 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: 0, y: 0} + m_SizeDelta: {x: 22, y: 22} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7116334986608814414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409233443017323083} + m_CullTransparentMesh: 1 +--- !u!114 &1448976349139204931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4409233443017323083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 362d3f2c5cb32453383f03bdcaf75f76, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8551671935071319748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6122778418638070077} + - component: {fileID: 3660598986051908521} + - component: {fileID: 251189493305470616} + - component: {fileID: 7267532186503933036} + m_Layer: 5 + m_Name: TitleAccount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6122778418638070077 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8551671935071319748} + 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: 1287628093688890418} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 18} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3660598986051908521 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8551671935071319748} + m_CullTransparentMesh: 1 +--- !u!114 &251189493305470616 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8551671935071319748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 3b1c92b10dde9426cbbccfbbd9c05cb1, type: 3} + m_FontSize: 16 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u8D26\u53F7\u767B\u5F55" +--- !u!114 &7267532186503933036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8551671935071319748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &8635644772030563861 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8323737686996370292} + - component: {fileID: 875383233000989718} + - component: {fileID: 8678274497894774839} + - component: {fileID: 4087769656953574588} + m_Layer: 5 + m_Name: TitleUse + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8323737686996370292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635644772030563861} + 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: 1287628093688890418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 18} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &875383233000989718 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635644772030563861} + m_CullTransparentMesh: 1 +--- !u!114 &8678274497894774839 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635644772030563861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 3b1c92b10dde9426cbbccfbbd9c05cb1, type: 3} + m_FontSize: 16 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u4F7F\u7528" +--- !u!114 &4087769656953574588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8635644772030563861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &8710324469925805941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1592072733947156768} + - component: {fileID: 1287205194081041748} + - component: {fileID: 945199783146882795} + m_Layer: 5 + m_Name: Divider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1592072733947156768 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8710324469925805941} + 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: 224718936248725256} + m_RootOrder: 9 + 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: 0} + m_SizeDelta: {x: 1, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1287205194081041748 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8710324469925805941} + m_CullTransparentMesh: 1 +--- !u!114 &945199783146882795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8710324469925805941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 8dd7a6f3160e348049a949bc78ef0b29, 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 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &9083745528180864496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2143995953673627777} + - component: {fileID: 7136633382194147163} + - component: {fileID: 8120867238471901261} + - component: {fileID: 7484548095308407317} + m_Layer: 0 + m_Name: WebLogin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2143995953673627777 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9083745528180864496} + 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: 224718936248725256} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -200, y: -90} + m_SizeDelta: {x: 0, y: 22} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &7136633382194147163 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9083745528180864496} + m_CullTransparentMesh: 1 +--- !u!114 &8120867238471901261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9083745528180864496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 922f25809659d41b4b23147484bd150d, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u4F7F\u7528\u7F51\u9875\u6D4F\u89C8\u5668\u5B8C\u6210\u6388\u6743" +--- !u!114 &7484548095308407317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9083745528180864496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 diff --git a/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab.meta b/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab.meta new file mode 100644 index 0000000..3ca5a5e --- /dev/null +++ b/Standalone/Resources/Prefabs/TapTapSdkQRCodeWindow.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 03b946f54c2794e90ab154839c962f56 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab b/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab new file mode 100644 index 0000000..ef00a62 --- /dev/null +++ b/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab @@ -0,0 +1,175 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1031941377632642} + m_IsPrefabParent: 1 +--- !u!1 &1031941377632642 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224567297738835210} + - component: {fileID: 223422782340899786} + - component: {fileID: 114902123778189970} + - component: {fileID: 114432939870885212} + m_Layer: 5 + m_Name: TapTapSdkWindow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1423954524948538 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224285659638788426} + - component: {fileID: 222279289448157226} + - component: {fileID: 114126610965858720} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114126610965858720 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1423954524948538} + 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: 0, g: 0, b: 0, a: 0.2} + 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: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114432939870885212 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1031941377632642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114902123778189970 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1031941377632642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!222 &222279289448157226 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1423954524948538} +--- !u!223 &223422782340899786 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1031941377632642} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 999 + m_TargetDisplay: 0 +--- !u!224 &224285659638788426 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1423954524948538} + 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: 224567297738835210} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224567297738835210 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1031941377632642} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224285659638788426} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} diff --git a/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab.meta b/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab.meta new file mode 100644 index 0000000..4fd6012 --- /dev/null +++ b/Standalone/Resources/Prefabs/TapTapSdkWindow.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62f7af8ce2d8344679afeac4a9e1c3fc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites.meta b/Standalone/Resources/Sprites.meta new file mode 100644 index 0000000..9ec0210 --- /dev/null +++ b/Standalone/Resources/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c612e60660b1144d38798652ede11791 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-divider.png b/Standalone/Resources/Sprites/taptap-divider.png new file mode 100644 index 0000000..230d960 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-divider.png differ diff --git a/Standalone/Resources/Sprites/taptap-divider.png.meta b/Standalone/Resources/Sprites/taptap-divider.png.meta new file mode 100644 index 0000000..c869fe1 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-divider.png.meta @@ -0,0 +1,146 @@ +fileFormatVersion: 2 +guid: 8dd7a6f3160e348049a949bc78ef0b29 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 300 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-logo.png b/Standalone/Resources/Sprites/taptap-logo.png new file mode 100644 index 0000000..519b3a5 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-logo.png differ diff --git a/Standalone/Resources/Sprites/taptap-logo.png.meta b/Standalone/Resources/Sprites/taptap-logo.png.meta new file mode 100644 index 0000000..1b6199d --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-logo.png.meta @@ -0,0 +1,130 @@ +fileFormatVersion: 2 +guid: cec9725b4221741949f3a4539a94c8cf +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + vTOnly: 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: 300 + 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 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-bg.png b/Standalone/Resources/Sprites/taptap-sdk-bg.png new file mode 100644 index 0000000..857c3da Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-bg.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-bg.png.meta b/Standalone/Resources/Sprites/taptap-sdk-bg.png.meta new file mode 100644 index 0000000..5420b38 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-bg.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 009e83026f1ef4783a2be66036de3008 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.5, y: 0.51} + spritePixelsToUnits: 300 + spriteBorder: {x: 96, y: 108, z: 96, w: 103} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-cancel.png b/Standalone/Resources/Sprites/taptap-sdk-cancel.png new file mode 100644 index 0000000..397d159 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-cancel.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-cancel.png.meta b/Standalone/Resources/Sprites/taptap-sdk-cancel.png.meta new file mode 100644 index 0000000..34ca143 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-cancel.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: b4fd27620171d4d6b9243c0122efa3c9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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: 300 + 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 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-guide.png b/Standalone/Resources/Sprites/taptap-sdk-guide.png new file mode 100644 index 0000000..11c48ea Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-guide.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-guide.png.meta b/Standalone/Resources/Sprites/taptap-sdk-guide.png.meta new file mode 100644 index 0000000..1e6ea18 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-guide.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 09fe4f8199c4e4778946b67579db5075 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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: 300 + 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 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-logo.png b/Standalone/Resources/Sprites/taptap-sdk-logo.png new file mode 100644 index 0000000..f195259 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-logo.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-logo.png.meta b/Standalone/Resources/Sprites/taptap-sdk-logo.png.meta new file mode 100644 index 0000000..49bfa36 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-logo.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: d29af1bc897ea49a88506d84c81b1392 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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: 300 + 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 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png new file mode 100644 index 0000000..2723d52 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png.meta b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png.meta new file mode 100644 index 0000000..dcddcac --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg-grey.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 063ea801346ec4ee6a70131557a1b5f7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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: 300 + spriteBorder: {x: 61, y: 61, z: 61, w: 61} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png new file mode 100644 index 0000000..71c52a4 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png.meta b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png.meta new file mode 100644 index 0000000..8259b01 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-qrcode-bg.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: e566f05a80791430ebad8154cf2e0153 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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: 300 + spriteBorder: {x: 42, y: 42, z: 42, w: 42} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png b/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png new file mode 100644 index 0000000..ae7900d Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png.meta b/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png.meta new file mode 100644 index 0000000..4e88c33 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-refresh-btn-bg.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: a60d2c639f46d4ce894ac9c1faf81e86 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-sdk-refresh.png b/Standalone/Resources/Sprites/taptap-sdk-refresh.png new file mode 100644 index 0000000..36ae8b1 Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-sdk-refresh.png differ diff --git a/Standalone/Resources/Sprites/taptap-sdk-refresh.png.meta b/Standalone/Resources/Sprites/taptap-sdk-refresh.png.meta new file mode 100644 index 0000000..084f38a --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-sdk-refresh.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 13199a88a311149089187eea28606a3f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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: 2 + 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 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Resources/Sprites/taptap-web-login.png b/Standalone/Resources/Sprites/taptap-web-login.png new file mode 100644 index 0000000..b2ef9ff Binary files /dev/null and b/Standalone/Resources/Sprites/taptap-web-login.png differ diff --git a/Standalone/Resources/Sprites/taptap-web-login.png.meta b/Standalone/Resources/Sprites/taptap-web-login.png.meta new file mode 100644 index 0000000..df7d028 --- /dev/null +++ b/Standalone/Resources/Sprites/taptap-web-login.png.meta @@ -0,0 +1,146 @@ +fileFormatVersion: 2 +guid: 24984427533904e829daf33cf945d740 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 300 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime.meta b/Standalone/Runtime.meta new file mode 100644 index 0000000..080db22 --- /dev/null +++ b/Standalone/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5acf9bcf0b16a4b3591280321c8968db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal.meta b/Standalone/Runtime/Internal.meta new file mode 100644 index 0000000..7e429d1 --- /dev/null +++ b/Standalone/Runtime/Internal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a139438399ae49efa0c5a9f7786c340 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/ContainerWindow.cs b/Standalone/Runtime/Internal/ContainerWindow.cs new file mode 100644 index 0000000..cc99436 --- /dev/null +++ b/Standalone/Runtime/Internal/ContainerWindow.cs @@ -0,0 +1,67 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace TapTap.Login.Internal +{ + internal class ContainerWindow : UIElement + { + + void Awake() + { + transitionDurationTime = 0.1f; + CanvasScaler scaler = GetComponent(); + if (Screen.height > 1080) + { + scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; + } + else + { + scaler.uiScaleMode = CanvasScaler.ScaleMode.ConstantPixelSize; + } + + } + + public override IEnumerator PlayExit() + { + if (!animationLaunched) + { + animationLaunched = true; + float startTime = Time.time; + float endTime = startTime + transitionDurationTime; + CanvasGroup canvasGroup = UIOperation.GetComponent(gameObject); + canvasGroup.alpha = 1f; + while (Time.time < endTime) + { + yield return new WaitForEndOfFrame(); + float delta = (Time.time - startTime) / transitionDurationTime; + canvasGroup.alpha = 1 - delta; + } + } + animationLaunched = false; + yield return null; + } + + public override IEnumerator PlayEnter() + { + if (!animationLaunched) + { + animationLaunched = true; + float startTime = Time.time; + float endTime = startTime + transitionDurationTime; + CanvasGroup canvasGroup = UIOperation.GetComponent(gameObject); + canvasGroup.alpha = 0f; + while (Time.time < endTime) + { + yield return new WaitForEndOfFrame(); + float delta = (Time.time - startTime) / transitionDurationTime; + canvasGroup.alpha = delta; + } + } + animationLaunched = false; + yield return null; + } + + } + +} diff --git a/Standalone/Runtime/Internal/ContainerWindow.cs.meta b/Standalone/Runtime/Internal/ContainerWindow.cs.meta new file mode 100644 index 0000000..d34631e --- /dev/null +++ b/Standalone/Runtime/Internal/ContainerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13ad06faee0934d22b8ddbe5ef50e13a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/LoginHelper.cs b/Standalone/Runtime/Internal/LoginHelper.cs new file mode 100644 index 0000000..5876c20 --- /dev/null +++ b/Standalone/Runtime/Internal/LoginHelper.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using TapTap.Common; + +namespace TapTap.Login.Internal +{ + internal class LoginHelper + { + private static readonly string _accessToken = "taptapsdk_accesstoken"; + + private static readonly string _profile = "taptapsdk_profile"; + + public static Task Login() + { + return Login(new[] { TapLogin.TAP_LOGIN_SCOPE_PUBLIC_PROFILE }); + } + + public static Task Login(string[] permissions) + { + var tcs = new TaskCompletionSource(); + + LoginManager.Instance.LogInWithReadPermissions(permissions, result => + { + if (result == null) + { + tcs.TrySetException(new TapException((int) TapErrorCode.ERROR_CODE_UNDEFINED, "UnKnow Error")); + return; + } + + if (result.IsCanceled) + { + tcs.TrySetException( + new TapException((int) TapErrorCode.ERROR_CODE_LOGIN_CANCEL, "Login Cancel")); + return; + } + + if (result.IsFaulted) + { + var str = result.Exception.Message; + if (str == "unknown") + { + tcs.TrySetException(new TapException((int) TapErrorCode.ERROR_CODE_UNDEFINED, + "UnKnow Error")); + } + else + { + var dict = Json.Deserialize(str) as Dictionary; + var data = SafeDictionary.GetValue(dict, "data") as Dictionary; + tcs.TrySetException(new TapException(SafeDictionary.GetValue(data, "code"), + SafeDictionary.GetValue(data, "error_description"))); + } + + return; + } + + tcs.TrySetResult(result.Token); + }); + return tcs.Task; + } + + public static Task GetProfile() + { + var tcs = new TaskCompletionSource(); + try + { + var profileStr = DataStorage.LoadString(_profile); + if (profileStr != null) + { + var profile = new Profile(profileStr); + tcs.TrySetResult(profile); + } + } + catch (Exception e) + { + tcs.TrySetException(e); + } + + return tcs.Task; + } + + public static Task GetAccessToken() + { + var tcs = new TaskCompletionSource(); + try + { + var accessTokenStr = DataStorage.LoadString(_accessToken); + if (accessTokenStr != null) + { + var accessToken = new AccessToken(accessTokenStr); + tcs.TrySetResult(accessToken); + } + } + catch (Exception e) + { + tcs.TrySetException(e); + } + + return tcs.Task; + } + + public static void Logout() + { + DataStorage.SaveString(_profile, null); + DataStorage.SaveString(_accessToken, null); + } + } +} \ No newline at end of file diff --git a/Standalone/Runtime/Internal/LoginHelper.cs.meta b/Standalone/Runtime/Internal/LoginHelper.cs.meta new file mode 100644 index 0000000..05eabe3 --- /dev/null +++ b/Standalone/Runtime/Internal/LoginHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95d96a84af34d4b27bf43d62870f67ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/LoginLanguage.cs b/Standalone/Runtime/Internal/LoginLanguage.cs new file mode 100644 index 0000000..48874af --- /dev/null +++ b/Standalone/Runtime/Internal/LoginLanguage.cs @@ -0,0 +1,594 @@ +using TapTap.Common; + +namespace TapTap.Login.Internal +{ + public class LoginLanguage + { + private static volatile LoginLanguage _instance; + private static readonly object ObjLock = new object(); + private readonly LoginLangZH zh; + private readonly LoginLangEN en; + private readonly LoginLangID id; + private readonly LoginLangJA ja; + private readonly LoginLangKO ko; + private readonly LoginLangTH th; + private readonly LoginLangZHTW tw; + + private static LoginLanguage Instance + { + get + { + if (_instance != null) return _instance; + lock (ObjLock) + { + if (_instance == null) + { + _instance = new LoginLanguage(); + } + } + + return _instance; + } + } + + private LoginLanguage() + { + zh = new LoginLangZH(); + en = new LoginLangEN(); + id = new LoginLangID(); + ja = new LoginLangJA(); + ko = new LoginLangKO(); + th = new LoginLangTH(); + tw = new LoginLangZHTW(); + } + + public static ILoginLang GetCurrentLang() + { + switch (TapLocalizeManager.GetCurrentLanguage()) + { + case TapLanguage.ZH_HANS: + return Instance.zh; + case TapLanguage.EN: + return Instance.en; + case TapLanguage.ID: + return Instance.id; + case TapLanguage.JA: + return Instance.ja; + case TapLanguage.KO: + return Instance.ko; + case TapLanguage.TH: + return Instance.th; + case TapLanguage.ZH_HANT: + return Instance.tw; + default: + return Instance.en; + } + } + } + + public class LoginLangZH : ILoginLang { + public string TitleUse() { + return "使用"; + } + + public string TitleLogin() { + return "账号登录"; + } + + public string QrTitleLogin() { + return "安全扫码登录"; + } + + public string QrRefresh() { + return "点击刷新"; + } + + public string QrNoticeUse() { + return "请使用"; + } + + public string QrNoticeClient() { + return "客户端"; + } + + public string QrNoticeScanToLogin() { + return "扫描二维码登录"; + } + + public string WebLogin() { + return "使用网页浏览器完成授权"; + } + + public string WebNotice() { + return "点击下方按钮前往网页浏览器,\n授权 TapTap 账号,完成后将自动返回游戏。"; + } + + public string WebButtonJumpToWeb() { + return "跳转至 TapTap"; + } + + public string QrNoticeCancel() { + return "您已取消此次登录"; + } + + public string QrNoticeCancel2() { + return "请重新扫码"; + } + + public string QrnNoticeSuccess() { + return "扫码成功"; + } + + public string QrnNoticeSuccess2() { + return "请在手机上确认"; + } + + public string WebNoticeLogin() { + return "正在登录中,请稍后"; + } + + public string WebNoticeFail() { + return "登录失败"; + } + + public string WebNoticeFail2() { + return "请重新点击打开网页进行授权"; + } + } + + public class LoginLangEN : ILoginLang { + public string TitleUse() { + return "Log In with"; + } + + public string TitleLogin() { + return ""; + } + + public string QrTitleLogin() { + return "Via QR Code"; + } + + public string QrRefresh() { + return "Refresh"; + } + + public string QrNoticeUse() { + return "Use"; + } + + public string QrNoticeClient() { + return "App"; + } + + public string QrNoticeScanToLogin() { + return "to scan the code"; + } + + public string WebLogin() { + return "Via Web Browser"; + } + + public string WebNotice() { + return "Allow permission to log in with TapTap,\nYou'll be redirected back after login."; + } + + public string WebButtonJumpToWeb() { + return "Go to TapTap"; + } + + public string QrNoticeCancel() { + return "Failed to log in"; + } + + public string QrNoticeCancel2() { + return "Please try again"; + } + + public string QrnNoticeSuccess() { + return "Success"; + } + + public string QrnNoticeSuccess2() { + return "Please confirm login on your phone"; + } + + public string WebNoticeLogin() { + return "Logging in"; + } + + public string WebNoticeFail() { + return "Failed to log in"; + } + + public string WebNoticeFail2() { + return "Please try again"; + } + } + + public class LoginLangID : ILoginLang { + public string TitleUse() { + return "Log In dengan "; + } + + public string TitleLogin() { + return ""; + } + + public string QrTitleLogin() { + return "Melalui Kode QR"; + } + + public string QrRefresh() { + return "Refresh"; + } + + public string QrNoticeUse() { + return ""; + } + + public string QrNoticeClient() { + return ""; + } + + public string QrNoticeScanToLogin() { + return "Pindai kode QR \n dengan apliaksi TapTap"; + } + + public string WebLogin() { + return "Melalui Browser Web"; + } + + public string WebNotice() { + return "Berikan izin untuk log in dengan TapTap. \nKamu akan diarahkan kembali setelah log in."; + } + + public string WebButtonJumpToWeb() { + return "Buka TapTap"; + } + + public string QrNoticeCancel() { + return "Gagal log in"; + } + + public string QrNoticeCancel2() { + return "Silakan coba lagi."; + } + + public string QrnNoticeSuccess() { + return "Berhasil"; + } + + public string QrnNoticeSuccess2() { + return "Silakan konfirmasi log in di ponselmu."; + } + + public string WebNoticeLogin() { + return "Sedang log in..."; + } + + public string WebNoticeFail() { + return "Gagal log in"; + } + + public string WebNoticeFail2() { + return "Silakan coba lagi."; + } + } + + public class LoginLangJA : ILoginLang { + public string TitleUse() { + return ""; + } + + public string TitleLogin() { + return "でログイン"; + } + + public string QrTitleLogin() { + return "QRコードを使う"; + } + + public string QrRefresh() { + return "更新"; + } + + public string QrNoticeUse() { + return ""; + } + + public string QrNoticeClient() { + return "アプリで"; + } + + public string QrNoticeScanToLogin() { + return "QRコードをスキャン"; + } + + public string WebLogin() { + return "ウェブブラウザを使う"; + } + + public string WebNotice() { + return "TapTapへのログインを許可します。\nログイン後にリダイレクトされます。"; + } + + public string WebButtonJumpToWeb() { + return "TapTapを開く"; + } + + public string QrNoticeCancel() { + return "ログインに失敗しました"; + } + + public string QrNoticeCancel2() { + return "もう一度お試しください。"; + } + + public string QrnNoticeSuccess() { + return "成功"; + } + + public string QrnNoticeSuccess2() { + return "お使いの携帯電話でログインを確認してください。"; + } + + public string WebNoticeLogin() { + return "ログイン中…"; + } + + public string WebNoticeFail() { + return "ログインに失敗しました"; + } + + public string WebNoticeFail2() { + return "もう一度お試しください。"; + } + } + + public class LoginLangKO : ILoginLang { + public string TitleUse() { + return ""; + } + + public string TitleLogin() { + return "으로 로그인"; + } + + public string QrTitleLogin() { + return "QR 코드 사용"; + } + + public string QrRefresh() { + return "새로 고치기"; + } + + public string QrNoticeUse() { + return ""; + } + + public string QrNoticeClient() { + return "앱으로"; + } + + public string QrNoticeScanToLogin() { + return "QR 코드를 스캔하세요"; + } + + public string WebLogin() { + return "웹 브라우저 사용"; + } + + public string WebNotice() { + return "Taptap으로 로그인하는 권한을 허락하세요.\n로그인 후에 원래 화면으로 돌아갑니다."; + } + + public string WebButtonJumpToWeb() { + return "Taptap으로 이동"; + } + + public string QrNoticeCancel() { + return "로그인 실패"; + } + + public string QrNoticeCancel2() { + return "다시 시도하세요."; + } + + public string QrnNoticeSuccess() { + return "성공"; + } + + public string QrnNoticeSuccess2() { + return "스마트폰에서 로그인을 확인하세요."; + } + + public string WebNoticeLogin() { + return "로그인 중..."; + } + + public string WebNoticeFail() { + return "로그인 실패"; + } + + public string WebNoticeFail2() { + return "다시 시도하세요."; + } + } + + public class LoginLangTH : ILoginLang { + public string TitleUse() { + return "ล็อกอินด้วย "; + } + + public string TitleLogin() { + return ""; + } + + public string QrTitleLogin() { + return "ผ่าน QR โค้ด"; + } + + public string QrRefresh() { + return "รีเฟรช"; + } + + public string QrNoticeUse() { + return ""; + } + + public string QrNoticeClient() { + return ""; + } + + public string QrNoticeScanToLogin() { + return "สแกน QR โค้ด \n ด้วยแอป TapTap"; + } + + public string WebLogin() { + return "ผ่านเว็บเบราว์เซอร์"; + } + + public string WebNotice() { + return "อนุญาตให้ล็อกอินด้วย TapTap \nคุณจะถูกเปลี่ยนเส้นทางกลับหลังจากล็อกอิน"; + } + + public string WebButtonJumpToWeb() { + return "ไปที่ TapTap"; + } + + public string QrNoticeCancel() { + return "ไม่สามารถล็อกอินได้"; + } + + public string QrNoticeCancel2() { + return "โปรดลองอีกครั้ง"; + } + + public string QrnNoticeSuccess() { + return "สำเร็จ"; + } + + public string QrnNoticeSuccess2() { + return "โปรดยืนยันการล็อกอินบนโทรศัพท์ของคุณ"; + } + + public string WebNoticeLogin() { + return "กำลังล็อกอิน..."; + } + + public string WebNoticeFail() { + return "ไม่สามารถล็อกอินได้"; + } + + public string WebNoticeFail2() { + return "โปรดลองอีกครั้ง"; + } + } + + public class LoginLangZHTW : ILoginLang { + public string TitleUse() { + return "使用"; + } + + public string TitleLogin() { + return "登入"; + } + + public string QrTitleLogin() { + return "透過 QR 碼"; + } + + public string QrRefresh() { + return "重新整理"; + } + + public string QrNoticeUse() { + return "使用"; + } + + public string QrNoticeClient() { + return "應用程式"; + } + + public string QrNoticeScanToLogin() { + return "掃描 QR 碼"; + } + + public string WebLogin() { + return "透過網路瀏覽器"; + } + + public string WebNotice() { + return "請允許使用 TapTap 登入。\n登入後系統會將你重新導回此頁面。"; + } + + public string WebButtonJumpToWeb() { + return "前往 TapTap"; + } + + public string QrNoticeCancel() { + return "登入失敗"; + } + + public string QrNoticeCancel2() { + return "請再試一次。"; + } + + public string QrnNoticeSuccess() { + return "成功"; + } + + public string QrnNoticeSuccess2() { + return "請在您的手機上確認登入。"; + } + + public string WebNoticeLogin() { + return "正在登入……"; + } + + public string WebNoticeFail() { + return "登入失敗"; + } + + public string WebNoticeFail2() { + return "請再試一次。"; + } + } + + public interface ILoginLang + { + string TitleUse(); + + string TitleLogin(); + + string QrTitleLogin(); + + string QrRefresh(); + + string QrNoticeUse(); + + string QrNoticeClient(); + + string QrNoticeScanToLogin(); + + string WebLogin(); + + string WebNotice(); + + string WebButtonJumpToWeb(); + + string QrNoticeCancel(); + + string QrNoticeCancel2(); + + string QrnNoticeSuccess(); + string QrnNoticeSuccess2(); + + string WebNoticeLogin(); + + string WebNoticeFail(); + + string WebNoticeFail2(); + } +} \ No newline at end of file diff --git a/Standalone/Runtime/Internal/LoginLanguage.cs.meta b/Standalone/Runtime/Internal/LoginLanguage.cs.meta new file mode 100644 index 0000000..3dadcf5 --- /dev/null +++ b/Standalone/Runtime/Internal/LoginLanguage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00074d76cff9b4125b2d5820b194d5a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/LoginManager.cs b/Standalone/Runtime/Internal/LoginManager.cs new file mode 100644 index 0000000..c39f98e --- /dev/null +++ b/Standalone/Runtime/Internal/LoginManager.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using TapTap.Common; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace TapTap.Login.Internal +{ + internal class LoginManager + { + public delegate void OnLoginResult(LoginResult result); + + private static LoginManager _instance; + private static readonly object objlock = new object(); + + public static LoginManager Instance + { + get + { + if (_instance == null) + { + lock (objlock) + { + if (_instance == null) + { + _instance = new LoginManager(); + } + } + } + return _instance; + } + } + + public void LogInWithReadPermissions(string[] permissions, + OnLoginResult onLoginResult) + { + GameObject managerObject = new GameObject + { + name = "TapTapSDKUIManager" + }; + Object.DontDestroyOnLoad(managerObject); + UIManager manager = managerObject.GetComponent(); + if (manager == null) + { + managerObject.AddComponent(); + } + manager = managerObject.GetComponent(); + + Dictionary configs = new Dictionary + { + { "client_id", TapTapSdk.ClientId }, + { "permissions", permissions } + }; + manager.ShowQRCodeLogin(configs, (code, data) => + { + if (onLoginResult != null) + { + if (code == UIManager.RESULT_CLOSE) + { + LoginResult result = new LoginResult(); + result.IsCanceled = true; + onLoginResult(result); + } else if (code == UIManager.RESULT_SUCCESS && data != null & data is AccessToken) + { + LoginResult result = new LoginResult(); + result.Token = data as AccessToken; + onLoginResult(result); + } else + { + LoginResult result = new LoginResult(); + result.IsFaulted = true; + if (data != null) + { + result.Exception = new Exception(data.ToString()); + } else + { + result.Exception = new Exception("unknown"); + } + + onLoginResult(result); + } + } + }); + } + + public void Logout() + { + DataStorage.SaveString("taptapsdk_accesstoken", null); + DataStorage.SaveString("taptapsdk_profile", null); + } + } + +} diff --git a/Standalone/Runtime/Internal/LoginManager.cs.meta b/Standalone/Runtime/Internal/LoginManager.cs.meta new file mode 100644 index 0000000..f3c6cc9 --- /dev/null +++ b/Standalone/Runtime/Internal/LoginManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca4288e410e844450865b5bf27559c6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/LoginResult.cs b/Standalone/Runtime/Internal/LoginResult.cs new file mode 100644 index 0000000..0ca1210 --- /dev/null +++ b/Standalone/Runtime/Internal/LoginResult.cs @@ -0,0 +1,15 @@ +using System; + +namespace TapTap.Login.Internal +{ + internal class LoginResult + { + public bool IsCanceled { get; set; } + + public bool IsFaulted { get; set; } + + public Exception Exception { get; set; } + + public AccessToken Token { get; set; } + } +} \ No newline at end of file diff --git a/Standalone/Runtime/Internal/LoginResult.cs.meta b/Standalone/Runtime/Internal/LoginResult.cs.meta new file mode 100644 index 0000000..da52cbc --- /dev/null +++ b/Standalone/Runtime/Internal/LoginResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aca4cec4d440941049b7f3d28b3f1bb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/Net.cs b/Standalone/Runtime/Internal/Net.cs new file mode 100644 index 0000000..23ce9ac --- /dev/null +++ b/Standalone/Runtime/Internal/Net.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace TapTap.Login.Internal +{ + public class Net : MonoBehaviour + { + public delegate void Action(); + + // ReSharper disable Unity.PerformanceAnalysis + public void PostAsync(string url, Dictionary queryParams, Dictionary formParams, Action methodForResult, Action methodForError) + { + if (string.IsNullOrEmpty(url)) + { + methodForError(-1, "empty url"); + return; + } + StartCoroutine(Post(url, queryParams, formParams, methodForResult, methodForError)); + } + + // ReSharper disable Unity.PerformanceAnalysis + public void GetAsync(string url, string authorization, Dictionary queryParams, Action methodForResult, Action methodForError) + { + if (string.IsNullOrEmpty(url)) + { + methodForError(-1, "empty url"); + return; + } + StartCoroutine(Get(url, authorization, queryParams, methodForResult, methodForError)); + } + + // ReSharper disable Unity.PerformanceAnalysis + private IEnumerator Get(string url, string authorization, Dictionary queryParams, Action methodForResult, Action methodForError) + { + string baseUrl; + Dictionary finalQueryParams = queryParams ?? new Dictionary(); + NameValueCollection collection = new NameValueCollection(); + ParseUrl(url, out baseUrl, out collection); + foreach (string key in collection.AllKeys) + { + foreach (string value in collection.GetValues(key)) + { + finalQueryParams.Add(key, value); + } + } + string finalUrl; + if (finalQueryParams.Count == 0) + { + finalUrl = baseUrl; + } + else + { + finalUrl = baseUrl + "?" + DictToQueryString(finalQueryParams); + } + + + Dictionary headers = new Dictionary(); + headers.Add("User-Agent", "TapTapUnitySDK/" + TapTapSdk.Version + " " + "UnityPlayer/" + Application.unityVersion); + headers.Add("Authorization", authorization); + WWW w = new WWW(finalUrl, null, headers); + yield return w; + + if (!string.IsNullOrEmpty(w.error)) + { + string data = w.text; + if (data != null) + { + methodForError(GetResponseCode(w), data); + } + else + { + methodForError(GetResponseCode(w), w.error); + } + + w.Dispose(); + yield break; + } + else + { + string data = w.text; + if (data != null) + { + methodForResult(w.text); + yield break; + } + else + { + methodForError(GetResponseCode(w), "Empyt response from server : " + url); + } + } + } + + // ReSharper disable Unity.PerformanceAnalysis + private IEnumerator Post(string url, Dictionary queryParams, Dictionary formParams, Action methodForResult, Action methodForError) + { + string baseUrl; + Dictionary finalQueryParams = queryParams ?? new Dictionary(); + NameValueCollection collection = new NameValueCollection(); + ParseUrl(url, out baseUrl, out collection); + foreach (string key in collection.AllKeys) + { + foreach (string value in collection.GetValues(key)) + { + finalQueryParams.Add(key, value); + } + } + string finalUrl; + if(finalQueryParams.Count == 0) + { + finalUrl = baseUrl; + } else + { + finalUrl = baseUrl + "?" + DictToQueryString(finalQueryParams); + } + WWWForm wwwForm = new WWWForm(); + Dictionary finalFormParams = formParams ?? new Dictionary(); + foreach (KeyValuePair kv in finalFormParams) + { + // Debug.Log($"kv.key:{kv.Key} value:{kv.Value}"); + wwwForm.AddField(kv.Key, kv.Value); +; } + + + Dictionary headers = new Dictionary(); + headers.Add("User-Agent", "TapTapUnitySDK/1.0 " + "UnityPlayer/" + Application.unityVersion); + WWW w = new WWW(finalUrl, wwwForm.data, headers); + + yield return w; + + if (!string.IsNullOrEmpty(w.error)) + { + string data = w.text; + if (data != null) + { + methodForError(GetResponseCode(w), data); + } + else + { + methodForError(GetResponseCode(w), w.error); + } + + w.Dispose(); + yield break; + } + else + { + string data = w.text; + if (data != null) + { + methodForResult(w.text); + yield break; + } + else + { + methodForError(GetResponseCode(w), "Empyt response from server : " + url); + } + } + } + + public static int GetResponseCode(WWW request) + { + int ret = 0; + if (request.responseHeaders == null) + { + Debug.LogError("no response headers."); + } + else + { + if (!request.responseHeaders.ContainsKey("STATUS")) + { + Debug.LogError("response headers has no STATUS."); + } + else + { + ret = ParseResponseCode(request.responseHeaders["STATUS"]); + } + } + + return ret; + } + + public static int ParseResponseCode(string statusLine) + { + int ret = 0; + + string[] components = statusLine.Split(' '); + if (components.Length < 3) + { + Debug.LogError("invalid response status: " + statusLine); + } + else + { + if (!int.TryParse(components[1], out ret)) + { + Debug.LogError("invalid response code: " + components[1]); + } + } + + return ret; + } + + public static string DictToQueryString(IDictionary dict) + { + List list = new List(); + foreach (var item in dict) + { + list.Add(item.Key + "=" + item.Value); + } + return string.Join("&", list.ToArray()); + } + + public static void ParseUrl(string url, out string baseUrl, out NameValueCollection nvc) + { + if (url == null) + throw new ArgumentNullException("url"); + nvc = new NameValueCollection(); + baseUrl = ""; + if (url == "") + return; + int questionMarkIndex = url.IndexOf('?'); + if (questionMarkIndex == -1) + { + baseUrl = url; + return; + } + baseUrl = url.Substring(0, questionMarkIndex); + if (questionMarkIndex == url.Length - 1) + return; + string ps = url.Substring(questionMarkIndex + 1); + Regex re = new Regex(@"(^|&)?(\w+)=([^&]+)(&|$)?", RegexOptions.None); + MatchCollection mc = re.Matches(ps); + foreach (Match m in mc) + { + nvc.Add(m.Result("$2").ToLower(), m.Result("$3")); + } + } + + } +} \ No newline at end of file diff --git a/Standalone/Runtime/Internal/Net.cs.meta b/Standalone/Runtime/Internal/Net.cs.meta new file mode 100644 index 0000000..0cd5642 --- /dev/null +++ b/Standalone/Runtime/Internal/Net.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdf561f46b3c346708bd7de2f21c56da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Standalone/Runtime/Internal/QRCodeWindow.cs b/Standalone/Runtime/Internal/QRCodeWindow.cs new file mode 100644 index 0000000..c230337 --- /dev/null +++ b/Standalone/Runtime/Internal/QRCodeWindow.cs @@ -0,0 +1,772 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using TapTap.Common; +using UnityEngine; +using UnityEngine.UI; +using ZXing; +using ZXing.Common; +using ZXing.QrCode.Internal; +using Debug = UnityEngine.Debug; +using Random = System.Random; + +namespace TapTap.Login.Internal +{ + internal class QRCodeWindow : UIElement + { + // // \ue90f\ue91c\ue911\ue91a\ue901\ue902\ue903\ue90c 您已取消此次登录 + // private static readonly string TEXT_CANCEL_LOGIN = ""; + // + // // \ue910\ue91f\ue91b\ue914\ue90d 请重新扫码 + // private static readonly string TEXT_PLEASE_RESCRAN = ""; + // + // // \ue914\ue90d\ue900\ue907 扫码成功 + // private static readonly string TEXT_SCAN_SUCCESS = ""; + // + // // \ue910\ue91e\ue917\ue90a\ue915\ue912\ue913 请在手机上确认 + // private static readonly string TEXT_CONFIRM_ON_PHONE = ""; + + public RawImage QRCodeRawImage; + public Text StatusText; + public Text SubStatusText; + public Image RefreshImage; + public Button RefreshButton; + public Button CloseButton; + + public Button WebLoginButton; + + private string clientId; + private string[] permissions; + + private string deviceCode; + private long expireAt = 0; + private long lastCheckAt = 0; + private long interval = 5; + + private Net net; + private HttpListener _httpListener; + + private long lastWebRequestTime = 0; + private string webRequestMode = ""; + + public override Dictionary Extra + { + get => extra; + set + { + extra = value; + if (extra != null) + { + if (extra.ContainsKey("client_id")) + { + clientId = extra["client_id"] as string; + permissions = extra["permissions"] as string[]; + } + } + } + } + + private void SetObjectText(string parentName, string objectName, string text) + { + try + { + var targetTransform = transform; + if (!string.IsNullOrEmpty(parentName)) + { + targetTransform = transform.Find(parentName).gameObject.transform; + } + + var targetObject = targetTransform.Find(objectName).gameObject; + var gameText = targetObject.GetComponent(); + gameText.text = text; + } + catch (Exception e) + { + Debug.Log("SetObjectText fail" + parentName + " " + objectName); + Debug.Log("SetObjectText fail\n" + e); + } + } + + void Awake() + { + var qrImageObject = transform.Find("QRImage").gameObject; + QRCodeRawImage = qrImageObject.GetComponent(); + var statusObject = transform.Find("Status").gameObject; + StatusText = statusObject.GetComponent(); + var subStatusObject = transform.Find("SubStatus").gameObject; + SubStatusText = subStatusObject.GetComponent(); + var refreshObject = transform.Find("Refresh").gameObject; + RefreshImage = refreshObject.GetComponent(); + var refreshButtonObject = refreshObject.transform.Find("RefreshButton").gameObject; + RefreshButton = refreshButtonObject.GetComponent