com.taptap.sdk.core 4.8.4 → 4.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,12 +4,12 @@
4
4
  <repositories>
5
5
  <repository>https://repo.maven.apache.org/maven2</repository>
6
6
  </repositories>
7
- <androidPackage spec="com.taptap.sdk:tap-core-unity:4.8.4"/>
7
+ <androidPackage spec="com.taptap.sdk:tap-core-unity:4.9.1"/>
8
8
  </androidPackages>
9
9
  <iosPods>
10
10
  <sources>
11
11
  <source>https://github.com/CocoaPods/Specs.git</source>
12
12
  </sources>
13
- <iosPod addToAllTargets="false" bitcodeEnabled="false" name="TapTapSDK/Core" version="4.8.4"/>
13
+ <iosPod addToAllTargets="false" bitcodeEnabled="false" name="TapTapSDK/Core" version="4.9.1"/>
14
14
  </iosPods>
15
15
  </dependencies>
@@ -15,7 +15,11 @@ namespace TapSDK.Core.Internal.Utils
15
15
  private static TapLoom _current;
16
16
  private int _count;
17
17
 
18
- private bool isPause = false;
18
+ private bool isPause = false;
19
+
20
+ // 记录主线程 ID
21
+ private static int _mainThreadId = -1;
22
+
19
23
  public static TapLoom Current
20
24
  {
21
25
  get
@@ -29,6 +33,7 @@ namespace TapSDK.Core.Internal.Utils
29
33
  {
30
34
  _current = this;
31
35
  initialized = true;
36
+ _mainThreadId = Thread.CurrentThread.ManagedThreadId;
32
37
  }
33
38
 
34
39
  static bool initialized;
@@ -80,6 +85,11 @@ namespace TapSDK.Core.Internal.Utils
80
85
  }
81
86
  }
82
87
 
88
+ /// <summary>
89
+ /// 在线程池中执行任务,非主线程
90
+ /// </summary>
91
+ /// <param name="a"> 任务 </param>
92
+ /// <returns></returns>
83
93
  public static Thread RunAsync(Action a)
84
94
  {
85
95
  Initialize();
@@ -92,6 +102,65 @@ namespace TapSDK.Core.Internal.Utils
92
102
  return null;
93
103
  }
94
104
 
105
+ /// <summary>
106
+ /// 阻塞式在主线程执行任务并返回值,当发生异常或超时时,返回默认值
107
+ /// </summary>
108
+ /// <param name="func"> 任务 </param>
109
+ /// <param name="defaultValue"> 默认值 </param>
110
+ /// <param name="timeout"> 超时时间,默认 100 毫秒</param>
111
+ /// <returns> 任务返回值或默认值 </returns>
112
+ public static object RunOnMainThreadSync(
113
+ Func<object> func,
114
+ object defaultValue,
115
+ int timeout = 100
116
+ )
117
+ {
118
+ // 主线程未就绪,直接返回默认值
119
+ if (_mainThreadId < 0)
120
+ {
121
+ return defaultValue;
122
+ }
123
+ // 已经在主线程,直接执行
124
+ if (Thread.CurrentThread.ManagedThreadId == _mainThreadId)
125
+ {
126
+ return func();
127
+ }
128
+ object result = defaultValue;
129
+ var evt = new ManualResetEvent(false);
130
+ try
131
+ {
132
+ QueueOnMainThread(() =>
133
+ {
134
+ try
135
+ {
136
+ result = func();
137
+ }
138
+ catch (Exception ex)
139
+ {
140
+ TapLogger.Error("RunOnMainThreadSync failed " + ex.Message);
141
+ }
142
+ finally
143
+ {
144
+ try
145
+ {
146
+ evt.Set();
147
+ }
148
+ catch (ObjectDisposedException)
149
+ {
150
+ // evt 已被释放,直接忽略
151
+ }
152
+ }
153
+ });
154
+
155
+ evt.WaitOne(timeout);
156
+ }
157
+ finally
158
+ {
159
+ evt.Dispose(); // WaitOne 返回后再 Dispose
160
+ }
161
+ return result;
162
+ }
163
+
95
164
  private static void RunAction(object action)
