react-native-quicktracking-analytics-module 1.0.3 → 2.0.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.
Files changed (118) hide show
  1. package/android/.gradle/7.4/checksums/checksums.lock +0 -0
  2. package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
  3. package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
  4. package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
  5. package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
  6. package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
  7. package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
  8. package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
  9. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  10. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  11. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  12. package/android/.idea/compiler.xml +6 -0
  13. package/android/.idea/gradle.xml +19 -0
  14. package/android/.idea/jarRepositories.xml +35 -0
  15. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +16 -0
  16. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +11 -0
  17. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +13 -0
  18. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +16 -0
  19. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +13 -0
  20. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +11 -0
  21. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +13 -0
  22. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
  23. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +11 -0
  24. package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +16 -0
  25. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +13 -0
  26. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +13 -0
  27. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +16 -0
  28. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +16 -0
  29. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +13 -0
  30. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +11 -0
  31. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +13 -0
  32. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +13 -0
  33. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +13 -0
  34. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +13 -0
  35. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +13 -0
  36. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +13 -0
  37. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +13 -0
  38. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +16 -0
  39. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +13 -0
  40. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +13 -0
  41. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +13 -0
  42. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +13 -0
  43. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
  44. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
  45. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
  46. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
  47. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
  48. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
  49. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
  50. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
  51. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
  52. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
  53. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
  54. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
  55. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
  56. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
  57. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +13 -0
  58. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_70_6_debug_aar.xml +14 -0
  59. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +13 -0
  60. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +13 -0
  61. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +15 -0
  62. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
  63. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +13 -0
  64. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +13 -0
  65. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +13 -0
  66. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
  67. package/android/.idea/libraries/Gradle__com_umeng_umsdk_qt_px_common_1_4_0_PX_aar.xml +11 -0
  68. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +13 -0
  69. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +13 -0
  70. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
  71. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +13 -0
  72. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +13 -0
  73. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +13 -0
  74. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +13 -0
  75. package/android/.idea/misc.xml +9 -0
  76. package/android/.idea/modules/android.iml +104 -0
  77. package/android/.idea/modules.xml +8 -0
  78. package/android/.idea/vcs.xml +6 -0
  79. package/android/build.gradle +2 -1
  80. package/android/local.properties +8 -0
  81. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QTSDKManager.java +93 -0
  82. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/{QuicktrackingAnalyticsModuleModule.java → QuicktrackingAnalyticsModule.java} +35 -12
  83. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QuicktrackingAnalyticsModulePackage.java +1 -1
  84. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/property/QTViewProperties.java +48 -0
  85. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/QTLog.java +122 -0
  86. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNPropertyManager.java +29 -0
  87. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNTouchTargetHelper.java +139 -0
  88. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNUtils.java +188 -0
  89. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNViewUtils.java +148 -0
  90. package/ios/NSObject+QTReactNativeSwizzler.h +19 -0
  91. package/ios/NSObject+QTReactNativeSwizzler.m +38 -0
  92. package/ios/QTRNUtils.h +21 -0
  93. package/ios/QTRNUtils.m +48 -0
  94. package/ios/QTReactNativeRootViewManager.h +41 -0
  95. package/ios/QTReactNativeRootViewManager.m +100 -0
  96. package/ios/QTReactNativeViewProperty.h +28 -0
  97. package/ios/QTReactNativeViewProperty.m +27 -0
  98. package/ios/QuickTrackingSDKManager.h +25 -0
  99. package/ios/QuickTrackingSDKManager.m +140 -0
  100. package/ios/QuicktrackingAnalyticsModule.h +11 -1
  101. package/ios/QuicktrackingAnalyticsModule.m +47 -4
  102. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.pbxproj +42 -0
  103. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/contents.xcworkspacedata +3 -0
  104. package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/xcuserdata/yuzhao.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  105. package/ios/RCTRootView+QTReactNative.h +23 -0
  106. package/ios/RCTRootView+QTReactNative.m +56 -0
  107. package/lib/typescript/index.d.ts +3 -2
  108. package/package.json +30 -3
  109. package/react-native-quicktracking-analytics-module.podspec +1 -1
  110. package/src/hook.js +679 -0
  111. package/android/.gradle/7.4.2/checksums/checksums.lock +0 -0
  112. package/android/.gradle/7.4.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  113. package/android/.gradle/7.4.2/dependencies-accessors/gc.properties +0 -0
  114. package/android/.gradle/7.4.2/fileChanges/last-build.bin +0 -0
  115. package/android/.gradle/7.4.2/fileHashes/fileHashes.lock +0 -0
  116. package/android/.gradle/7.4.2/gc.properties +0 -0
  117. package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/MainApplication.java +0 -47
  118. package/ios/.DS_Store +0 -0
