react-native-quicktracking-analytics-module 1.0.4 → 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.
- package/android/.gradle/7.4/checksums/checksums.lock +0 -0
- package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +19 -0
- package/android/.idea/jarRepositories.xml +35 -0
- package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml +11 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_70_6_debug_aar.xml +14 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_4.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_4.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_4_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_umeng_umsdk_qt_px_common_1_4_0_PX_aar.xml +11 -0
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml +13 -0
- package/android/.idea/misc.xml +9 -0
- package/android/.idea/modules/android.iml +104 -0
- package/android/.idea/modules.xml +8 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/build.gradle +2 -1
- package/android/local.properties +8 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QTSDKManager.java +93 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/{QuicktrackingAnalyticsModuleModule.java → QuicktrackingAnalyticsModule.java} +35 -12
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/QuicktrackingAnalyticsModulePackage.java +1 -1
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/property/QTViewProperties.java +48 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/QTLog.java +122 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNPropertyManager.java +29 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNTouchTargetHelper.java +139 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNUtils.java +188 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/utils/RNViewUtils.java +148 -0
- package/ios/NSObject+QTReactNativeSwizzler.h +19 -0
- package/ios/NSObject+QTReactNativeSwizzler.m +38 -0
- package/ios/QTRNUtils.h +21 -0
- package/ios/QTRNUtils.m +48 -0
- package/ios/QTReactNativeRootViewManager.h +41 -0
- package/ios/QTReactNativeRootViewManager.m +100 -0
- package/ios/QTReactNativeViewProperty.h +28 -0
- package/ios/QTReactNativeViewProperty.m +27 -0
- package/ios/QuickTrackingSDKManager.h +25 -0
- package/ios/QuickTrackingSDKManager.m +140 -0
- package/ios/QuicktrackingAnalyticsModule.h +11 -1
- package/ios/QuicktrackingAnalyticsModule.m +46 -3
- package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.pbxproj +42 -0
- package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/contents.xcworkspacedata +3 -0
- package/ios/QuicktrackingAnalyticsModule.xcodeproj/project.xcworkspace/xcuserdata/yuzhao.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RCTRootView+QTReactNative.h +23 -0
- package/ios/RCTRootView+QTReactNative.m +56 -0
- package/lib/typescript/index.d.ts +3 -2
- package/package.json +30 -3
- package/react-native-quicktracking-analytics-module.podspec +1 -1
- package/src/hook.js +679 -0
- package/HISTORY.md +0 -17
- package/android/.gradle/7.4.2/checksums/checksums.lock +0 -0
- package/android/.gradle/7.4.2/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.4.2/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.4.2/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.4.2/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.4.2/gc.properties +0 -0
- package/android/src/main/java/com/reactnativequicktrackinganalyticsmodule/MainApplication.java +0 -47
- 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)
|
|
@@ -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(@"
|
|
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(@"
|
|
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
|
};
|
|
Binary file
|
|
@@ -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
|
-
|
|
2
|
-
|
|
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": "
|
|
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.
|
|
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
|