96
165
  {
97
166
  try
@@ -12,7 +12,7 @@ using System.ComponentModel;
12
12
 
13
13
  namespace TapSDK.Core {
14
14
  public class TapTapSDK {
15
- public static readonly string Version = "4.8.4";
15
+ public static readonly string Version = "4.9.1";
16
16
 
17
17
  public static string SDKPlatform = "TapSDK-Unity";
18
18
 
@@ -38,11 +38,12 @@ namespace TapSDK.Core {
38
38
  {
39
39
  if (coreOption == null)
40
40
  throw new ArgumentException("[TapSDK] options is null!");
41
+
41
42
  TapTapSDK.taptapSdkOptions = coreOption;
42
43
  TapLog.Enabled = coreOption.enableLog;
43
44
  platformWrapper?.Init(coreOption);
44
- // 初始化各个模块
45
45
 
46
+ // 初始化各个模块
46
47
  Type[] initTaskTypes = GetInitTypeList();
47
48
  if (initTaskTypes != null)
48
49
  {
@@ -59,7 +60,6 @@ namespace TapSDK.Core {
59
60
  }
60
61
  }
61
62
  TapTapEvent.Init(HandleEventOptions(coreOption));
62
-
63
63
  }
64
64
 
65
65
  public static void Init(TapTapSdkOptions coreOption, TapTapSdkBaseOptions[] otherOptions)
@@ -72,6 +72,7 @@ namespace TapSDK.Core {
72
72
  platformWrapper?.Init(coreOption, otherOptions);
73
73
 
74
74
 
75
+
75
76
  Type[] initTaskTypes = GetInitTypeList();
76
77
  if (initTaskTypes != null)
77
78
  {
@@ -84,7 +84,7 @@ namespace TapSDK.Core.Standalone.Internal.Http
84
84
 
85
85
  internal static string GenerateLanguage()
86
86
  {
87
- return Tracker.getServerLanguage();
87
+ return TapLocalizeManager.GetCurrentLanguageString();
88
88
  }
89
89
 
90
90
  internal static string GenerateDeviceId()
@@ -202,7 +202,7 @@ namespace TapSDK.Core.Standalone.Internal.Openlog
202
202
  // 芯片型号,eg:Qualcomm Technologies, Inc SM7250
203
203
  generalParameter[TapOpenlogParamConstants.PARAM_HARDWARE] = SystemInfo.processorType;
204
204
  // SDK设置的地区,例如 zh_CN
205
- generalParameter[TapOpenlogParamConstants.PARAM_SDK_LOCALE] = Tracker.getServerLanguage();
205
+ generalParameter[TapOpenlogParamConstants.PARAM_SDK_LOCALE] = TapLocalizeManager.GetCurrentLanguageString();
206
206
  // taptap的用户ID的外显ID(加密)
207
207
  generalParameter[TapOpenlogParamConstants.PARAM_OPEN_ID] = openid;
208
208
  }
@@ -227,7 +227,7 @@ namespace TapSDK.Core.Standalone.Internal.Openlog
227
227
  // 网络类型,eg:wifi, mobile
228
228
  props[TapOpenlogParamConstants.PARAM_NETWORK_TYPE] = "";
229
229
  // SDK设置的地区,例如 zh_CN
230
- props[TapOpenlogParamConstants.PARAM_SDK_LOCALE] = Tracker.getServerLanguage();
230
+ props[TapOpenlogParamConstants.PARAM_SDK_LOCALE] = TapLocalizeManager.GetCurrentLanguageString();
231
231
  return props;
232
232
  }
233
233
  }
@@ -1,6 +1,8 @@
1
+ using System.Threading;
2
+ using TapSDK.Core.Internal.Utils;
1
3
  using UnityEngine;
2
4
 
3
- namespace TapSDK.Core
5
+ namespace TapSDK.Core.Standalone
4
6
  {
5
7
  public class TapLocalizeManager
6
8
  {
@@ -24,7 +26,6 @@ namespace TapSDK.Core
24
26
  }
25
27
  }
26
28
 
27
- private TapTapLanguageType _language = TapTapLanguageType.Auto;
28
29
  private bool _regionIsCn;
29
30
 
30
31
  public static void SetCurrentRegion(bool isCn)
@@ -32,6 +33,8 @@ namespace TapSDK.Core
32
33
  Instance._regionIsCn = isCn;
33
34
  }
34
35
 
36
+ private TapTapLanguageType _language = TapTapLanguageType.Auto;
37
+
35
38
  public static void SetCurrentLanguage(TapTapLanguageType language)
36
39
  {
37
40
  Instance._language = language;
@@ -39,14 +42,7 @@ namespace TapSDK.Core
39
42
 
40
43
  public static TapTapLanguageType GetCurrentLanguage()
41
44
  {
42
- if (Instance._language != TapTapLanguageType.Auto) return Instance._language;
43
- Instance._language = GetSystemLanguage();
44
- if (Instance._language == TapTapLanguageType.Auto)
45
- {
46
- Instance._language = Instance._regionIsCn ? TapTapLanguageType.zh_Hans : TapTapLanguageType.en;
47
- }
48
-
49
- return Instance._language;
45
+ return Instance._language != TapTapLanguageType.Auto ? Instance._language : GetSystemLanguage();
50
46
  }
51
47
 
52
48
  public static string GetCurrentLanguageString() {
@@ -66,37 +62,38 @@ namespace TapSDK.Core
66
62
  return "th_TH";
67
63
  case TapTapLanguageType.id:
68
64
  return "id_ID";
65
+ case TapTapLanguageType.de:
66
+ return "de";
67
+ case TapTapLanguageType.es:
68
+ return "es_ES";
69
+ case TapTapLanguageType.fr:
70
+ return "fr";
71
+ case TapTapLanguageType.pt:
72
+ return "pt_PT";
73
+ case TapTapLanguageType.ru:
74
+ return "ru";
75
+ case TapTapLanguageType.tr:
76
+ return "tr";
77
+ case TapTapLanguageType.vi:
78
+ return "vi_VN";
69
79
  default:
70
- return null;
80
+ return Instance._regionIsCn ? "zh_CN" : "en_US";
71
81
  }
72
82
  }
73
83
 
74
84
  public static string GetCurrentLanguageString2() {
75
- TapTapLanguageType lang = GetCurrentLanguage();
76
- switch (lang) {
77
- case TapTapLanguageType.zh_Hans:
78
- return "zh-CN";
79
- case TapTapLanguageType.en:
80
- return "en-US";
81
- case TapTapLanguageType.zh_Hant:
82
- return "zh-TW";
83
- case TapTapLanguageType.ja:
84
- return "ja-JP";
85
- case TapTapLanguageType.ko:
86
- return "ko-KR";
87
- case TapTapLanguageType.th:
88
- return "th-TH";
89
- case TapTapLanguageType.id:
90
- return "id-ID";
91
- default:
92
- return null;
93
- }
85
+ return GetCurrentLanguageString().Replace("_", "-");
94
86
  }
95
87
 
96
88
  private static TapTapLanguageType GetSystemLanguage()
97
89
  {
98
90
  var lang = TapTapLanguageType.Auto;
99
- var sysLanguage = Application.systemLanguage;
91
+ // Application.systemLanguage 必须在主线程访问,所以这里需要使用 TapLoom 确保调用线程
92
+ var defaultSystemLanguage = Instance._regionIsCn ? SystemLanguage.ChineseSimplified : SystemLanguage.English;
93
+ var sysLanguage = TapLoom.RunOnMainThreadSync(
94
+ () => Application.systemLanguage,
95
+ defaultSystemLanguage
96
+ );
100
97
  switch (sysLanguage)
101
98
  {
102
99
  case SystemLanguage.ChineseSimplified:
@@ -120,6 +117,9 @@ namespace TapSDK.Core
120
117
  case SystemLanguage.Indonesian:
121
118
  lang = TapTapLanguageType.id;
122
119
  break;
120
+ default:
121
+ lang = Instance._regionIsCn ? TapTapLanguageType.zh_Hans : TapTapLanguageType.en;
122
+ break;
123
123
  }
124
124
 
125
125
  return lang;
@@ -127,7 +127,7 @@ namespace TapSDK.Core.Standalone.Internal {
127
127
 
128
128
  props["is_automatically_log"] = isAutomationlly ? "true" : "false";
129
129
 
130
- var language = getServerLanguage();
130
+ var language = TapLocalizeManager.GetCurrentLanguageString();
131
131
  props["sdk_locale"] = language;
132
132
  props["lang_system"] = DeviceInfo.GetLanguage();
133
133
 
@@ -240,43 +240,6 @@ namespace TapSDK.Core.Standalone.Internal {
240
240
  }
241
241
  }
242
242
 
243
- public static string getServerLanguage() {
244
- // 将 TapCoreStandalone.coreOptions.preferredLanguage 转成 zh_TW/en/zh_CN/en_GB/jp/fil 等格式
245
- switch (TapCoreStandalone.coreOptions.preferredLanguage) {
246
- case TapTapLanguageType.zh_Hans:
247
- return "zh_CN";
248
- case TapTapLanguageType.zh_Hant:
249
- return "zh_TW";
250
- case TapTapLanguageType.en:
251
- return "en_US";
252
- case TapTapLanguageType.ja:
253
- return "ja_JP";
254
- case TapTapLanguageType.ko:
255
- return "ko_KR";
256
- case TapTapLanguageType.th:
257
- return "th_TH";
258
- case TapTapLanguageType.id:
259
- return "id_ID";
260
- case TapTapLanguageType.de:
261
- return "de";
262
- case TapTapLanguageType.es:
263
- return "es_ES";
264
- case TapTapLanguageType.fr:
265
- return "fr";
266
- case TapTapLanguageType.pt:
267
- return "pt_PT";
268
- case TapTapLanguageType.ru:
269
- return "ru";
270
- case TapTapLanguageType.tr:
271
- return "tr";
272
- case TapTapLanguageType.vi:
273
- return "vi_VN";
274
- default:
275
- // 默认cn返回简体中文,Overseas返回英文
276
- return TapCoreStandalone.coreOptions.region == TapTapRegionType.CN ? "zh_CN" : "en_US";
277
- }
278
- }
279
-
280
243
  private string Network {
281
244
  get {
282
245
  switch (Application.internetReachability) {
@@ -70,8 +70,12 @@ namespace TapSDK.Core.Standalone
70
70
  TapVerifyInitStateUtils.ShowVerifyErrorMsg("clientToken 不能为空", "clientToken 不能为空");
71
71
  return;
72
72
  }
73
+
73
74
  TapLog.Log("SDK Init Options : ", "coreOption : " + JsonConvert.SerializeObject(coreOption) + "\notherOptions : " + JsonConvert.SerializeObject(otherOptions));
74
75
  coreOptions = coreOption;
76
+ // 设置区域与语言
77
+ TapLocalizeManager.SetCurrentRegion(coreOption.region == TapTapRegionType.CN);
78
+ TapLocalizeManager.SetCurrentLanguage(coreOption.preferredLanguage);
75
79
  if (Prefs == null)
76
80
  {
77
81
  Prefs = new Prefs();
@@ -123,6 +127,7 @@ namespace TapSDK.Core.Standalone
123
127
  }
124
128
  TapLog.Log("UpdateLanguage called with language: " + language);
125
129
  coreOptions.preferredLanguage = language;
130
+ TapLocalizeManager.SetCurrentLanguage(language);
126
131
  }
127
132
 
128
133
  public static string getGatekeeperConfigUrl(string key)
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "com.taptap.sdk.core",
3
3
  "displayName": "TapTapSDK Core",
4
4
  "description": "TapTapSDK Core",
5
- "version": "4.8.4",
5
+ "version": "4.9.1",
6
6
  "unity": "2019.4",
7
7
  "license": "MIT",
8
8
  "dependencies": {