@@ -0,0 +1,140 @@
1
+ //
2
+ // QuickTrackingSDKManager.m
3
+ // QuicktrackingAnalyticsModule
4
+ //
5
+ // Created by 钰昭 on 2023/1/6.
6
+ // Copyright © 2023 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <QTCommon/MobClick.h>
11
+ #import "QuickTrackingSDKManager.h"
12
+ #import "QTReactNativeRootViewManager.h"
13
+ #import "QTRNUtils.h"
14
+ #import <React/RCTUIManager.h>
15
+
16
+ #pragma mark - Constants
17
+ NSString *const kQTEventElementContentProperty = @"$element_content";
18
+
19
+ @interface QuickTrackingSDKManager()
20
+
21
+ @property (nonatomic, strong) NSSet *reactNativeIgnoreClasses;
22
+
23
+ @end
24
+
25
+ @implementation QuickTrackingSDKManager
26
+
27
+ + (instancetype) sharedInstance {
28
+ static QuickTrackingSDKManager *manager;
29
+ static dispatch_once_t onceToken;
30
+ dispatch_once(&onceToken, ^{
31
+ manager = [[QuickTrackingSDKManager alloc] init];
32
+ });
33
+ return manager;
34
+ }
35
+
36
+ - (instancetype)init {
37
+ self = [super init];
38
+ if (self) {
39
+ _reactNativeIgnoreClasses = [NSSet setWithObjects:@"RCTScrollView", @"RCTBaseTextInputView", nil];
40
+ }
41
+ return self;
42
+ }
43
+
44
+ - (QTReactNativeViewProperty *)viewPropertyWithReactTag:(NSNumber *)reactTag fromViewProperties:(NSSet <QTReactNativeViewProperty *>*)properties {
45
+ if (!properties || ![reactTag isKindOfClass:[NSNumber class]]) {
46
+ return nil;
47
+ }
48
+
49
+ NSSet *tempProperties = [[NSSet alloc] initWithSet:properties copyItems:YES];
50
+ for(QTReactNativeViewProperty *property in tempProperties) {
51
+ if ([property isKindOfClass:[QTReactNativeViewProperty class]] &&
52
+ [property.reactTag isKindOfClass:[NSNumber class]] &&
53
+ property.reactTag.integerValue == reactTag.integerValue) {
54
+ return property;
55
+ }
56
+ }
57
+ return nil;
58
+ }
59
+
60
+
61
+ - (void)prepareView:(NSNumber *)reactTag clickable:(BOOL)clickable paramters:(NSDictionary *)paramters {
62
+ dispatch_async(dispatch_get_main_queue(), ^{
63
+ RCTRootView *rootView = [[QTReactNativeRootViewManager sharedInstance] currentRootView];
64
+ [self prepareView:reactTag clickable:clickable paramters:paramters rootTag:rootView.reactTag];
65
+ });
66
+ }
67
+
68
+ - (void)prepareView:(NSNumber *)reactTag clickable:(BOOL)clickable paramters:(NSDictionary *)paramters rootTag:(NSNumber *)rootTag {
69
+ if (!clickable || !reactTag) {
70
+ return;
71
+ }
72
+ QTReactNativeViewProperty *viewProperty = [[QTReactNativeViewProperty alloc] init];
73
+ viewProperty.reactTag = reactTag;
74
+ viewProperty.clickable = clickable;
75
+ viewProperty.properties = paramters;
76
+ [[QTReactNativeRootViewManager sharedInstance] addViewProperty:viewProperty withRootTag:rootTag];
77
+ }
78
+
79
+ - (BOOL)clickableForView:(UIView*)view {
80
+ if (!view) {
81
+ return NO;
82
+ }
83
+ for (NSString *className in _reactNativeIgnoreClasses) {
84
+ if ([view isKindOfClass:NSClassFromString(className)]) {
85
+ return NO;
86
+ }
87
+ }
88
+
89
+ QTReactNativeRootViewManager *rootViewManager = [QTReactNativeRootViewManager sharedInstance];
90
+ RCTRootView *rootView = [rootViewManager currentRootView];
91
+ NSSet<QTReactNativeViewProperty *> *viewProperties = [rootViewManager viewPropertiesWithRootTag:rootView.reactTag];
92
+
93
+
94
+ // 兼容 Native 可视化全埋点 UISegmentedControl 整体不可圈选的场景
95
+ if ([view isKindOfClass:NSClassFromString(@"UISegmentedControl")]) {
96
+ return NO;
97
+ }
98
+
99
+ // UISegmentedControl 只有子视图 UISegment 是可点击的
100
+ if ([view isKindOfClass:NSClassFromString(@"UISegment")]) {
101
+ return [self viewPropertyWithReactTag:view.superview.reactTag fromViewProperties:viewProperties].clickable;
102
+ }
103
+
104
+ return [self viewPropertyWithReactTag:view.reactTag fromViewProperties:viewProperties].clickable;
105
+ }
106
+
107
+ #pragma mark - AppClick
108
+ - (void)trackViewClick:(NSNumber *)reactTag {
109
+ dispatch_async(dispatch_get_main_queue(), ^{
110
+ QTReactNativeRootViewManager *rootViewManager = [QTReactNativeRootViewManager sharedInstance];
111
+ RCTRootView *rootView = [rootViewManager currentRootView];
112
+ NSSet *viewProperties = [rootViewManager viewPropertiesWithRootTag:rootView.reactTag];
113
+
114
+ QTReactNativeViewProperty *viewProperty = [self viewPropertyWithReactTag:reactTag fromViewProperties:viewProperties];
115
+ id ignoreParam = viewProperty.properties[@"ignore"];
116
+ if ([ignoreParam respondsToSelector:@selector(boolValue)] && [ignoreParam boolValue]) {
117
+ return;
118
+ }
119
+
120
+ UIView *view = [rootView.bridge.uiManager viewForReactTag:reactTag];
121
+ for (NSString *className in self.reactNativeIgnoreClasses) {
122
+ if ([view isKindOfClass:NSClassFromString(className)]) {
123
+ return;
124
+ }
125
+ }
126
+ NSMutableDictionary *properties = [NSMutableDictionary dictionary];
127
+ NSString *content = [view.accessibilityLabel stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
128
+ properties[kQTEventElementContentProperty] = content;
129
+ properties[@"is_auto"] = @1;
130
+ [properties addEntriesFromDictionary:viewProperty.properties];
131
+ NSLog(@"properties ==== %@", properties);
132
+ NSLog(@"rootTag ==== %@", rootView.reactTag);
133
+ NSLog(@"viewTag ==== %@", reactTag);
134
+ NSString* eventId = [NSString stringWithFormat:@"%@_%@", rootView.reactTag, reactTag];
135
+ NSString* md5EventId = [QTRNUtils md5:eventId];
136
+ [QTMobClick event:md5EventId attributes:properties];
137
+ });
138
+ }
139
+
140
+ @end
@@ -1,5 +1,15 @@
1
- #import <React/RCTBridgeModule.h>
2
1
  #import <Foundation/Foundation.h>
2
+
3
+ #if __has_include(<React/RCTBridgeModule.h>)
4
+ #import <React/RCTBridgeModule.h>
5
+ #else
6
+ #import "RCTBridgeModule.h"
7
+ #endif
8
+
9
+ NS_ASSUME_NONNULL_BEGIN
10
+
3
11
  @interface QuicktrackingAnalyticsModule : NSObject <RCTBridgeModule>
4
12
 
5
13
  @end
14
+
15
+ NS_ASSUME_NONNULL_END
@@ -8,6 +8,8 @@
8
8
  //#endif
9
9
 
10
10
  #import "QuicktrackingAnalyticsModule.h"
11
+ #import "QTRNUtils.h"
12
+ #import "QuickTrackingSDKManager.h"
11
13
 
12
14
  #import <React/RCTConvert.h>
13
15
  #import <React/RCTEventDispatcher.h>
@@ -16,7 +18,7 @@
16
18
 
17
19
  @implementation QuicktrackingAnalyticsModule
18
20
 
19
- RCT_EXPORT_MODULE()
21
+ RCT_EXPORT_MODULE(QuicktrackingAnalyticsModule)
20
22
  //======================================页面事件相关===========================================//
21
23
  //页面启动事件,在该页面展示时调用
22
24
  RCT_EXPORT_METHOD(onPageStart:(NSString *)pageName)
@@ -36,7 +38,7 @@ RCT_EXPORT_METHOD(onPageEnd:(NSString *)pageName)
36
38
  }
