@onekeyfe/react-native-jpush 0.0.0-stage → 6.7.0-23
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.
- package/LICENSE +21 -0
- package/README.md +56 -2
- package/ReactNativeJpush.podspec +66 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +144 -0
- package/android/fcm/build.gradle +36 -0
- package/android/fcm/consumer-rules.pro +2 -0
- package/android/fcm/src/main/AndroidManifest.xml +25 -0
- package/android/fcm/src/main/java/com/onekey/jpush/fcm/FcmInitProvider.java +25 -0
- package/android/fcm/src/main/java/com/onekey/jpush/fcm/FcmMessagingService.java +84 -0
- package/android/fcm/src/main/java/com/onekey/jpush/fcm/FcmPushManager.java +69 -0
- package/android/fcm/src/test/java/com/onekey/jpush/fcm/FcmAdapterTest.java +684 -0
- package/android/fcm/src/test/java/com/onekey/jpush/fcm/FcmManifestTest.java +54 -0
- package/android/gradle.properties +4 -0
- package/android/src/main/AndroidManifest.xml +143 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/cn/android/service/JTransitActivity.java +19 -0
- package/android/src/main/java/cn/jiguang/android/BuildConfig.java +10 -0
- package/android/src/main/java/cn/jiguang/android/IDataShare.java +190 -0
- package/android/src/main/java/cn/jiguang/api/BaseLogger.java +82 -0
- package/android/src/main/java/cn/jiguang/api/JAction.java +22 -0
- package/android/src/main/java/cn/jiguang/api/JActionExtra.java +21 -0
- package/android/src/main/java/cn/jiguang/api/JAnalyticsAction.java +11 -0
- package/android/src/main/java/cn/jiguang/api/JCoreInterface.java +228 -0
- package/android/src/main/java/cn/jiguang/api/JCoreManager.java +156 -0
- package/android/src/main/java/cn/jiguang/api/JDispatchAction.java +66 -0
- package/android/src/main/java/cn/jiguang/api/MultiSpHelper.java +114 -0
- package/android/src/main/java/cn/jiguang/api/ReportCallBack.java +9 -0
- package/android/src/main/java/cn/jiguang/api/SdkType.java +13 -0
- package/android/src/main/java/cn/jiguang/api/utils/JCollectionAuth.java +28 -0
- package/android/src/main/java/cn/jiguang/core/JCoreCrypto.java +545 -0
- package/android/src/main/java/cn/jiguang/core/JCoreStorage.java +737 -0
- package/android/src/main/java/cn/jiguang/core/JCoreTcpEngine.java +1395 -0
- package/android/src/main/java/cn/jiguang/core/JCoreWireCodec.java +1716 -0
- package/android/src/main/java/cn/jiguang/internal/ActionManager.java +63 -0
- package/android/src/main/java/cn/jiguang/internal/JConstants.java +61 -0
- package/android/src/main/java/cn/jiguang/internal/JCoreHelperAction.java +12 -0
- package/android/src/main/java/cn/jiguang/internal/JCoreInternalHelper.java +102 -0
- package/android/src/main/java/cn/jiguang/net/DefaultHostVerifier.java +40 -0
- package/android/src/main/java/cn/jiguang/net/HttpRequest.java +78 -0
- package/android/src/main/java/cn/jiguang/net/HttpResponse.java +48 -0
- package/android/src/main/java/cn/jiguang/net/HttpUtils.java +106 -0
- package/android/src/main/java/cn/jiguang/plugins/core/JCoreModule.java +91 -0
- package/android/src/main/java/cn/jiguang/plugins/core/JCorePackage.java +27 -0
- package/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java +773 -0
- package/android/src/main/java/cn/jiguang/plugins/push/JPushPackage.java +25 -0
- package/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java +88 -0
- package/android/src/main/java/cn/jiguang/plugins/push/common/JLogger.java +122 -0
- package/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java +710 -0
- package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushBroadcastReceiver.java +37 -0
- package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java +264 -0
- package/android/src/main/java/cn/jiguang/plugins/service/JCoreModuleService.java +7 -0
- package/android/src/main/java/cn/jpush/android/api/BasicPushNotificationBuilder.java +83 -0
- package/android/src/main/java/cn/jpush/android/api/CallBackParams.java +50 -0
- package/android/src/main/java/cn/jpush/android/api/CmdMessage.java +33 -0
- package/android/src/main/java/cn/jpush/android/api/CustomMessage.java +28 -0
- package/android/src/main/java/cn/jpush/android/api/CustomPushNotificationBuilder.java +81 -0
- package/android/src/main/java/cn/jpush/android/api/DefaultPushNotificationBuilder.java +90 -0
- package/android/src/main/java/cn/jpush/android/api/InAppSlotParams.java +65 -0
- package/android/src/main/java/cn/jpush/android/api/InstrumentedActivity.java +17 -0
- package/android/src/main/java/cn/jpush/android/api/InstrumentedListActivity.java +17 -0
- package/android/src/main/java/cn/jpush/android/api/JPushInterface.java +490 -0
- package/android/src/main/java/cn/jpush/android/api/JPushMessage.java +121 -0
- package/android/src/main/java/cn/jpush/android/api/JThirdPlatFormInterface.java +247 -0
- package/android/src/main/java/cn/jpush/android/api/MultiActionsNotificationBuilder.java +72 -0
- package/android/src/main/java/cn/jpush/android/api/NotificationCustomButton.java +50 -0
- package/android/src/main/java/cn/jpush/android/api/NotificationMessage.java +67 -0
- package/android/src/main/java/cn/jpush/android/api/PushNotificationBuilder.java +13 -0
- package/android/src/main/java/cn/jpush/android/api/TagAliasCallback.java +8 -0
- package/android/src/main/java/cn/jpush/android/data/JPushCollectControl.java +96 -0
- package/android/src/main/java/cn/jpush/android/data/JPushConfig.java +79 -0
- package/android/src/main/java/cn/jpush/android/data/JPushConfigEx.java +41 -0
- package/android/src/main/java/cn/jpush/android/data/JPushLocalNotification.java +155 -0
- package/android/src/main/java/cn/jpush/android/helper/JCoreHelper.java +70 -0
- package/android/src/main/java/cn/jpush/android/helper/Logger.java +82 -0
- package/android/src/main/java/cn/jpush/android/local/ActionHelper.java +1293 -0
- package/android/src/main/java/cn/jpush/android/local/ActivityLifeCallBack.java +47 -0
- package/android/src/main/java/cn/jpush/android/local/JPushAction.java +67 -0
- package/android/src/main/java/cn/jpush/android/local/JPushConstants.java +34 -0
- package/android/src/main/java/cn/jpush/android/local/JPushResponse.java +26 -0
- package/android/src/main/java/cn/jpush/android/local/ProxyActivityAction.java +34 -0
- package/android/src/main/java/cn/jpush/android/service/AlarmReceiver.java +15 -0
- package/android/src/main/java/cn/jpush/android/service/BActivity.java +19 -0
- package/android/src/main/java/cn/jpush/android/service/DActivity.java +19 -0
- package/android/src/main/java/cn/jpush/android/service/DaemonService.java +17 -0
- package/android/src/main/java/cn/jpush/android/service/DataProvider.java +136 -0
- package/android/src/main/java/cn/jpush/android/service/DataShare.java +129 -0
- package/android/src/main/java/cn/jpush/android/service/DownloadProvider.java +139 -0
- package/android/src/main/java/cn/jpush/android/service/InitProvider.java +48 -0
- package/android/src/main/java/cn/jpush/android/service/JCommonService.java +79 -0
- package/android/src/main/java/cn/jpush/android/service/JNotifyActivity.java +28 -0
- package/android/src/main/java/cn/jpush/android/service/JPushMessageReceiver.java +94 -0
- package/android/src/main/java/cn/jpush/android/service/PushReceiver.java +26 -0
- package/android/src/main/java/cn/jpush/android/service/PushService.java +28 -0
- package/android/src/main/java/cn/jpush/android/service/SchedulerReceiver.java +17 -0
- package/android/src/main/java/cn/jpush/android/service/TagAliasReceiver.java +11 -0
- package/android/src/main/java/cn/jpush/android/service/WakedResultReceiver.java +24 -0
- package/android/src/main/java/cn/jpush/android/ui/FullScreenView.java +11 -0
- package/android/src/main/java/cn/jpush/android/ui/PopWinActivity.java +16 -0
- package/android/src/main/java/cn/jpush/android/ui/PushActivity.java +27 -0
- package/android/src/main/java/cn/jpush/android/ui/RoundedImageView.java +63 -0
- package/android/src/main/java/cn/jpush/android/ui/ShadowViewCard.java +56 -0
- package/android/src/main/java/cn/jpush/android/ups/ICallbackResult.java +5 -0
- package/android/src/main/java/cn/jpush/android/ups/JPushUPSManager.java +37 -0
- package/android/src/main/java/cn/jpush/android/ups/TokenResult.java +47 -0
- package/android/src/main/java/cn/jpush/android/ups/UPSRegisterCallBack.java +4 -0
- package/android/src/main/java/cn/jpush/android/ups/UPSTurnCallBack.java +4 -0
- package/android/src/main/java/cn/jpush/android/ups/UPSUnRegisterCallBack.java +4 -0
- package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpush.kt +455 -0
- package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushPackage.kt +50 -0
- package/android/src/main/res/values/jpush_string.xml +7 -0
- package/android/src/main/res/values/jpush_style.xml +22 -0
- package/android/src/test/java/com/margelo/nitro/reactnativejpush/JPushCloudHandshakeTest.java +110 -0
- package/android/src/test/java/com/margelo/nitro/reactnativejpush/JPushHandshakeFailureTest.java +73 -0
- package/android/src/test/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushProtocolTest.java +908 -0
- package/ios/ReactNativeJpush.swift +522 -0
- package/ios/bridge/RCTJCoreModule.h +5 -0
- package/ios/bridge/RCTJCoreModule.m +31 -0
- package/ios/bridge/RCTJPushEventQueue.h +14 -0
- package/ios/bridge/RCTJPushEventQueue.m +23 -0
- package/ios/bridge/RCTJPushModule.h +37 -0
- package/ios/bridge/RCTJPushModule.m +1165 -0
- package/ios/include/JCOREService.h +3 -0
- package/ios/include/JGCOREAPI.h +14 -0
- package/ios/include/JGInforCollectionAuth.h +17 -0
- package/ios/include/JGInforCollectionAuthItems.h +2 -0
- package/ios/include/JGPushNotificationTrigger.h +2 -0
- package/ios/include/JPUSHService.h +359 -0
- package/ios/jcore/JCOREConfiguration.h +141 -0
- package/ios/jcore/JCOREConfiguration.m +703 -0
- package/ios/jcore/JCORECrypto.h +73 -0
- package/ios/jcore/JCORECrypto.m +649 -0
- package/ios/jcore/JCORESisResolver.h +56 -0
- package/ios/jcore/JCORESisResolver.m +525 -0
- package/ios/jcore/JCORETcpSession.h +42 -0
- package/ios/jcore/JCORETcpSession.m +956 -0
- package/ios/jcore/JCOREWireProtocol.h +274 -0
- package/ios/jcore/JCOREWireProtocol.m +1453 -0
- package/ios/jpush/JPUSHModels.m +214 -0
- package/ios/jpush/JPUSHNotificationManager.h +34 -0
- package/ios/jpush/JPUSHNotificationManager.m +360 -0
- package/ios/jpush/JPUSHService.m +794 -0
- package/ios/tests/ReactNativeJpushTests.m +148 -0
- package/lib/module/ReactNativeJpush.nitro.js +4 -0
- package/lib/module/ReactNativeJpush.nitro.js.map +1 -0
- package/lib/module/index.js +801 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/ReactNativeJpush.nitro.d.ts +60 -0
- package/lib/typescript/src/ReactNativeJpush.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +235 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string.hpp +76 -0
- package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.cpp +310 -0
- package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.hpp +115 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_bool.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_std__string_std__string.kt +78 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/HybridReactNativeJpushSpec.kt +274 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/reactnativejpushOnLoad.kt +35 -0
- package/nitrogen/generated/android/reactnativejpush+autolinking.cmake +81 -0
- package/nitrogen/generated/android/reactnativejpush+autolinking.gradle +27 -0
- package/nitrogen/generated/android/reactnativejpushOnLoad.cpp +58 -0
- package/nitrogen/generated/android/reactnativejpushOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/ReactNativeJpush+autolinking.rb +62 -0
- package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.cpp +49 -0
- package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.hpp +147 -0
- package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Umbrella.hpp +46 -0
- package/nitrogen/generated/ios/ReactNativeJpushAutolinking.mm +33 -0
- package/nitrogen/generated/ios/ReactNativeJpushAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.hpp +402 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec.swift +107 -0
- package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec_cxx.swift +723 -0
- package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.cpp +73 -0
- package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.hpp +116 -0
- package/package.json +174 -4
- package/src/ReactNativeJpush.nitro.ts +93 -0
- 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
|