Skip to content

Commit

Permalink
Release 4.2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
jg zhu committed Mar 16, 2022
1 parent e034e22 commit b771abd
Show file tree
Hide file tree
Showing 11 changed files with 79 additions and 228 deletions.
2 changes: 1 addition & 1 deletion SensorsAnalyticsSDK.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "SensorsAnalyticsSDK"
s.version = "4.2.3"
s.version = "4.2.4"
s.summary = "The official iOS SDK of Sensors Analytics."
s.homepage = "http://www.sensorsdata.cn"
s.source = { :git => 'https://github.com/sensorsdata/sa-sdk-ios.git', :tag => "v#{s.version}" }
Expand Down
11 changes: 1 addition & 10 deletions SensorsAnalyticsSDK/AutoTrack/AppClick/UIApplication+AutoTrack.m
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,7 @@ - (BOOL)sa_sendAction:(SEL)action to:(id)to from:(id)from forEvent:(UIEvent *)ev
}

@try {
/*
// caojiangPreVerify:forEvent: & caojiangEventAction:forEvent: 是我们可视化埋点中的点击事件
// 这个地方如果不过滤掉,会导致 swizzle 多次,从而会触发多次 $AppClick 事件
// caojiang 是我们 CTO 名字,我们相信这个前缀应该是唯一的
// 如果这个前缀还会重复,请您告诉我,我把我们架构师的名字也加上
// */
// if (![@"caojiangPreVerify:forEvent:" isEqualToString:NSStringFromSelector(action)] &&
// ![@"caojiangEventAction:forEvent:" isEqualToString:NSStringFromSelector(action)]) {
[self sa_track:action to:to from:from forEvent:event];
// }
[self sa_track:action to:to from:from forEvent:event];
} @catch (NSException *exception) {
SALogError(@"%@ error: %@", self, exception);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,10 @@ - (BOOL)shouldTrackViewController:(UIViewController *)viewController {
if ([self isViewController:viewController inBlackList:appViewScreenBlackList]) {
return NO;
}
if (SAAutoTrackManager.defaultManager.configOptions.enableAutoTrackChildViewScreen ||
if ([SAAutoTrackManager.defaultManager.configOptions.ignoredPageLeaveClasses containsObject:[viewController class]]) {
return NO;
}
if (SAAutoTrackManager.defaultManager.configOptions.enableTrackChildPageLeave ||
!viewController.parentViewController ||
[viewController.parentViewController isKindOfClass:[UITabBarController class]] ||
[viewController.parentViewController isKindOfClass:[UINavigationController class]] ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,15 @@ NS_ASSUME_NONNULL_BEGIN
///开启自动采集页面浏览时长
@property (nonatomic, assign) BOOL enableTrackPageLeave API_UNAVAILABLE(macos);


/// 是否开启子页面的页面浏览时长
@property (nonatomic, assign) BOOL enableTrackChildPageLeave API_UNAVAILABLE(macos);


/// 忽略特定页面的页面浏览时长采集
/// @param viewControllers 需要忽略的页面控制器的类
- (void)ignorePageLeave:(NSArray<Class>*)viewControllers;

/// 是否自动采集子页面的页面浏览事件
///
/// 开启页面浏览事件采集时,有效。默认为不采集
Expand Down
11 changes: 11 additions & 0 deletions SensorsAnalyticsSDK/Core/SAConfigOptions.m
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ @interface SAConfigOptions ()<NSCopying>
@property (nonatomic, assign) NSInteger maxRequestHourInterval;

@property (nonatomic, assign) BOOL enableTrackPageLeave;
@property (nonatomic, assign) BOOL enableTrackChildPageLeave;
@property (nonatomic) BOOL enableAutoTrackChildViewScreen;
@property (nonatomic) SensorsAnalyticsAutoTrackEventType autoTrackEventType;

Expand Down Expand Up @@ -109,6 +110,7 @@ - (instancetype)initWithServerURL:(NSString *)serverURL launchOptions:(id)launch
_enableAutoTrack = YES;

_storePlugins = [NSMutableArray array];
_ignoredPageLeaveClasses = [NSSet set];
}
return self;
}
Expand Down Expand Up @@ -162,6 +164,8 @@ - (id)copyWithZone:(nullable NSZone *)zone {
options.enableTrackPush = self.enableTrackPush;
// 页面浏览时长
options.enableTrackPageLeave = self.enableTrackPageLeave;
options.enableTrackChildPageLeave = self.enableTrackChildPageLeave;
options.ignoredPageLeaveClasses = self.ignoredPageLeaveClasses;

//private switch
options.enableRemoteConfig = self.enableRemoteConfig;
Expand Down Expand Up @@ -204,6 +208,13 @@ - (void)registerStorePlugin:(id<SAStorePlugin>)plugin {
[self.storePlugins addObject:plugin];
}

- (void)ignorePageLeave:(NSArray<Class> *)viewControllers {
if (![viewControllers isKindOfClass:[NSArray class]]) {
return;
}
self.ignoredPageLeaveClasses = [NSSet setWithArray:viewControllers];
}

@end


Expand Down
3 changes: 3 additions & 0 deletions SensorsAnalyticsSDK/Core/SensorsAnalyticsSDK+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@

@property (nonatomic, strong) NSMutableArray *storePlugins;

//忽略页面浏览时长的页面
@property (nonatomic, copy) NSSet<Class> *ignoredPageLeaveClasses;

@end

#endif /* SensorsAnalyticsSDK_priv_h */
130 changes: 0 additions & 130 deletions SensorsAnalyticsSDK/Core/SensorsAnalyticsSDK+Public.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#import "SAConstants.h"
#import "SAPropertyPluginProtocol.h"

@class SensorsAnalyticsPeople;
@class SASecurityPolicy;
@class SAConfigOptions;

Expand All @@ -41,18 +40,9 @@ extern NSString * const SensorsAnalyticsIdentityKeyEmail;
*
* @discussion
* 使用 SensorsAnalyticsSDK 类来跟踪用户行为,并且把数据发给所指定的 SensorsAnalytics 的服务。
* 它也提供了一个 SensorsAnalyticsPeople 类型的 property,用来访问用户 Profile 相关的 API。
*/
@interface SensorsAnalyticsSDK : NSObject

/**
* @property
*
* @abstract
* 对 SensorsAnalyticsPeople 这个 API 的访问接口
*/
@property (atomic, readonly, strong) SensorsAnalyticsPeople *people;

/**
* @property
*
Expand Down Expand Up @@ -633,126 +623,6 @@ extern NSString * const SensorsAnalyticsIdentityKeyEmail;

@end

#pragma mark -
/**
* @class
* SensorsAnalyticsPeople 类
*
* @abstract
* 用于记录用户 Profile 的 API
*
* @discussion
* <b>请不要自己来初始化这个类.</b> 请通过 SensorsAnalyticsSDK 提供的 people 这个 property 来调用
*/
@interface SensorsAnalyticsPeople : NSObject

/**
* @abstract
* 直接设置用户的一个或者几个 Profiles
*
* @discussion
* 这些 Profile 的内容用一个 NSDictionary 来存储
* 其中的 key 是 Profile 的名称,必须是 NSString
* Value 则是 Profile 的内容,只支持 NSString、NSNumber、NSSet、NSArray、NSDate 这些类型
* 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString
* 如果某个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建
*
* @param profileDict 要替换的那些 Profile 的内容
*/
- (void)set:(NSDictionary *)profileDict;

/**
* @abstract
* 首次设置用户的一个或者几个 Profiles
*
* @discussion
* 与set接口不同的是,如果该用户的某个 Profile 之前已经存在了,会被忽略;不存在,则会创建
*
* @param profileDict 要替换的那些 Profile 的内容
*/
- (void)setOnce:(NSDictionary *)profileDict;

/**
* @abstract
* 设置用户的单个 Profile 的内容
*
* @discussion
* 如果这个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建
*
* @param profile Profile 的名称
* @param content Profile 的内容
*/
- (void)set:(NSString *) profile to:(id)content;

/**
* @abstract
* 首次设置用户的单个 Profile 的内容
*
* @discussion
* 与 set 类接口不同的是,如果这个 Profile 之前已经存在了,则这次会被忽略;不存在,则会创建
*
* @param profile Profile 的名称
* @param content Profile 的内容
*/
- (void)setOnce:(NSString *) profile to:(id)content;

/**
* @abstract
* 删除某个 Profile 的全部内容
*
* @discussion
* 如果这个 Profile 之前不存在,则直接忽略
*
* @param profile Profile 的名称
*/
- (void)unset:(NSString *) profile;

/**
* @abstract
* 给一个数值类型的 Profile 增加一个数值
*
* @discussion
* 只能对 NSNumber 类型的 Profile 调用这个接口,否则会被忽略
* 如果这个 Profile 之前不存在,则初始值当做 0 来处理
*
* @param profile 待增加数值的 Profile 的名称
* @param amount 要增加的数值
*/
- (void)increment:(NSString *)profile by:(NSNumber *)amount;

/**
* @abstract
* 给多个数值类型的 Profile 增加数值
*
* @discussion
* profileDict 中,key是 NSString,value 是 NSNumber
* 其它与 - (void)increment:by: 相同
*
* @param profileDict 多个
*/
- (void)increment:(NSDictionary *)profileDict;

/**
* @abstract
* 向一个 NSSet 或者 NSArray 类型的 value 添加一些值
*
* @discussion
* 如前面所述,这个 NSSet 或者 NSArray 的元素必须是 NSString,否则,会忽略
* 同时,如果要 append 的 Profile 之前不存在,会初始化一个空的 NSSet 或者 NSArray
*
* @param profile profile
* @param content description
*/
- (void)append:(NSString *)profile by:(NSObject<NSFastEnumeration> *)content;

/**
* @abstract
* 删除当前这个用户的所有记录
*/
- (void)deleteUser;

@end

#pragma mark - Deprecated
@interface SensorsAnalyticsSDK (Deprecated)

Expand Down
Loading

0 comments on commit b771abd

Please sign in to comment.