37
39
 
38
40
  // 上传页面属性
39
- RCT_EXPORT_METHOD(upLoadPageProperties:(NSString *)pageName params:(NSDictionary*)parameters)
41
+ RCT_EXPORT_METHOD(uploadPageProperties:(NSString *)pageName params:(NSDictionary*)parameters)
40
42
  {
41
43
  if (pageName == nil || [pageName isKindOfClass:[NSNull class]]) {
42
44
  return;
@@ -123,6 +125,14 @@ RCT_EXPORT_METHOD(onEventForH5:(NSString*)eventId attributes:(NSDictionary *)att
123
125
  }
124
126
  }
125
127
 
128
+ RCT_EXPORT_METHOD(onEventAutoCLK:(NSInteger)reactTag) {
129
+ @try {
130
+ [[QuickTrackingSDKManager sharedInstance] trackViewClick:@(reactTag)];
131
+ } @catch (NSException *exception) {
132
+ NSLog(@"[QuickTracking ReactNative] error:%@",exception);
133
+ }
134
+ }
135
+
126
136
  //======================================全局属性相关===========================================//
127
137
  RCT_EXPORT_METHOD(registerGlobalProperty:(NSDictionary*)globalproperty)
128
138
  {
@@ -145,7 +155,7 @@ RCT_EXPORT_METHOD(getGlobalProperty:(NSString*)propertyName resolver:(RCTPromise
145
155
  NSString* property = [QTMobClick getGlobalProperty:propertyName];
146
156
  resolve(property);
147
157
  } @catch (NSException *exception) {
148
- NSLog(@"QTAnalytics error:%@", exception);
158
+ NSLog(@"[QuickTracking ReactNative] error:%@",exception);
149
159
  }
150
160
  }
151
161
 
@@ -162,7 +172,7 @@ RCT_EXPORT_METHOD(getGlobalProperties:(RCTPromiseResolveBlock)resolve reject:(RC
162
172
  NSDictionary* dict = [QTMobClick getGlobalProperties];
163
173
  resolve(dict);
164
174
  } @catch (NSException *exception) {
165
- NSLog(@"QTAnalytics error:%@", exception);
175
+ NSLog(@"[QuickTracking ReactNative] error:%@",exception);
166
176
  }
167
177
  }
168
178
 
@@ -194,4 +204,37 @@ RCT_EXPORT_METHOD(profileSignOff)
194
204
  [QTMobClick profileSignOff];
195
205
  }
196
206
 
207
+ /**
208
+ * React Native 保存可点击控件列表信息
209
+ *
210
+ */
211
+ RCT_EXPORT_METHOD(saveViewProperties:(NSInteger)reactTag
212
+ clickable:(BOOL)clickable parameters:(NSDictionary *)paramters) {
213
+ @try {
214
+ [[QuickTrackingSDKManager sharedInstance] prepareView:@(reactTag) clickable:clickable paramters:paramters];
215
+ } @catch (NSException *exception) {
216
+ NSLog(@"[QuickTracking ReactNative] error: %@", exception);
217
+ }
218
+ }
219
+
220
+ /**
221
+ * React Native 保存可点击控件列表信息
222
+ *
223
+ * @param reactTag 当前控件唯一标识符
224
+ * @param clickable 当前控件可点击状态
225
+ * @param paramters 当前控件自定义参数
226
+ * @param rootTag 当前 RN 页面的唯一标识
227
+ *
228
+ */
229
+ RCT_EXPORT_METHOD(saveRootViewProperties:(NSInteger)reactTag
230
+ clickable:(BOOL)clickable
231
+ parameters:(NSDictionary *)paramters
232
+ rootTag:(NSInteger) rootTag) {
233
+ @try {
234
+ [[QuickTrackingSDKManager sharedInstance] prepareView:@(reactTag) clickable:clickable paramters:paramters rootTag:@(rootTag)];
235
+ } @catch (NSException *exception) {
236
+ NSLog(@"[QuickTracking ReactNative] error:%@",exception);
237
+ }
238
+ }
239
+
197
240
  @end
@@ -7,6 +7,13 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
+ 61973F88296C43CB0036A797 /* QTReactNativeRootViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F84296C43CA0036A797 /* QTReactNativeRootViewManager.m */; };
11
+ 61973F89296C43CB0036A797 /* NSObject+QTReactNativeSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F85296C43CA0036A797 /* NSObject+QTReactNativeSwizzler.m */; };
12
+ 61973F8A296C43CB0036A797 /* QTReactNativeViewProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F86296C43CA0036A797 /* QTReactNativeViewProperty.m */; };
13
+ 61973F8E296C43DA0036A797 /* RCTRootView+QTReactNative.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F8B296C43DA0036A797 /* RCTRootView+QTReactNative.m */; };
14
+ 61973F8F296C43DA0036A797 /* QuickTrackingDataModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F8C296C43DA0036A797 /* QuickTrackingDataModule.m */; };
15
+ 61973F90296C43DA0036A797 /* QuickTrackingSDKManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F8D296C43DA0036A797 /* QuickTrackingSDKManager.m */; };
16
+ 61973F98296EBD4F0036A797 /* QTRNUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973F96296EBD4F0036A797 /* QTRNUtils.m */; };
10
17
  61F36BEB29128CC600DA59D7 /* QuicktrackingAnalyticsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* QuicktrackingAnalyticsModule.m */; };
