@onekeyfe/react-native-jpush 0.0.0-stage → 6.7.0-alpha.436

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.
Files changed (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -2
  3. package/ReactNativeJpush.podspec +66 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +143 -0
  6. package/android/fcm/build.gradle +29 -0
  7. package/android/fcm/consumer-rules.pro +2 -0
  8. package/android/fcm/src/main/AndroidManifest.xml +16 -0
  9. package/android/fcm/src/main/java/com/onekey/jpush/fcm/FcmMessagingService.java +72 -0
  10. package/android/fcm/src/main/java/com/onekey/jpush/fcm/FcmPushManager.java +69 -0
  11. package/android/gradle.properties +4 -0
  12. package/android/src/main/AndroidManifest.xml +143 -0
  13. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  14. package/android/src/main/java/cn/android/service/JTransitActivity.java +19 -0
  15. package/android/src/main/java/cn/jiguang/android/BuildConfig.java +10 -0
  16. package/android/src/main/java/cn/jiguang/android/IDataShare.java +190 -0
  17. package/android/src/main/java/cn/jiguang/api/BaseLogger.java +82 -0
  18. package/android/src/main/java/cn/jiguang/api/JAction.java +22 -0
  19. package/android/src/main/java/cn/jiguang/api/JActionExtra.java +21 -0
  20. package/android/src/main/java/cn/jiguang/api/JAnalyticsAction.java +11 -0
  21. package/android/src/main/java/cn/jiguang/api/JCoreInterface.java +228 -0
  22. package/android/src/main/java/cn/jiguang/api/JCoreManager.java +156 -0
  23. package/android/src/main/java/cn/jiguang/api/JDispatchAction.java +66 -0
  24. package/android/src/main/java/cn/jiguang/api/MultiSpHelper.java +114 -0
  25. package/android/src/main/java/cn/jiguang/api/ReportCallBack.java +9 -0
  26. package/android/src/main/java/cn/jiguang/api/SdkType.java +13 -0
  27. package/android/src/main/java/cn/jiguang/api/utils/JCollectionAuth.java +23 -0
  28. package/android/src/main/java/cn/jiguang/core/JCoreCrypto.java +545 -0
  29. package/android/src/main/java/cn/jiguang/core/JCoreStorage.java +737 -0
  30. package/android/src/main/java/cn/jiguang/core/JCoreTcpEngine.java +1395 -0
  31. package/android/src/main/java/cn/jiguang/core/JCoreWireCodec.java +1716 -0
  32. package/android/src/main/java/cn/jiguang/internal/ActionManager.java +63 -0
  33. package/android/src/main/java/cn/jiguang/internal/JConstants.java +61 -0
  34. package/android/src/main/java/cn/jiguang/internal/JCoreHelperAction.java +12 -0
  35. package/android/src/main/java/cn/jiguang/internal/JCoreInternalHelper.java +102 -0
  36. package/android/src/main/java/cn/jiguang/net/DefaultHostVerifier.java +40 -0
  37. package/android/src/main/java/cn/jiguang/net/HttpRequest.java +78 -0
  38. package/android/src/main/java/cn/jiguang/net/HttpResponse.java +48 -0
  39. package/android/src/main/java/cn/jiguang/net/HttpUtils.java +106 -0
  40. package/android/src/main/java/cn/jiguang/plugins/core/JCoreModule.java +91 -0
  41. package/android/src/main/java/cn/jiguang/plugins/core/JCorePackage.java +27 -0
  42. package/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java +773 -0
  43. package/android/src/main/java/cn/jiguang/plugins/push/JPushPackage.java +25 -0
  44. package/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java +88 -0
  45. package/android/src/main/java/cn/jiguang/plugins/push/common/JLogger.java +122 -0
  46. package/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java +710 -0
  47. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushBroadcastReceiver.java +37 -0
  48. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java +264 -0
  49. package/android/src/main/java/cn/jiguang/plugins/service/JCoreModuleService.java +7 -0
  50. package/android/src/main/java/cn/jpush/android/api/BasicPushNotificationBuilder.java +83 -0
  51. package/android/src/main/java/cn/jpush/android/api/CallBackParams.java +50 -0
  52. package/android/src/main/java/cn/jpush/android/api/CmdMessage.java +33 -0
  53. package/android/src/main/java/cn/jpush/android/api/CustomMessage.java +28 -0
  54. package/android/src/main/java/cn/jpush/android/api/CustomPushNotificationBuilder.java +81 -0
  55. package/android/src/main/java/cn/jpush/android/api/DefaultPushNotificationBuilder.java +90 -0
  56. package/android/src/main/java/cn/jpush/android/api/InAppSlotParams.java +65 -0
  57. package/android/src/main/java/cn/jpush/android/api/InstrumentedActivity.java +17 -0
  58. package/android/src/main/java/cn/jpush/android/api/InstrumentedListActivity.java +17 -0
  59. package/android/src/main/java/cn/jpush/android/api/JPushInterface.java +490 -0
  60. package/android/src/main/java/cn/jpush/android/api/JPushMessage.java +121 -0
  61. package/android/src/main/java/cn/jpush/android/api/JThirdPlatFormInterface.java +247 -0
  62. package/android/src/main/java/cn/jpush/android/api/MultiActionsNotificationBuilder.java +72 -0
  63. package/android/src/main/java/cn/jpush/android/api/NotificationCustomButton.java +50 -0
  64. package/android/src/main/java/cn/jpush/android/api/NotificationMessage.java +67 -0
  65. package/android/src/main/java/cn/jpush/android/api/PushNotificationBuilder.java +13 -0
  66. package/android/src/main/java/cn/jpush/android/api/TagAliasCallback.java +8 -0
  67. package/android/src/main/java/cn/jpush/android/data/JPushCollectControl.java +96 -0
  68. package/android/src/main/java/cn/jpush/android/data/JPushConfig.java +79 -0
  69. package/android/src/main/java/cn/jpush/android/data/JPushConfigEx.java +41 -0
  70. package/android/src/main/java/cn/jpush/android/data/JPushLocalNotification.java +155 -0
  71. package/android/src/main/java/cn/jpush/android/helper/JCoreHelper.java +70 -0
  72. package/android/src/main/java/cn/jpush/android/helper/Logger.java +82 -0
  73. package/android/src/main/java/cn/jpush/android/local/ActionHelper.java +1277 -0
  74. package/android/src/main/java/cn/jpush/android/local/ActivityLifeCallBack.java +47 -0
  75. package/android/src/main/java/cn/jpush/android/local/JPushAction.java +67 -0
  76. package/android/src/main/java/cn/jpush/android/local/JPushConstants.java +34 -0
  77. package/android/src/main/java/cn/jpush/android/local/JPushResponse.java +26 -0
  78. package/android/src/main/java/cn/jpush/android/local/ProxyActivityAction.java +34 -0
  79. package/android/src/main/java/cn/jpush/android/service/AlarmReceiver.java +15 -0
  80. package/android/src/main/java/cn/jpush/android/service/BActivity.java +19 -0
  81. package/android/src/main/java/cn/jpush/android/service/DActivity.java +19 -0
  82. package/android/src/main/java/cn/jpush/android/service/DaemonService.java +17 -0
  83. package/android/src/main/java/cn/jpush/android/service/DataProvider.java +136 -0
  84. package/android/src/main/java/cn/jpush/android/service/DataShare.java +129 -0
  85. package/android/src/main/java/cn/jpush/android/service/DownloadProvider.java +139 -0
  86. package/android/src/main/java/cn/jpush/android/service/InitProvider.java +48 -0
  87. package/android/src/main/java/cn/jpush/android/service/JCommonService.java +79 -0
  88. package/android/src/main/java/cn/jpush/android/service/JNotifyActivity.java +28 -0
  89. package/android/src/main/java/cn/jpush/android/service/JPushMessageReceiver.java +94 -0
  90. package/android/src/main/java/cn/jpush/android/service/PushReceiver.java +26 -0
  91. package/android/src/main/java/cn/jpush/android/service/PushService.java +28 -0
  92. package/android/src/main/java/cn/jpush/android/service/SchedulerReceiver.java +17 -0
  93. package/android/src/main/java/cn/jpush/android/service/TagAliasReceiver.java +11 -0
  94. package/android/src/main/java/cn/jpush/android/service/WakedResultReceiver.java +24 -0
  95. package/android/src/main/java/cn/jpush/android/ui/FullScreenView.java +11 -0
  96. package/android/src/main/java/cn/jpush/android/ui/PopWinActivity.java +16 -0
  97. package/android/src/main/java/cn/jpush/android/ui/PushActivity.java +27 -0
  98. package/android/src/main/java/cn/jpush/android/ui/RoundedImageView.java +63 -0
  99. package/android/src/main/java/cn/jpush/android/ui/ShadowViewCard.java +56 -0
  100. package/android/src/main/java/cn/jpush/android/ups/ICallbackResult.java +5 -0
  101. package/android/src/main/java/cn/jpush/android/ups/JPushUPSManager.java +37 -0
  102. package/android/src/main/java/cn/jpush/android/ups/TokenResult.java +47 -0
  103. package/android/src/main/java/cn/jpush/android/ups/UPSRegisterCallBack.java +4 -0
  104. package/android/src/main/java/cn/jpush/android/ups/UPSTurnCallBack.java +4 -0
  105. package/android/src/main/java/cn/jpush/android/ups/UPSUnRegisterCallBack.java +4 -0
  106. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpush.kt +455 -0
  107. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushPackage.kt +50 -0
  108. package/android/src/main/res/values/jpush_string.xml +7 -0
  109. package/android/src/main/res/values/jpush_style.xml +22 -0
  110. package/android/src/test/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushProtocolTest.java +1016 -0
  111. package/ios/ReactNativeJpush.swift +522 -0
  112. package/ios/bridge/RCTJCoreModule.h +5 -0
  113. package/ios/bridge/RCTJCoreModule.m +31 -0
  114. package/ios/bridge/RCTJPushEventQueue.h +14 -0
  115. package/ios/bridge/RCTJPushEventQueue.m +23 -0
  116. package/ios/bridge/RCTJPushModule.h +37 -0
  117. package/ios/bridge/RCTJPushModule.m +1165 -0
  118. package/ios/include/JCOREService.h +3 -0
  119. package/ios/include/JGCOREAPI.h +14 -0
  120. package/ios/include/JGInforCollectionAuth.h +17 -0
  121. package/ios/include/JGInforCollectionAuthItems.h +2 -0
  122. package/ios/include/JGPushNotificationTrigger.h +2 -0
  123. package/ios/include/JPUSHService.h +359 -0
  124. package/ios/jcore/JCOREConfiguration.h +141 -0
  125. package/ios/jcore/JCOREConfiguration.m +703 -0
  126. package/ios/jcore/JCORECrypto.h +73 -0
  127. package/ios/jcore/JCORECrypto.m +649 -0
  128. package/ios/jcore/JCORESisResolver.h +56 -0
  129. package/ios/jcore/JCORESisResolver.m +525 -0
  130. package/ios/jcore/JCORETcpSession.h +42 -0
  131. package/ios/jcore/JCORETcpSession.m +956 -0
  132. package/ios/jcore/JCOREWireProtocol.h +274 -0
  133. package/ios/jcore/JCOREWireProtocol.m +1453 -0
  134. package/ios/jpush/JPUSHModels.m +214 -0
  135. package/ios/jpush/JPUSHNotificationManager.h +34 -0
  136. package/ios/jpush/JPUSHNotificationManager.m +360 -0
  137. package/ios/jpush/JPUSHService.m +794 -0
  138. package/ios/tests/ReactNativeJpushTests.m +148 -0
  139. package/lib/module/ReactNativeJpush.nitro.js +4 -0
  140. package/lib/module/ReactNativeJpush.nitro.js.map +1 -0
  141. package/lib/module/index.js +801 -0
  142. package/lib/module/index.js.map +1 -0
  143. package/lib/module/package.json +1 -0
  144. package/lib/typescript/package.json +1 -0
  145. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts +60 -0
  146. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts.map +1 -0
  147. package/lib/typescript/src/index.d.ts +235 -0
  148. package/lib/typescript/src/index.d.ts.map +1 -0
  149. package/nitro.json +23 -0
  150. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  151. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string.hpp +76 -0
  152. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.cpp +310 -0
  153. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.hpp +115 -0
  154. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_bool.kt +78 -0
  155. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_std__string_std__string.kt +78 -0
  156. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/HybridReactNativeJpushSpec.kt +274 -0
  157. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/reactnativejpushOnLoad.kt +35 -0
  158. package/nitrogen/generated/android/reactnativejpush+autolinking.cmake +81 -0
  159. package/nitrogen/generated/android/reactnativejpush+autolinking.gradle +27 -0
  160. package/nitrogen/generated/android/reactnativejpushOnLoad.cpp +58 -0
  161. package/nitrogen/generated/android/reactnativejpushOnLoad.hpp +34 -0
  162. package/nitrogen/generated/ios/ReactNativeJpush+autolinking.rb +62 -0
  163. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.cpp +49 -0
  164. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.hpp +147 -0
  165. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Umbrella.hpp +46 -0
  166. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.mm +33 -0
  167. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.swift +26 -0
  168. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.cpp +11 -0
  169. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.hpp +402 -0
  170. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  171. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +46 -0
  172. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec.swift +107 -0
  173. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec_cxx.swift +723 -0
  174. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.cpp +73 -0
  175. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.hpp +116 -0
  176. package/package.json +174 -4
  177. package/src/ReactNativeJpush.nitro.ts +93 -0
  178. package/src/index.tsx +1090 -0
@@ -0,0 +1,703 @@
1
+ #import "JCOREConfiguration.h"
2
+ #import "JCORECrypto.h"
3
+ #import <objc/message.h>
4
+ #if __has_include(<UIKit/UIKit.h>)
5
+ #import <UIKit/UIKit.h>
6
+ #endif
7
+
8
+ static NSString *const kJCoreKeyUid = @"com.onekey.jcore.uid";
9
+ static NSString *const kJCoreKeyPassword = @"com.onekey.jcore.password";
10
+ static NSString *const kJCoreKeyRegistrationId = @"com.onekey.jcore.registration_id";
11
+ static NSString *const kJCoreKeyDeviceId = @"com.onekey.jcore.device_id";
12
+ static NSString *const kJCoreKeyFakeImei = @"com.onekey.jcore.fake_imei";
13
+ static NSString *const kJCoreKeyDeviceToken = @"com.onekey.jcore.device_token";
14
+ static NSString *const kJCoreKeyVoipToken = @"com.onekey.jcore.voip_token";
15
+ static NSString *const kJCoreKeyAuth = @"com.onekey.jcore.collection_auth";
16
+ static NSString *const kJCoreKeyPushStopped = @"com.onekey.jcore.push_stopped";
17
+ static NSString *const kJCoreKeyTags = @"com.onekey.jcore.tags";
18
+ static NSString *const kJCoreKeyAlias = @"com.onekey.jcore.alias";
19
+ static NSString *const kJCoreKeyProperties = @"com.onekey.jcore.properties";
20
+ static NSString *const kJCoreKeyMobileNumber = @"com.onekey.jcore.mobile_number";
21
+ static NSString *const kJCoreKeyDeviceSeed = @"com.onekey.jcore.device_seed";
22
+
23
+ static NSString *const kJCoreKeySisIps = @"com.onekey.jcore.sis.ips";
24
+ static NSString *const kJCoreKeySisSslIps = @"com.onekey.jcore.sis.ssl_ips";
25
+ static NSString *const kJCoreKeySisServerIps = @"com.onekey.jcore.sis.sis_ips";
26
+ static NSString *const kJCoreKeySisHttpReport = @"com.onekey.jcore.sis.http_report";
27
+ static NSString *const kJCoreKeySisHttpsReport = @"com.onekey.jcore.sis.https_report";
28
+ static NSString *const kJCoreKeySisUser = @"com.onekey.jcore.sis.user";
29
+ static NSString *const kJCoreKeySisSslUser = @"com.onekey.jcore.sis.ssl_user";
30
+ static NSString *const kJCoreKeySisTcpReport = @"com.onekey.jcore.sis.tcp_report";
31
+ static NSString *const kJCoreKeySisCertVer = @"com.onekey.jcore.sis.cert_ver";
32
+ static NSString *const kJCoreKeySisDataReport = @"com.onekey.jcore.sis.data_report";
33
+ static NSString *const kJCoreKeySisLastSuccess = @"com.onekey.jcore.sis.last_success_ips";
34
+ static NSString *const kJCoreKeySisFailedIps = @"com.onekey.jcore.sis.failed_ips";
35
+
36
+ @implementation JGInforCollectionAuthItems
37
+ @end
38
+
39
+ @implementation JGInforCollectionAuth
40
+
41
+ + (void)JCollectionAuth:(void (^)(JGInforCollectionAuthItems *authInfo))authBlock {
42
+ JGInforCollectionAuthItems *items = [[JGInforCollectionAuthItems alloc] init];
43
+ items.isAuth = [JCOREConfiguration shared].collectionAuthorized;
44
+ if (authBlock != nil) {
45
+ authBlock(items);
46
+ }
47
+ [JCOREConfiguration shared].collectionAuthorized = items.isAuth;
48
+ }
49
+
50
+ @end
51
+
52
+ @implementation JGCOREAPI
53
+
54
+ + (void)ci:(BOOL)enable {
55
+ [JCOREConfiguration shared].collectionAuthorized = enable;
56
+ }
57
+
58
+ + (void)printLog:(BOOL)enable {
59
+ [JCOREConfiguration shared].debugEnabled = enable;
60
+ [JCOREConfiguration shared].logOff = !enable;
61
+ }
62
+
63
+ + (void)preferIPv6:(BOOL)preferIPv6 {
64
+ [JCOREConfiguration shared].preferIPv6 = preferIPv6;
65
+ }
66
+
67
+ @end
68
+
69
+ @interface JCOREConfiguration () {
70
+ dispatch_queue_t _stateQueue;
71
+ uint16_t _requestCounter;
72
+ NSArray<NSString *> *_ips;
73
+ NSArray<NSString *> *_sslIps;
74
+ NSArray<NSString *> *_sisIps;
75
+ NSArray<NSString *> *_httpReportAddresses;
76
+ NSArray<NSString *> *_httpsReportAddresses;
77
+ NSArray<NSString *> *_userAddresses;
78
+ NSArray<NSString *> *_sslUserAddresses;
79
+ NSDictionary<NSString *, NSArray<NSString *> *> *_tcpReportAddresses;
80
+ NSInteger _certVer;
81
+ BOOL _dataReport;
82
+ NSMutableArray<NSString *> *_lastSuccessSisIpsMutable;
83
+ NSMutableArray<NSString *> *_failedIpsMutable;
84
+ }
85
+ @end
86
+
87
+ @implementation JCOREConfiguration
88
+
89
+ + (instancetype)shared {
90
+ static JCOREConfiguration *instance = nil;
91
+ static dispatch_once_t onceToken;
92
+ dispatch_once(&onceToken, ^{
93
+ instance = [[JCOREConfiguration alloc] init];
94
+ });
95
+ return instance;
96
+ }
97
+
98
+ - (instancetype)init {
99
+ self = [super init];
100
+ if (self) {
101
+ _stateQueue = dispatch_queue_create("cn.jiguang.jcore.config", DISPATCH_QUEUE_SERIAL);
102
+ _requestCounter = (uint16_t)(arc4random_uniform(30000) + 100);
103
+ _channel = @"App Store";
104
+ _isProduction = YES;
105
+ _buildType = 1;
106
+ _apsType = 1;
107
+ _encryptionAlgorithm = 1;
108
+ _heartbeatInterval = 290.0;
109
+ _reconnectBaseInterval = 3.0;
110
+ _requestTimeoutInterval = 20.0;
111
+ _requestResendInterval = 10.0;
112
+ _connectTimeoutInterval = 5.0;
113
+ _sisHostDomains = @[ @"s.jpush.cn", @"sis.jpush.io", @"easytomessage.com", @"sis-ipv6.jpush.cn" ];
114
+ _sisDefaultIps = @[ @"115.120.193.179", @"113.45.40.226", @"120.46.16.242", @"120.46.84.108" ];
115
+ _httpsSisUrls = @[ @"https://tsis.jpush.cn", @"https://tsis-ipv6.jpush.cn" ];
116
+ _defaultConnectHost = @"im64.jpush.cn";
117
+ _defaultConnectPorts = @[ @7000, @7002, @7003, @7004, @7005, @7006, @7007, @7008, @7009 ];
118
+ _debugEnabled = YES;
119
+ _logOff = NO;
120
+ _localLogEnabled = YES;
121
+ _forceLocalLogWhenLogOff = NO;
122
+
123
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
124
+ NSNumber *savedAuth = [defaults objectForKey:kJCoreKeyAuth];
125
+ _collectionAuthorized = savedAuth != nil ? savedAuth.boolValue : YES;
126
+ _pushStopped = [defaults boolForKey:kJCoreKeyPushStopped];
127
+ _uid = (uint64_t)[defaults integerForKey:kJCoreKeyUid];
128
+ _password = [defaults stringForKey:kJCoreKeyPassword];
129
+ _registrationID = [defaults stringForKey:kJCoreKeyRegistrationId];
130
+ _deviceID = [defaults stringForKey:kJCoreKeyDeviceId];
131
+ _deviceTokenHex = [defaults stringForKey:kJCoreKeyDeviceToken];
132
+ _voipTokenHex = [defaults stringForKey:kJCoreKeyVoipToken];
133
+ _isNewDevice = (_uid == 0 || _registrationID.length == 0);
134
+
135
+ NSInteger encType = [defaults integerForKey:@"kJIGUANGEncryptType"];
136
+ if (encType == 1) {
137
+ _encryptionAlgorithm = 2;
138
+ }
139
+
140
+ _ips = [defaults stringArrayForKey:kJCoreKeySisIps] ?: @[];
141
+ _sslIps = [defaults stringArrayForKey:kJCoreKeySisSslIps] ?: @[];
142
+ _sisIps = [defaults stringArrayForKey:kJCoreKeySisServerIps] ?: @[];
143
+ _httpReportAddresses = [defaults stringArrayForKey:kJCoreKeySisHttpReport] ?: @[];
144
+ _httpsReportAddresses = [defaults stringArrayForKey:kJCoreKeySisHttpsReport] ?: @[];
145
+ _userAddresses = [defaults stringArrayForKey:kJCoreKeySisUser] ?: @[];
146
+ _sslUserAddresses = [defaults stringArrayForKey:kJCoreKeySisSslUser] ?: @[];
147
+ _tcpReportAddresses = [defaults dictionaryForKey:kJCoreKeySisTcpReport] ?: @{};
148
+ NSInteger savedCertVer = [defaults integerForKey:kJCoreKeySisCertVer];
149
+ _certVer = savedCertVer > 0 ? savedCertVer : 1;
150
+ _dataReport = [defaults boolForKey:kJCoreKeySisDataReport];
151
+ _lastSuccessSisIpsMutable = [NSMutableArray arrayWithArray:([defaults stringArrayForKey:kJCoreKeySisLastSuccess] ?: @[])];
152
+ _failedIpsMutable = [NSMutableArray arrayWithArray:([defaults stringArrayForKey:kJCoreKeySisFailedIps] ?: @[])];
153
+ }
154
+ return self;
155
+ }
156
+
157
+ - (void)configureWithAppKey:(NSString *)appKey
158
+ channel:(NSString *)channel
159
+ isProduction:(BOOL)isProduction
160
+ advertisingIdentifier:(NSString *)advertisingId {
161
+ dispatch_sync(_stateQueue, ^{
162
+ self->_appKey = [appKey copy];
163
+ if (channel.length > 0) {
164
+ self->_channel = [channel copy];
165
+ }
166
+ self->_isProduction = isProduction;
167
+ self->_buildType = isProduction ? 1 : 0;
168
+ self->_apsType = isProduction ? 1 : 0;
169
+ self->_advertisingIdentifier = [advertisingId copy];
170
+ });
171
+ }
172
+
173
+ - (void)setCustomConnectHost:(NSString *)host
174
+ port:(uint16_t)port
175
+ useSSL:(BOOL)useSSL {
176
+ dispatch_sync(_stateQueue, ^{
177
+ if (host.length > 0 && port > 0) {
178
+ self->_customConnectHost = [host copy];
179
+ self->_customConnectPort = port;
180
+ self->_customConnectUseSSL = useSSL;
181
+ } else {
182
+ self->_customConnectHost = nil;
183
+ self->_customConnectPort = 0;
184
+ self->_customConnectUseSSL = NO;
185
+ }
186
+ });
187
+ }
188
+
189
+ - (void)clearCustomConnectEndpoint {
190
+ [self setCustomConnectHost:nil port:0 useSSL:NO];
191
+ self.customConnectAddresses = nil;
192
+ }
193
+
194
+ - (void)setCollectionAuthorized:(BOOL)collectionAuthorized {
195
+ _collectionAuthorized = collectionAuthorized;
196
+ [[NSUserDefaults standardUserDefaults] setBool:collectionAuthorized forKey:kJCoreKeyAuth];
197
+ }
198
+
199
+ - (void)setPushStopped:(BOOL)pushStopped {
200
+ _pushStopped = pushStopped;
201
+ [[NSUserDefaults standardUserDefaults] setBool:pushStopped forKey:kJCoreKeyPushStopped];
202
+ }
203
+
204
+ - (void)setDeviceTokenHex:(NSString *)deviceTokenHex {
205
+ _deviceTokenHex = [deviceTokenHex copy];
206
+ if (deviceTokenHex.length > 0) {
207
+ [[NSUserDefaults standardUserDefaults] setObject:deviceTokenHex forKey:kJCoreKeyDeviceToken];
208
+ } else {
209
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeyDeviceToken];
210
+ }
211
+ }
212
+
213
+ - (void)setVoipTokenHex:(NSString *)voipTokenHex {
214
+ _voipTokenHex = [voipTokenHex copy];
215
+ if (voipTokenHex.length > 0) {
216
+ [[NSUserDefaults standardUserDefaults] setObject:voipTokenHex forKey:kJCoreKeyVoipToken];
217
+ } else {
218
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeyVoipToken];
219
+ }
220
+ }
221
+
222
+ - (void)updateRegistrationWithUid:(uint64_t)uid
223
+ password:(NSString *)password
224
+ registrationID:(NSString *)registrationID {
225
+ [self updateRegistrationWithUid:uid password:password registrationID:registrationID deviceID:nil];
226
+ }
227
+
228
+ - (void)updateRegistrationWithUid:(uint64_t)uid
229
+ password:(NSString *)password
230
+ registrationID:(NSString *)registrationID
231
+ deviceID:(NSString *)deviceID {
232
+ dispatch_sync(_stateQueue, ^{
233
+ self->_uid = uid;
234
+ self->_password = password.length > 0 ? [password copy] : nil;
235
+ self->_registrationID = registrationID.length > 0 ? [registrationID copy] : nil;
236
+ if (deviceID.length > 0) {
237
+ self->_deviceID = [deviceID copy];
238
+ }
239
+ self->_isNewDevice = (uid == 0 || registrationID.length == 0);
240
+
241
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
242
+ if (uid > 0) {
243
+ [defaults setInteger:(NSInteger)uid forKey:kJCoreKeyUid];
244
+ } else {
245
+ [defaults removeObjectForKey:kJCoreKeyUid];
246
+ }
247
+ if (password.length > 0) {
248
+ [defaults setObject:password forKey:kJCoreKeyPassword];
249
+ } else {
250
+ [defaults removeObjectForKey:kJCoreKeyPassword];
251
+ }
252
+ if (registrationID.length > 0) {
253
+ [defaults setObject:registrationID forKey:kJCoreKeyRegistrationId];
254
+ } else {
255
+ [defaults removeObjectForKey:kJCoreKeyRegistrationId];
256
+ }
257
+ if (deviceID.length > 0) {
258
+ [defaults setObject:deviceID forKey:kJCoreKeyDeviceId];
259
+ }
260
+ });
261
+ }
262
+
263
+ - (void)resetRegistration {
264
+ dispatch_sync(_stateQueue, ^{
265
+ self->_uid = 0;
266
+ self->_password = nil;
267
+ self->_registrationID = nil;
268
+ self->_deviceID = nil;
269
+ self->_isNewDevice = YES;
270
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
271
+ [defaults removeObjectForKey:kJCoreKeyUid];
272
+ [defaults removeObjectForKey:kJCoreKeyPassword];
273
+ [defaults removeObjectForKey:kJCoreKeyRegistrationId];
274
+ [defaults removeObjectForKey:kJCoreKeyDeviceId];
275
+ [defaults removeObjectForKey:kJCoreKeyFakeImei];
276
+ });
277
+ }
278
+
279
+ - (void)updateWithSisDictionary:(NSDictionary *)sisDict {
280
+ if (![sisDict isKindOfClass:[NSDictionary class]]) {
281
+ return;
282
+ }
283
+ dispatch_sync(_stateQueue, ^{
284
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
285
+ if ([sisDict[@"ips"] isKindOfClass:[NSArray class]]) {
286
+ self->_ips = [sisDict[@"ips"] copy];
287
+ [defaults setObject:self->_ips forKey:kJCoreKeySisIps];
288
+ }
289
+ if ([sisDict[@"ssl_ips"] isKindOfClass:[NSArray class]]) {
290
+ self->_sslIps = [sisDict[@"ssl_ips"] copy];
291
+ [defaults setObject:self->_sslIps forKey:kJCoreKeySisSslIps];
292
+ }
293
+ if ([sisDict[@"sis_ips"] isKindOfClass:[NSArray class]]) {
294
+ self->_sisIps = [sisDict[@"sis_ips"] copy];
295
+ [defaults setObject:self->_sisIps forKey:kJCoreKeySisServerIps];
296
+ }
297
+ if ([sisDict[@"http_report"] isKindOfClass:[NSArray class]]) {
298
+ self->_httpReportAddresses = [sisDict[@"http_report"] copy];
299
+ [defaults setObject:self->_httpReportAddresses forKey:kJCoreKeySisHttpReport];
300
+ }
301
+ if ([sisDict[@"https_report"] isKindOfClass:[NSArray class]]) {
302
+ self->_httpsReportAddresses = [sisDict[@"https_report"] copy];
303
+ [defaults setObject:self->_httpsReportAddresses forKey:kJCoreKeySisHttpsReport];
304
+ }
305
+ if ([sisDict[@"user"] isKindOfClass:[NSArray class]]) {
306
+ self->_userAddresses = [sisDict[@"user"] copy];
307
+ [defaults setObject:self->_userAddresses forKey:kJCoreKeySisUser];
308
+ }
309
+ if ([sisDict[@"ssl_user"] isKindOfClass:[NSArray class]]) {
310
+ self->_sslUserAddresses = [sisDict[@"ssl_user"] copy];
311
+ [defaults setObject:self->_sslUserAddresses forKey:kJCoreKeySisSslUser];
312
+ }
313
+ if ([sisDict[@"tcp_report"] isKindOfClass:[NSDictionary class]]) {
314
+ self->_tcpReportAddresses = [sisDict[@"tcp_report"] copy];
315
+ [defaults setObject:self->_tcpReportAddresses forKey:kJCoreKeySisTcpReport];
316
+ }
317
+ if ([sisDict[@"cert_ver"] respondsToSelector:@selector(integerValue)]) {
318
+ self->_certVer = [sisDict[@"cert_ver"] integerValue];
319
+ [defaults setInteger:self->_certVer forKey:kJCoreKeySisCertVer];
320
+ }
321
+ if (sisDict[@"data_report"] != nil && [sisDict[@"data_report"] respondsToSelector:@selector(boolValue)]) {
322
+ self->_dataReport = [sisDict[@"data_report"] boolValue];
323
+ [defaults setBool:self->_dataReport forKey:kJCoreKeySisDataReport];
324
+ }
325
+ });
326
+ }
327
+
328
+ - (NSArray<NSString *> *)ips {
329
+ __block NSArray<NSString *> *res = nil;
330
+ dispatch_sync(_stateQueue, ^{ res = [self->_ips copy] ?: @[]; });
331
+ return res;
332
+ }
333
+
334
+ - (NSArray<NSString *> *)sslIps {
335
+ __block NSArray<NSString *> *res = nil;
336
+ dispatch_sync(_stateQueue, ^{ res = [self->_sslIps copy] ?: @[]; });
337
+ return res;
338
+ }
339
+
340
+ - (NSArray<NSString *> *)sisIps {
341
+ __block NSArray<NSString *> *res = nil;
342
+ dispatch_sync(_stateQueue, ^{ res = [self->_sisIps copy] ?: @[]; });
343
+ return res;
344
+ }
345
+
346
+ - (NSArray<NSString *> *)httpReportAddresses {
347
+ __block NSArray<NSString *> *res = nil;
348
+ dispatch_sync(_stateQueue, ^{ res = [self->_httpReportAddresses copy] ?: @[]; });
349
+ return res;
350
+ }
351
+
352
+ - (NSArray<NSString *> *)httpsReportAddresses {
353
+ __block NSArray<NSString *> *res = nil;
354
+ dispatch_sync(_stateQueue, ^{ res = [self->_httpsReportAddresses copy] ?: @[]; });
355
+ return res;
356
+ }
357
+
358
+ - (NSArray<NSString *> *)userAddresses {
359
+ __block NSArray<NSString *> *res = nil;
360
+ dispatch_sync(_stateQueue, ^{ res = [self->_userAddresses copy] ?: @[]; });
361
+ return res;
362
+ }
363
+
364
+ - (NSArray<NSString *> *)sslUserAddresses {
365
+ __block NSArray<NSString *> *res = nil;
366
+ dispatch_sync(_stateQueue, ^{ res = [self->_sslUserAddresses copy] ?: @[]; });
367
+ return res;
368
+ }
369
+
370
+ - (NSDictionary<NSString *,NSArray<NSString *> *> *)tcpReportAddresses {
371
+ __block NSDictionary *res = nil;
372
+ dispatch_sync(_stateQueue, ^{ res = [self->_tcpReportAddresses copy] ?: @{}; });
373
+ return res;
374
+ }
375
+
376
+ - (NSInteger)certVer {
377
+ __block NSInteger res = 1;
378
+ dispatch_sync(_stateQueue, ^{ res = self->_certVer; });
379
+ return res;
380
+ }
381
+
382
+ - (BOOL)dataReport {
383
+ __block BOOL res = NO;
384
+ dispatch_sync(_stateQueue, ^{ res = self->_dataReport; });
385
+ return res;
386
+ }
387
+
388
+ - (NSArray<NSString *> *)lastSuccessSisIps {
389
+ __block NSArray<NSString *> *res = nil;
390
+ dispatch_sync(_stateQueue, ^{ res = [self->_lastSuccessSisIpsMutable copy] ?: @[]; });
391
+ return res;
392
+ }
393
+
394
+ - (NSArray<NSString *> *)failedIps {
395
+ __block NSArray<NSString *> *res = nil;
396
+ dispatch_sync(_stateQueue, ^{ res = [self->_failedIpsMutable copy] ?: @[]; });
397
+ return res;
398
+ }
399
+
400
+ - (void)addFailedIp:(NSString *)ipPort {
401
+ if (ipPort.length == 0) {
402
+ return;
403
+ }
404
+ dispatch_sync(_stateQueue, ^{
405
+ if (![self->_failedIpsMutable containsObject:ipPort]) {
406
+ [self->_failedIpsMutable addObject:ipPort];
407
+ [[NSUserDefaults standardUserDefaults] setObject:[self->_failedIpsMutable copy] forKey:kJCoreKeySisFailedIps];
408
+ }
409
+ });
410
+ }
411
+
412
+ - (void)clearFailedIps {
413
+ dispatch_sync(_stateQueue, ^{
414
+ [self->_failedIpsMutable removeAllObjects];
415
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeySisFailedIps];
416
+ });
417
+ }
418
+
419
+ - (void)addLastSuccessSisIp:(NSString *)ipPort {
420
+ if (ipPort.length == 0) {
421
+ return;
422
+ }
423
+ dispatch_sync(_stateQueue, ^{
424
+ if (![self->_lastSuccessSisIpsMutable containsObject:ipPort]) {
425
+ [self->_lastSuccessSisIpsMutable addObject:ipPort];
426
+ [[NSUserDefaults standardUserDefaults] setObject:[self->_lastSuccessSisIpsMutable copy] forKey:kJCoreKeySisLastSuccess];
427
+ }
428
+ });
429
+ }
430
+
431
+ - (void)resetSisCache {
432
+ dispatch_sync(_stateQueue, ^{
433
+ self->_ips = @[];
434
+ self->_sslIps = @[];
435
+ self->_sisIps = @[];
436
+ self->_httpReportAddresses = @[];
437
+ self->_httpsReportAddresses = @[];
438
+ self->_userAddresses = @[];
439
+ self->_sslUserAddresses = @[];
440
+ self->_tcpReportAddresses = @{};
441
+ [self->_lastSuccessSisIpsMutable removeAllObjects];
442
+ [self->_failedIpsMutable removeAllObjects];
443
+
444
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
445
+ [defaults removeObjectForKey:kJCoreKeySisIps];
446
+ [defaults removeObjectForKey:kJCoreKeySisSslIps];
447
+ [defaults removeObjectForKey:kJCoreKeySisServerIps];
448
+ [defaults removeObjectForKey:kJCoreKeySisHttpReport];
449
+ [defaults removeObjectForKey:kJCoreKeySisHttpsReport];
450
+ [defaults removeObjectForKey:kJCoreKeySisUser];
451
+ [defaults removeObjectForKey:kJCoreKeySisSslUser];
452
+ [defaults removeObjectForKey:kJCoreKeySisTcpReport];
453
+ [defaults removeObjectForKey:kJCoreKeySisLastSuccess];
454
+ [defaults removeObjectForKey:kJCoreKeySisFailedIps];
455
+ });
456
+ }
457
+
458
+ - (NSString *)deviceSeedLocked {
459
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
460
+ NSString *seed = [defaults stringForKey:kJCoreKeyDeviceSeed];
461
+ if (seed.length == 0) {
462
+ #if __has_include(<UIKit/UIKit.h>)
463
+ NSString *idfv = [UIDevice currentDevice].identifierForVendor.UUIDString;
464
+ seed = idfv.length > 0 ? idfv : [NSUUID UUID].UUIDString;
465
+ #else
466
+ seed = [NSUUID UUID].UUIDString;
467
+ #endif
468
+ [defaults setObject:seed forKey:kJCoreKeyDeviceSeed];
469
+ }
470
+ return seed;
471
+ }
472
+
473
+ - (NSString *)fakeIMEI {
474
+ __block NSString *imei = nil;
475
+ dispatch_sync(_stateQueue, ^{
476
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
477
+ imei = [defaults stringForKey:kJCoreKeyFakeImei];
478
+ if (imei.length == 0) {
479
+ NSString *seed = [self deviceSeedLocked];
480
+ imei = [JCORECrypto md5Hex:[NSString stringWithFormat:@"imei:%@", seed]];
481
+ [defaults setObject:imei forKey:kJCoreKeyFakeImei];
482
+ }
483
+ });
484
+ return imei ?: @"00000000000000000000000000000000";
485
+ }
486
+
487
+ - (NSString *)resolveDeviceIDWithOutHasExisting:(BOOL *)outHasExisting {
488
+ __block NSString *devId = nil;
489
+ __block BOOL existed = NO;
490
+ dispatch_sync(_stateQueue, ^{
491
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
492
+ NSString *saved = self->_deviceID ?: [defaults stringForKey:kJCoreKeyDeviceId];
493
+ if (saved.length > 0) {
494
+ existed = YES;
495
+ devId = saved;
496
+ } else {
497
+ existed = NO;
498
+ NSString *seed = [self deviceSeedLocked];
499
+ devId = [JCORECrypto md5Hex:[NSString stringWithFormat:@"dev:%@:%@", self->_appKey ?: @"jcore", seed]];
500
+ self->_deviceID = [devId copy];
501
+ [defaults setObject:devId forKey:kJCoreKeyDeviceId];
502
+ }
503
+ });
504
+ if (outHasExisting != NULL) {
505
+ *outHasExisting = existed;
506
+ }
507
+ return devId ?: @"";
508
+ }
509
+
510
+ - (NSString *)bundleIdentifierString {
511
+ NSString *bundleId = [NSBundle mainBundle].bundleIdentifier;
512
+ return bundleId.length > 0 ? bundleId : @"so.onekey.app.wallet";
513
+ }
514
+
515
+ - (NSString *)appVersionString {
516
+ NSDictionary *info = [NSBundle mainBundle].infoDictionary;
517
+ NSString *ver = info[@"CFBundleShortVersionString"] ?: info[@"CFBundleVersion"];
518
+ return ver.length > 0 ? ver : @"1.0.0";
519
+ }
520
+
521
+ - (NSString *)osVersionString {
522
+ #if __has_include(<UIKit/UIKit.h>)
523
+ NSString *ver = [UIDevice currentDevice].systemVersion;
524
+ return ver.length > 0 ? ver : @"17.0";
525
+ #else
526
+ return @"17.0";
527
+ #endif
528
+ }
529
+
530
+ - (NSString *)modelNameString {
531
+ #if __has_include(<UIKit/UIKit.h>)
532
+ NSString *model = [UIDevice currentDevice].model;
533
+ return model.length > 0 ? model : @"iPhone";
534
+ #else
535
+ return @"iPhone";
536
+ #endif
537
+ }
538
+
539
+ - (NSString *)fallbackRegistrationID {
540
+ __block NSString *result = nil;
541
+ dispatch_sync(_stateQueue, ^{
542
+ result = self->_registrationID;
543
+ });
544
+ return result.length > 0 ? result : @"";
545
+ }
546
+
547
+ - (void)ensureLocalRegistrationFallbackIfNeeded {
548
+ // Registration ID, UID, and password must only be populated by server Register (cmd=0) or explicit persistence.
549
+ }
550
+
551
+ - (NSSet<NSString *> *)storedTags {
552
+ NSArray<NSString *> *array = [[NSUserDefaults standardUserDefaults] stringArrayForKey:kJCoreKeyTags];
553
+ return array != nil ? [NSSet setWithArray:array] : [NSSet set];
554
+ }
555
+
556
+ - (void)saveStoredTags:(NSSet<NSString *> *)tags {
557
+ NSArray<NSString *> *allObjects = tags.allObjects ?: @[];
558
+ [[NSUserDefaults standardUserDefaults] setObject:allObjects forKey:kJCoreKeyTags];
559
+ }
560
+
561
+ - (NSString *)storedAlias {
562
+ return [[NSUserDefaults standardUserDefaults] stringForKey:kJCoreKeyAlias];
563
+ }
564
+
565
+ - (void)saveStoredAlias:(NSString *)alias {
566
+ if (alias.length > 0) {
567
+ [[NSUserDefaults standardUserDefaults] setObject:alias forKey:kJCoreKeyAlias];
568
+ } else {
569
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeyAlias];
570
+ }
571
+ }
572
+
573
+ - (NSDictionary<NSString *,id> *)storedProperties {
574
+ NSDictionary *dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:kJCoreKeyProperties];
575
+ return dict ?: @{};
576
+ }
577
+
578
+ - (void)saveStoredProperties:(NSDictionary<NSString *,id> *)properties {
579
+ if (properties.count > 0) {
580
+ [[NSUserDefaults standardUserDefaults] setObject:properties forKey:kJCoreKeyProperties];
581
+ } else {
582
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeyProperties];
583
+ }
584
+ }
585
+
586
+ - (NSString *)storedMobileNumber {
587
+ return [[NSUserDefaults standardUserDefaults] stringForKey:kJCoreKeyMobileNumber];
588
+ }
589
+
590
+ - (void)saveStoredMobileNumber:(NSString *)mobileNumber {
591
+ if (mobileNumber.length > 0) {
592
+ [[NSUserDefaults standardUserDefaults] setObject:mobileNumber forKey:kJCoreKeyMobileNumber];
593
+ } else {
594
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:kJCoreKeyMobileNumber];
595
+ }
596
+ }
597
+
598
+ - (uint16_t)nextRequestId {
599
+ __block uint16_t rid = 1;
600
+ dispatch_sync(_stateQueue, ^{
601
+ self->_requestCounter += 1;
602
+ if (self->_requestCounter == 0 || self->_requestCounter == UINT16_MAX) {
603
+ self->_requestCounter = 1;
604
+ }
605
+ rid = self->_requestCounter;
606
+ });
607
+ return rid;
608
+ }
609
+
610
+ + (NSMutableArray<NSString *> *)recentLogsStorage {
611
+ static NSMutableArray<NSString *> *storage = nil;
612
+ static dispatch_once_t onceToken;
613
+ dispatch_once(&onceToken, ^{
614
+ storage = [NSMutableArray array];
615
+ });
616
+ return storage;
617
+ }
618
+
619
+ + (void)setLocalLogEnabled:(BOOL)enabled {
620
+ JCOREConfiguration *config = [self shared];
621
+ config.localLogEnabled = enabled;
622
+ config.forceLocalLogWhenLogOff = enabled;
623
+ if (!enabled) {
624
+ [self clearRecentLogs];
625
+ }
626
+ }
627
+
628
+ + (void)dispatchLogWithLevel:(NSString *)level selectorName:(NSString *)selectorName message:(NSString *)message {
629
+ if (message == nil) {
630
+ return;
631
+ }
632
+ JCOREConfiguration *config = [self shared];
633
+ NSString *entry = [NSString stringWithFormat:@"[%@] %@", level, message];
634
+ if (config.localLogEnabled && (!config.logOff || config.forceLocalLogWhenLogOff)) {
635
+ NSMutableArray<NSString *> *storage = [self recentLogsStorage];
636
+ @synchronized (storage) {
637
+ if (storage.count >= 200) {
638
+ [storage removeObjectAtIndex:0];
639
+ }
640
+ [storage addObject:entry];
641
+ }
642
+ }
643
+ if (config.logOff) {
644
+ return;
645
+ }
646
+
647
+ Class oneKeyLogClass = NSClassFromString(@"ReactNativeNativeLogger.OneKeyLog") ?: NSClassFromString(@"OneKeyLog");
648
+ SEL selector = NSSelectorFromString(selectorName);
649
+ if (oneKeyLogClass != Nil && [oneKeyLogClass respondsToSelector:selector]) {
650
+ void (*logFunc)(id, SEL, NSString *, NSString *) = (void (*)(id, SEL, NSString *, NSString *))objc_msgSend;
651
+ logFunc(oneKeyLogClass, selector, @"RN-JPush", message);
652
+ return;
653
+ }
654
+ if (config.debugEnabled) {
655
+ NSLog(@"[RN-JPush] %@", entry);
656
+ }
657
+ }
658
+
659
+ + (void)logDebug:(NSString *)message {
660
+ [self dispatchLogWithLevel:@"DEBUG" selectorName:@"debug::" message:message];
661
+ }
662
+
663
+ + (void)logInfo:(NSString *)message {
664
+ [self dispatchLogWithLevel:@"INFO" selectorName:@"info::" message:message];
665
+ }
666
+
667
+ + (void)logWarn:(NSString *)message {
668
+ [self dispatchLogWithLevel:@"WARN" selectorName:@"warn::" message:message];
669
+ }
670
+
671
+ + (void)logError:(NSString *)message {
672
+ [self dispatchLogWithLevel:@"ERROR" selectorName:@"error::" message:message];
673
+ }
674
+
675
+ + (NSArray<NSString *> *)recentLogs {
676
+ NSMutableArray<NSString *> *storage = [self recentLogsStorage];
677
+ @synchronized (storage) {
678
+ return [storage copy];
679
+ }
680
+ }
681
+
682
+ + (void)clearRecentLogs {
683
+ NSMutableArray<NSString *> *storage = [self recentLogsStorage];
684
+ @synchronized (storage) {
685
+ [storage removeAllObjects];
686
+ }
687
+ }
688
+
689
+ - (void)log:(NSString *)format, ... {
690
+ if (self.logOff || !self.debugEnabled || format == nil) {
691
+ return;
692
+ }
693
+ va_list args;
694
+ va_start(args, format);
695
+ NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
696
+ va_end(args);
697
+ [JCOREConfiguration logDebug:message];
698
+ }
699
+
700
+ @end
701
+
702
+ @implementation JCOREPersistence
703
+ @end