Skip to content

Commit 9b5c2af

Browse files
author
weiqiangliu
committed
Release 2.1.3
1 parent cd19744 commit 9b5c2af

File tree

12 files changed

+165
-240
lines changed

12 files changed

+165
-240
lines changed

RNSensorsAnalyticsModule.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Pod::Spec.new do |s|
33
s.name = "RNSensorsAnalyticsModule"
4-
s.version = "2.1.2"
4+
s.version = "2.1.3"
55
s.summary = "The official React Native SDK of Sensors Analytics."
66
s.description = <<-DESC
77
神策分析 RN 组件

android/src/main/java/com/sensorsdata/analytics/RNSensorsAnalyticsPackage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.util.List;
2929

3030
public class RNSensorsAnalyticsPackage implements ReactPackage {
31-
public static final String VERSION = "2.1.2";
31+
public static final String VERSION = "2.1.3";
3232
@Override
3333
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
3434
List<NativeModule> modules = new ArrayList<>();

android/src/main/java/com/sensorsdata/analytics/RNSensorsDataModule.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,15 @@
2020

2121
import com.facebook.react.bridge.LifecycleEventListener;
2222
import com.facebook.react.bridge.ReactApplicationContext;
23-
import com.facebook.react.bridge.ReactContext;
2423
import com.facebook.react.bridge.ReactContextBaseJavaModule;
2524
import com.facebook.react.bridge.ReactMethod;
2625
import com.facebook.react.bridge.ReadableMap;
27-
import com.sensorsdata.analytics.android.sdk.SensorsDataAPI;
2826
import com.sensorsdata.analytics.android.sdk.SALog;
2927
import com.sensorsdata.analytics.property.LibMethodInterceptor;
28+
import com.sensorsdata.analytics.property.PluginVersionInterceptor;
29+
import com.sensorsdata.analytics.property.RNPropertyManager;
3030
import com.sensorsdata.analytics.utils.RNUtils;
3131
import com.sensorsdata.analytics.utils.RNViewUtils;
32-
import com.sensorsdata.analytics.property.RNPropertyManager;
33-
import com.sensorsdata.analytics.property.PluginVersionInterceptor;
3432

3533
import org.json.JSONObject;
3634

@@ -47,13 +45,13 @@
4745
* ReadableArray -> Array
4846
*/
4947

50-
public class RNSensorsDataModule extends ReactContextBaseJavaModule{
48+
public class RNSensorsDataModule extends ReactContextBaseJavaModule {
5149

5250
public RNSensorsDataModule(ReactApplicationContext reactContext) {
5351
super(reactContext);
54-
try{
52+
try {
5553
reactContext.addLifecycleEventListener(new SensorsDataLifecycleListener());
56-
}catch(Exception e){
54+
} catch (Exception e) {
5755

5856
}
5957
RNAgent.ignoreView();
@@ -79,23 +77,23 @@ public void trackViewClick(int viewId) {
7977

8078
@ReactMethod
8179
public void trackViewScreen(ReadableMap params) {
82-
try{
80+
try {
8381
if (params != null) {
8482
JSONObject jsonParams = RNUtils.convertToJSONObject(params);
8583
JSONObject properties = null;
86-
if(jsonParams.has("sensorsdataparams")){
84+
if (jsonParams.has("sensorsdataparams")) {
8785
properties = jsonParams.optJSONObject("sensorsdataparams");
8886
}
8987
String url = null;
90-
if(jsonParams.has("sensorsdataurl")){
88+
if (jsonParams.has("sensorsdataurl")) {
9189
url = jsonParams.getString("sensorsdataurl");
9290
}
93-
if(url == null){
91+
if (url == null) {
9492
return;
9593
}
9694
RNAgent.trackViewScreen(url, properties, true);
9795
}
98-
}catch(Exception e){
96+
} catch (Exception e) {
9997
SALog.printStackTrace(e);
10098
}
10199
}
@@ -107,13 +105,11 @@ public void saveViewProperties(int viewId, boolean clickable, ReadableMap viewPr
107105

108106
class SensorsDataLifecycleListener implements LifecycleEventListener {
109107
public void onHostResume() {
110-
RNViewUtils.setScreenVisiable(true);
111-
RNViewUtils.setCurrentActivity(getCurrentActivity());
108+
RNViewUtils.onActivityResumed(getCurrentActivity());
112109
}
113110

114111
public void onHostPause() {
115-
RNViewUtils.setScreenVisiable(false);
116-
RNViewUtils.clearCurrentActivityReference();
112+
RNViewUtils.onActivityPaused();
117113
}
118114

119115
public void onHostDestroy() {

android/src/main/java/com/sensorsdata/analytics/utils/RNViewUtils.java

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,50 +18,40 @@
1818
package com.sensorsdata.analytics.utils;
1919

2020
import android.app.Activity;
21-
import android.app.ActivityManager;
22-
import android.content.Context;
23-
import android.util.Log;
2421
import android.view.View;
25-
26-
import com.facebook.react.uimanager.NativeViewHierarchyManager;
27-
import com.facebook.react.uimanager.UIImplementation;
28-
import com.facebook.react.uimanager.UIManagerModule;
29-
import com.facebook.react.uimanager.UIViewOperationQueue;
30-
import java.lang.ref.SoftReference;
31-
import com.sensorsdata.analytics.android.sdk.SALog;
32-
33-
import java.lang.ref.WeakReference;
34-
import java.lang.reflect.Field;
3522
import android.view.ViewGroup;
36-
import android.view.View;
3723
import android.view.ViewParent;
24+
3825
import org.json.JSONObject;
3926

27+
import java.lang.ref.WeakReference;
28+
import java.util.WeakHashMap;
29+
4030
public class RNViewUtils {
4131

42-
private static SoftReference mSoftCurrentActivityReference;
32+
private static WeakReference mWeakCurrentActivityReference;
4333
private static String currentTitle;
4434
private static String currentScreenName;
4535
public static boolean isScreenVisiable = false;
46-
private static JSONObject properties = new JSONObject();
36+
private static JSONObject screenProperties;
4737
private static WeakReference onTouchViewReference;
48-
38+
private static WeakHashMap<Activity, JSONObject> mScreenMap = new WeakHashMap<>();
4939

5040
public static void setOnTouchView(View nativeTargetView) {
5141
onTouchViewReference = new WeakReference(nativeTargetView);
5242
}
5343

5444
public static View getViewByTag(int viewTag) {
5545
View clickView = null;
56-
try{
46+
try {
5747
Activity currentActivity = getCurrentActivity();
58-
if(currentActivity != null){
48+
if (currentActivity != null) {
5949
clickView = currentActivity.findViewById(viewTag);
6050
}
61-
if(clickView == null){
51+
if (clickView == null) {
6252
clickView = getTouchViewByTag(viewTag);
6353
}
64-
}catch (Exception ignored){
54+
} catch (Exception ignored) {
6555

6656
}
6757
return clickView;
@@ -113,56 +103,80 @@ private static View getClickViewInChild(int viewId, ViewGroup currentView) {
113103
return null;
114104
}
115105

116-
public static void saveScreenAndTitle(String screenName,String title){
106+
public static void saveScreenAndTitle(String screenName, String title) {
117107
currentScreenName = screenName;
118108
currentTitle = title;
119-
try{
120-
properties.put("$title", title);
121-
properties.put("$screen_name", screenName);
122-
}catch (Exception ignored){
109+
try {
110+
screenProperties = new JSONObject();
111+
screenProperties.put("$title", title);
112+
screenProperties.put("$screen_name", screenName);
113+
} catch (Exception ignored) {
123114

124115
}
116+
Activity currentActivity;
117+
if ((currentActivity = getCurrentActivity()) != null) {
118+
mScreenMap.put(currentActivity, screenProperties);
119+
}
125120
}
126121

127-
public static String getTitle(){
122+
public static String getTitle() {
128123
return currentTitle;
129124
}
130125

131-
public static String getScreenName(){
126+
public static String getScreenName() {
132127
return currentScreenName;
133128
}
134129

135130
/**
136131
* 供可视化调用,返回 $title,$screen_name,勿删
132+
*
137133
* @return json 格式
138134
*/
139-
public static String getVisualizeProperties(){
140-
if(!isScreenVisiable){
135+
public static String getVisualizeProperties() {
136+
//当前页面不可见或无 $screen_name $title 时,可视化获取原生页面信息
137+
if (!isScreenVisiable || screenProperties == null) {
141138
return "";
142139
}
143-
return properties.toString();
140+
return screenProperties.toString();
144141
}
145142

146-
public static void setScreenVisiable(boolean isVisiable){
143+
public static void setScreenVisiable(boolean isVisiable) {
147144
isScreenVisiable = isVisiable;
148145
}
149146

150-
public static void setCurrentActivity(Activity currentActivity) {
147+
private static void setCurrentActivity(Activity currentActivity) {
151148
clearCurrentActivityReference();
152-
mSoftCurrentActivityReference = new SoftReference(currentActivity);
149+
mWeakCurrentActivityReference = new WeakReference(currentActivity);
150+
JSONObject properties = mScreenMap.get(currentActivity);
151+
if (properties != null && properties.has("$screen_name")) {
152+
saveScreenAndTitle(properties.optString("$screen_name"), properties.optString("$title"));
153+
} else {
154+
currentScreenName = null;
155+
currentTitle = null;
156+
screenProperties = null;
157+
}
153158
}
154159

155-
private static Activity getCurrentActivity(){
156-
if(mSoftCurrentActivityReference == null){
160+
private static Activity getCurrentActivity() {
161+
if (mWeakCurrentActivityReference == null) {
157162
return null;
158163
}
159-
return (Activity)mSoftCurrentActivityReference.get();
164+
return (Activity) mWeakCurrentActivityReference.get();
160165
}
161166

162167
public static void clearCurrentActivityReference() {
163-
if(mSoftCurrentActivityReference != null){
164-
mSoftCurrentActivityReference.clear();
165-
mSoftCurrentActivityReference = null;
168+
if (mWeakCurrentActivityReference != null) {
169+
mWeakCurrentActivityReference.clear();
170+
mWeakCurrentActivityReference = null;
166171
}
167172
}
173+
174+
public static void onActivityResumed(Activity currentActivity) {
175+
setScreenVisiable(true);
176+
setCurrentActivity(currentActivity);
177+
}
178+
179+
public static void onActivityPaused() {
180+
setScreenVisiable(false);
181+
}
168182
}

ios/RNSensorsAnalyticsModule.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#import "SAReactNativeManager.h"
3333
#import "SAReactNativeEventProperty.h"
3434

35-
NSString *const kSAReactNativePluginVersion = @"react_native:2.1.2";
35+
NSString *const kSAReactNativePluginVersion = @"react_native:2.1.3";
3636

3737
@implementation RNSensorsAnalyticsModule
3838

ios/RNSensorsAnalyticsModule.xcodeproj/project.pbxproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
/* Begin PBXBuildFile section */
1010
A18E9FB421A6AEDD00A66E41 /* RNSensorsAnalyticsModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A18E9FB221A6AEDD00A66E41 /* RNSensorsAnalyticsModule.m */; };
11-
FC045CC2246D191C007117C1 /* SAReactNativeswizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = FC045CC1246D191C007117C1 /* SAReactNativeswizzler.m */; };
1211
FC39004C244715AE00F486A7 /* SAReactNativeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FC39004B244715AE00F486A7 /* SAReactNativeManager.m */; };
1312
FC6EF7A9259DA6A40099EEB5 /* SAReactNativeEventProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = FC6EF7A8259DA6A40099EEB5 /* SAReactNativeEventProperty.m */; };
1413
FC9EE671243731C000C45D16 /* RNSensorsDataModule.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9EE670243731C000C45D16 /* RNSensorsDataModule.m */; };
@@ -31,8 +30,6 @@
3130
A18E9FA621A6AB4300A66E41 /* libRNSensorsAnalyticsModule.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNSensorsAnalyticsModule.a; sourceTree = BUILT_PRODUCTS_DIR; };
3231
A18E9FB221A6AEDD00A66E41 /* RNSensorsAnalyticsModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNSensorsAnalyticsModule.m; sourceTree = "<group>"; };
3332
A18E9FB321A6AEDD00A66E41 /* RNSensorsAnalyticsModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNSensorsAnalyticsModule.h; sourceTree = "<group>"; };
34-
FC045CC0246D191C007117C1 /* SAReactNativeswizzler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SAReactNativeswizzler.h; sourceTree = "<group>"; };
35-
FC045CC1246D191C007117C1 /* SAReactNativeswizzler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SAReactNativeswizzler.m; sourceTree = "<group>"; };
3633
FC39004A244715AE00F486A7 /* SAReactNativeManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SAReactNativeManager.h; sourceTree = "<group>"; };
3734
FC39004B244715AE00F486A7 /* SAReactNativeManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SAReactNativeManager.m; sourceTree = "<group>"; };
3835
FC6EF7A7259DA6A40099EEB5 /* SAReactNativeEventProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SAReactNativeEventProperty.h; sourceTree = "<group>"; };
@@ -67,8 +64,6 @@
6764
FC6EF7A8259DA6A40099EEB5 /* SAReactNativeEventProperty.m */,
6865
FCD3CF2925466B7800758260 /* SAReactNativeCategory.h */,
6966
FCD3CF2A25466B7800758260 /* SAReactNativeCategory.m */,
70-
FC045CC0246D191C007117C1 /* SAReactNativeswizzler.h */,
71-
FC045CC1246D191C007117C1 /* SAReactNativeswizzler.m */,
7267
A18E9FA721A6AB4300A66E41 /* Products */,
7368
);
7469
sourceTree = "<group>";
@@ -138,7 +133,6 @@
138133
buildActionMask = 2147483647;
139134
files = (
140135
A18E9FB421A6AEDD00A66E41 /* RNSensorsAnalyticsModule.m in Sources */,
141-
FC045CC2246D191C007117C1 /* SAReactNativeswizzler.m in Sources */,
142136
FC39004C244715AE00F486A7 /* SAReactNativeManager.m in Sources */,
143137
FC6EF7A9259DA6A40099EEB5 /* SAReactNativeEventProperty.m in Sources */,
144138
FCD3CF2B25466B7800758260 /* SAReactNativeCategory.m in Sources */,

ios/RNSensorsDataModule.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ @implementation RNSensorsDataModule
5757
*
5858
* @param reactTag 当前控件唯一标识符
5959
* @param clickable 当前控件可点击状态
60-
* @param paramters 当前控件自定义参数 (预留字段,暂不支持)
60+
* @param paramters 当前控件自定义参数
6161
*
6262
*/
6363
RCT_EXPORT_METHOD(saveViewProperties:(NSInteger)reactTag clickable:(BOOL)clickable paramters:(NSDictionary *)paramters) {

ios/SAReactNativeCategory.h

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,36 @@
2020

2121
#import <Foundation/Foundation.h>
2222
#import <UIKit/UIKit.h>
23-
#import "SAReactNativeManager.h"
2423

2524
NS_ASSUME_NONNULL_BEGIN
2625

26+
#pragma mark - View Property
27+
@interface SAReactNativeViewProperty : NSObject
28+
29+
/// View 唯一标识符
30+
@property (nonatomic, strong) NSNumber *reactTag;
31+
/// View 可点击状态
32+
@property (nonatomic, assign) BOOL clickable;
33+
/// View 自定义属性
34+
@property (nonatomic, strong) NSDictionary *properties;
35+
36+
@end
37+
2738
@interface UIView (SAReactNative)
2839

40+
/// 用于记录 view 关联的页面信息
41+
@property (nonatomic, copy) NSDictionary *sa_reactnative_screenProperties;
42+
43+
@end
44+
45+
@interface UIViewController (SAReactNative)
46+
47+
/// 触发页面浏览时, 记录页面信息 (和 RCTRootView 关联: rctRootView.reactViewController)
2948
@property (nonatomic, copy) NSDictionary *sa_reactnative_screenProperties;
3049

50+
/// 用于记录 view 自定义属性 (和 RCTRootView 关联: rctRootView.reactViewController)
51+
@property (nonatomic, copy) NSSet<SAReactNativeViewProperty *> *sa_reactnative_viewProperties;
52+
3153
@end
3254

3355
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)