11
18
  /* End PBXBuildFile section */
12
19
 
@@ -24,6 +31,20 @@
24
31
 
25
32
  /* Begin PBXFileReference section */
26
33
  134814201AA4EA6300B7C361 /* libQuicktrackingAnalyticsModule.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libQuicktrackingAnalyticsModule.a; sourceTree = BUILT_PRODUCTS_DIR; };
34
+ 61973F7F296C43940036A797 /* NSObject+QTReactNativeSwizzler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+QTReactNativeSwizzler.h"; sourceTree = "<group>"; };
35
+ 61973F80296C43940036A797 /* QTReactNativeRootViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QTReactNativeRootViewManager.h; sourceTree = "<group>"; };
36
+ 61973F81296C43950036A797 /* QTReactNativeViewProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QTReactNativeViewProperty.h; sourceTree = "<group>"; };
37
+ 61973F82296C43CA0036A797 /* QuickTrackingDataModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTrackingDataModule.h; sourceTree = "<group>"; };
38
+ 61973F83296C43CA0036A797 /* QuickTrackingSDKManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTrackingSDKManager.h; sourceTree = "<group>"; };
39
+ 61973F84296C43CA0036A797 /* QTReactNativeRootViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QTReactNativeRootViewManager.m; sourceTree = "<group>"; };
40
+ 61973F85296C43CA0036A797 /* NSObject+QTReactNativeSwizzler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+QTReactNativeSwizzler.m"; sourceTree = "<group>"; };
41
+ 61973F86296C43CA0036A797 /* QTReactNativeViewProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QTReactNativeViewProperty.m; sourceTree = "<group>"; };
42
+ 61973F87296C43CB0036A797 /* RCTRootView+QTReactNative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTRootView+QTReactNative.h"; sourceTree = "<group>"; };
43
+ 61973F8B296C43DA0036A797 /* RCTRootView+QTReactNative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTRootView+QTReactNative.m"; sourceTree = "<group>"; };
44
+ 61973F8C296C43DA0036A797 /* QuickTrackingDataModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickTrackingDataModule.m; sourceTree = "<group>"; };
45
+ 61973F8D296C43DA0036A797 /* QuickTrackingSDKManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickTrackingSDKManager.m; sourceTree = "<group>"; };
46
+ 61973F96296EBD4F0036A797 /* QTRNUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QTRNUtils.m; sourceTree = "<group>"; };
47
+ 61973F97296EBD4F0036A797 /* QTRNUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QTRNUtils.h; sourceTree = "<group>"; };
27
48
  B3E7B5881CC2AC0600A0062D /* QuicktrackingAnalyticsModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuicktrackingAnalyticsModule.h; sourceTree = "<group>"; };
28
49
  B3E7B5891CC2AC0600A0062D /* QuicktrackingAnalyticsModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuicktrackingAnalyticsModule.m; sourceTree = "<group>"; };
29
50
  /* End PBXFileReference section */
@@ -50,8 +71,22 @@
50
71
  58B511D21A9E6C8500147676 = {
51
72
  isa = PBXGroup;
52
73
  children = (
74
+ 61973F7F296C43940036A797 /* NSObject+QTReactNativeSwizzler.h */,
75
+ 61973F85296C43CA0036A797 /* NSObject+QTReactNativeSwizzler.m */,
76
+ 61973F80296C43940036A797 /* QTReactNativeRootViewManager.h */,
77
+ 61973F84296C43CA0036A797 /* QTReactNativeRootViewManager.m */,
78
+ 61973F81296C43950036A797 /* QTReactNativeViewProperty.h */,
79
+ 61973F86296C43CA0036A797 /* QTReactNativeViewProperty.m */,
80
+ 61973F82296C43CA0036A797 /* QuickTrackingDataModule.h */,
81
+ 61973F8C296C43DA0036A797 /* QuickTrackingDataModule.m */,
82
+ 61973F83296C43CA0036A797 /* QuickTrackingSDKManager.h */,
83
+ 61973F8D296C43DA0036A797 /* QuickTrackingSDKManager.m */,
84
+ 61973F87296C43CB0036A797 /* RCTRootView+QTReactNative.h */,
85
+ 61973F8B296C43DA0036A797 /* RCTRootView+QTReactNative.m */,
53
86
  B3E7B5881CC2AC0600A0062D /* QuicktrackingAnalyticsModule.h */,
54
87
  B3E7B5891CC2AC0600A0062D /* QuicktrackingAnalyticsModule.m */,
88
+ 61973F97296EBD4F0036A797 /* QTRNUtils.h */,
89
+ 61973F96296EBD4F0036A797 /* QTRNUtils.m */,
55
90
  134814211AA4EA7D00B7C361 /* Products */,
56
91
  );
57
92
  sourceTree = "<group>";
@@ -113,7 +148,14 @@
113
148
  isa = PBXSourcesBuildPhase;
114
149
  buildActionMask = 2147483647;
115
150
  files = (
151
+ 61973F98296EBD4F0036A797 /* QTRNUtils.m in Sources */,
152
+ 61973F8F296C43DA0036A797 /* QuickTrackingDataModule.m in Sources */,
153
+ 61973F8E296C43DA0036A797 /* RCTRootView+QTReactNative.m in Sources */,
154
+ 61973F90296C43DA0036A797 /* QuickTrackingSDKManager.m in Sources */,
155
+ 61973F88296C43CB0036A797 /* QTReactNativeRootViewManager.m in Sources */,
156
+ 61973F8A296C43CB0036A797 /* QTReactNativeViewProperty.m in Sources */,
116
157
  61F36BEB29128CC600DA59D7 /* QuicktrackingAnalyticsModule.m in Sources */,
158
+ 61973F89296C43CB0036A797 /* NSObject+QTReactNativeSwizzler.m in Sources */,
117
159
  );
118
160
  runOnlyForDeploymentPostprocessing = 0;
119
161
  };
@@ -1,4 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Workspace
3
3
  version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
4
7
  </Workspace>
@@ -0,0 +1,23 @@
1
+ //
2
+ // RCTRootView+QTReactNative.h
3
+ // QuicktrackingAnalyticsModule
4
+ //
5
+ // Created by 钰昭 on 2023/1/6.
6
+ // Copyright © 2023 Facebook. All rights reserved.
7
+ //
8
+ #import <Foundation/Foundation.h>
9
+ #import <UIKit/UIKit.h>
10
+
11
+ #if __has_include(<React/RCTRootView.h>)
12
+ #import <React/RCTRootView.h>
13
+ #else
14
+ #import "RCTRootView.h"
15
+ #endif
16
+
17
+ NS_ASSUME_NONNULL_BEGIN
18
+
19
+ @interface RCTRootView (QTReactNative)
20
+
21
+ @end
22
+
23
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,56 @@
1
+ //
2
+ // RCTRootView+QTReactNative.m
3
+ // QuicktrackingAnalyticsModule
4
+ //
5
+ // Created by 钰昭 on 2023/1/6.
6
+ // Copyright © 2023 Facebook. All rights reserved.
7
+ //
8
+
9
+ #import <objc/runtime.h>
10
+ #import "RCTRootView+QTReactNative.h"
11
+ #import "NSObject+QTReactNativeSwizzler.h"
12
+ #import "QTReactNativeRootViewManager.h"
13
+
14
+ @implementation RCTRootView (QTReactNative)
15
+
16
+ + (void)load {
17
+ static dispatch_once_t onceToken;
18
+ dispatch_once(&onceToken, ^{
19
+ // React Native 0.66.0 及以后版本的 RCTRootView 指定构造器方法
20
+ SEL originalSEL = NSSelectorFromString(@"initWithFrame:bridge:moduleName:initialProperties:");
21
+ SEL swizzleSEL = @selector(qt_reactnative_initWithFrame:bridge:moduleName:initialProperties:);
22
+
23
+ if (![RCTRootView instancesRespondToSelector:originalSEL]) {
24
+ // React Native 0.66.0 以前版本的 RCTRootView 指定构造器方法
25
+ originalSEL = @selector(initWithBridge:moduleName:initialProperties:);
26
+ swizzleSEL = @selector(qt_reactnative_initWithBridge:moduleName:initialProperties:);
27
+ }
28
+
29
+ [RCTRootView qt_reactnative_swizzle:originalSEL withSelector:swizzleSEL];
30
+ });
31
+ }
32
+
33
+ - (instancetype)qt_reactnative_initWithBridge:(RCTBridge *)bridge
34
+ moduleName:(NSString *)moduleName
35
+ initialProperties:(NSDictionary *)initialProperties {
36
+ RCTRootView *rootView = [self qt_reactnative_initWithBridge:bridge
37
+ moduleName:moduleName
38
+ initialProperties:initialProperties];
39
+ [[QTReactNativeRootViewManager sharedInstance] addRootView:rootView];
40
+ return rootView;
41
+ }
42
+
43
+
44
+ - (instancetype)qt_reactnative_initWithFrame:(CGRect)frame
45
+ bridge:(RCTBridge *)bridge
46
+ moduleName:(NSString *)moduleName
47
+ initialProperties:(nullable NSDictionary *)initialProperties {
48
+ RCTRootView *rootView = [self qt_reactnative_initWithFrame:frame
49
+ bridge:bridge
50
+ moduleName:moduleName
51
+ initialProperties:initialProperties];
52
+ [[QTReactNativeRootViewManager sharedInstance] addRootView:rootView];
53
+ return rootView;
54
+ }
55
+
56
+ @end
@@ -1,5 +1,5 @@
1
- declare type GlobalProperty = Record<string, string | number>;
2
- declare type EventParams = Record<string, string | number>;
1
+ type GlobalProperty = Record<string, string | number>;
2
+ type EventParams = Record<string, string | number>;
3
3
  /**
4
4
  *引入 QuickTracking SDK
5
5
  */
@@ -78,3 +78,4 @@ export declare class QT {
78
78
  static init(appKey: string, channel: string): void;
79
79
  }
80
80
  export {};
81
+ //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-quicktracking-analytics-module",
3
- "version": "1.0.3",
3
+ "version": "2.0.1",
4
4
  "description": "QuickTracking ReactNative SDK",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -27,10 +27,11 @@
27
27
  "test": "echo \"Error: no test specified\" && exit 1",
28
28
  "typescript": "tsc --noEmit",
29
29
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
30
- "prepare": "bob build",
30
+ "prepare": "npx bob build",
31
31
  "release": "release-it",
32
32
  "example": "yarn --cwd example",
33
- "bootstrap": "yarn example && yarn && yarn example pods"
33
+ "bootstrap": "yarn example && yarn && yarn example pods",
34
+ "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build"
34
35
  },
35
36
  "keywords": [
36
37
  "quicktracking",
@@ -109,5 +110,31 @@
109
110
  }
110
111
  ]
111
112
  ]
113
+ },
114
+ "peerDependencies": {
115
+ "react": "*",
116
+ "react-native": "*"
117
+ },
118
+ "devDependencies": {
119
+ "@evilmartians/lefthook": "^1.2.2",
120
+ "@commitlint/config-conventional": "^17.0.2",
121
+ "@react-native-community/eslint-config": "^3.0.2",
122
+ "@release-it/conventional-changelog": "^5.0.0",
123
+ "@types/jest": "^28.1.2",
124
+ "@types/react": "~17.0.21",
125
+ "@types/react-native": "0.70.0",
126
+ "commitlint": "^17.0.2",
127
+ "del-cli": "^5.0.0",
128
+ "eslint": "^8.4.1",
129
+ "eslint-config-prettier": "^8.5.0",
130
+ "eslint-plugin-prettier": "^4.0.0",
131
+ "jest": "^28.1.1",
132
+ "pod-install": "^0.1.0",
133
+ "prettier": "^2.0.5",
134
+ "react": "18.1.0",
135
+ "react-native": "0.70.6",
136
+ "react-native-builder-bob": "^0.20.3",
137
+ "typescript": "^4.9.4",
138
+ "release-it": "^15.0.0"
112
139
  }
113
140
  }
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
17
17
  s.source_files = "ios/**/*.{h,m,mm}"
18
18
 
19
19
  s.dependency "React-Core"
20
- s.dependency "QTCommon", "~> 1.3.9.PX"
20
+ s.dependency "QTCommon", "~> 1.5.2.PX"
21
21
 
22
22
  # Don't install the dependencies when we run `pod install` in the old architecture.
23
23
  if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then