Skip to content

Commit

Permalink
Release 4.4.5
Browse files Browse the repository at this point in the history
  • Loading branch information
王洋洋 committed Sep 23, 2022
1 parent a918f4c commit 94ca990
Show file tree
Hide file tree
Showing 11 changed files with 60 additions and 55 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.4.4"
s.version = "4.4.5"
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
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,16 @@ - (instancetype)initWithH5Event:(NSDictionary *)event {
}

- (NSString *)event {
if (![self.eventId isKindOfClass:[NSString class]]) {
return nil;
}
if (![self.eventId hasSuffix:kSAEventIdSuffix]) {
return self.eventId;
}
//eventId 结构为 {eventName}_D3AC265B_3CC2_4C45_B8F0_3E05A83A9DAE_SATimer,新增后缀长度为 44
if (self.eventId.length < 45) {
return nil;
}
NSString *eventName = [self.eventId substringToIndex:(self.eventId.length - 1) - 44];
return eventName;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ @implementation SATrackEventObject
- (instancetype)initWithEventId:(NSString *)eventId {
self = [super init];
if (self) {
self.eventId = eventId && ![eventId isKindOfClass:[NSString class]] ? [NSString stringWithFormat:@"%@", eventId] : eventId;
self.eventId = eventId ? [NSString stringWithFormat:@"%@", eventId] : nil;
}
return self;
}
Expand Down
2 changes: 1 addition & 1 deletion SensorsAnalyticsSDK/Core/SensorsAnalyticsSDK.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
#import "SASessionPropertyPlugin.h"
#import "SAEventStore.h"

#define VERSION @"4.4.4"
#define VERSION @"4.4.5"

void *SensorsAnalyticsQueueTag = &SensorsAnalyticsQueueTag;

Expand Down
2 changes: 1 addition & 1 deletion SensorsAnalyticsSDK/Core/Utils/SAURLUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

/// 解码并解析 URL 参数
/// @param url url 对象
+ (NSDictionary<NSString *, NSString *> *)decodeRueryItemsWithURL:(NSURL *)url;
+ (NSDictionary<NSString *, NSString *> *)decodeQueryItemsWithURL:(NSURL *)url;

+ (NSURL *)buildServerURLWithURLString:(NSString *)urlString debugMode:(SensorsAnalyticsDebugMode)debugMode;
@end
6 changes: 3 additions & 3 deletions SensorsAnalyticsSDK/Core/Utils/SAURLUtils.m
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,15 @@ + (NSString *)urlQueryStringWithParams:(NSDictionary <NSString *, NSString *> *)
}
}

+ (NSDictionary<NSString *, NSString *> *)decodeRueryItemsWithURL:(NSURL *)url {
+ (NSDictionary<NSString *, NSString *> *)decodeQueryItemsWithURL:(NSURL *)url {
if (!url) {
return nil;
}
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
return [self decodeRueryItemsWithURLComponents:components];
return [self decodeQueryItemsWithURLComponents:components];
}

+ (NSDictionary<NSString *, NSString *> *)decodeRueryItemsWithURLComponents:(NSURLComponents *)components{
+ (NSDictionary<NSString *, NSString *> *)decodeQueryItemsWithURLComponents:(NSURLComponents *)components{

if (!components) {
return nil;
Expand Down
2 changes: 1 addition & 1 deletion SensorsAnalyticsSDK/Deeplink/SADeviceWhiteList.m
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ - (BOOL)canHandleURL:(NSURL *)url {
}

- (BOOL)handleURL:(NSURL *)url {
NSDictionary *query = [SAURLUtils decodeRueryItemsWithURL:url];
NSDictionary *query = [SAURLUtils decodeQueryItemsWithURL:url];
if (!query) {
return NO;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,50 +35,50 @@
@implementation UIViewController (SAElementPath)

- (NSArray *)sensorsdata_subElements {
__block NSMutableArray *subElements = [NSMutableArray array];
NSArray <UIViewController *> *childViewControllers = self.childViewControllers;
UIViewController *presentedViewController = self.presentedViewController;

if (presentedViewController) {
[subElements addObject:presentedViewController];
return subElements;
return @[presentedViewController];
}

if (childViewControllers.count > 0 && ![self isKindOfClass:UIAlertController.class]) {
// UIAlertController 如果添加 TextField 也会嵌套 childViewController,直接返回 .view 即可
UIWindow *keyWindow = UIApplication.sharedApplication.keyWindow;
subElements = [NSMutableArray arrayWithArray:self.view.subviews];
// 是否包含全屏视图
__block BOOL isContainFullScreen = NO;
//逆序遍历
[childViewControllers enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(__kindof UIViewController *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
if (obj.isViewLoaded) {
UIView *objSuperview = obj.view;
if ([subElements containsObject:objSuperview]) {
NSInteger index = [subElements indexOfObject:objSuperview];
if (objSuperview.sensorsdata_isVisible && !isContainFullScreen) {
[subElements replaceObjectAtIndex:index withObject:obj];
} else {
[subElements removeObject:objSuperview];
}
}
CGRect rect = [obj.view convertRect:obj.view.bounds toView:nil];
// 是否全屏
BOOL isFullScreenShow = CGPointEqualToPoint(rect.origin, CGPointZero) && CGSizeEqualToSize(rect.size, keyWindow.bounds.size);
// 正在全屏显示
if (isFullScreenShow && obj.view.sensorsdata_isVisible) {
isContainFullScreen = YES;
}
}
}];
return subElements;
}
if (self.childViewControllers.count == 0 || [self isKindOfClass:UIAlertController.class]) {
if (!self.isViewLoaded) {
return nil;
}

UIView *currentView = self.view;
if (currentView && self.isViewLoaded && currentView.sensorsdata_isVisible) {
[subElements addObject:currentView];
UIView *currentView = self.view;
if (currentView && currentView.sensorsdata_isVisible) {
return @[currentView];
} else {
return nil;
}
}
return subElements;

CGSize fullScreenSize = UIScreen.mainScreen.bounds.size;
NSMutableArray *subElements = [NSMutableArray array];
//逆序遍历,从而确保从最上层开始查找,直到全屏 view 停止
[self.view.subviews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// 跳过不可见元素
if (![obj sensorsdata_isVisible]) {
return;
}

// 通过 viewController.view 添加的子视图,优先获取 viewController 自身
if ([obj.nextResponder isKindOfClass:UIViewController.class]) {
[subElements addObject:obj.nextResponder];
} else {
[subElements addObject:obj];
}

CGRect rect = [obj convertRect:obj.bounds toView:nil];
// 是否全屏
BOOL isFullScreenShow = CGPointEqualToPoint(rect.origin, CGPointZero) && CGSizeEqualToSize(rect.size, fullScreenSize);
// 正在全屏显示
if (isFullScreenShow) {
*stop = YES;
}
}];
// 逆序翻转,保证和显示优先级一致
return [[subElements reverseObjectEnumerator] allObjects];
}

- (void)sensorsdata_visualize_viewDidAppear:(BOOL)animated {
Expand Down
2 changes: 1 addition & 1 deletion SensorsAnalyticsSDK/Visualized/SAVisualizedManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ - (BOOL)handleURL:(NSURL *)url {
return NO;
}

NSDictionary *queryItems = [SAURLUtils decodeRueryItemsWithURL:url];
NSDictionary *queryItems = [SAURLUtils decodeQueryItemsWithURL:url];
NSString *featureCode = queryItems[@"feature_code"];
NSString *postURLStr = queryItems[@"url"];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,18 +145,17 @@ - (void)sensorsdata_visualize_setSelectedItem:(UITabBarItem *)selectedItem {
[self sensorsdata_visualize_setSelectedItem:selectedItem];

// 当前已经是选中状态,即未切换 tab 修改页面,不需更新
if (!isSwitchTab) {
if (isSwitchTab) {
return;
}
if (!SAVisualizedManager.defaultManager.visualPropertiesTracker) {
return;
}

SAViewNode *tabBarNode = self.sensorsdata_viewNode;
NSString *itemIndex = [NSString stringWithFormat:@"%lu", (unsigned long)[self.items indexOfObject:selectedItem]];
for (SAViewNode *node in tabBarNode.subNodes) {
// 只需更新切换 item 对应 node 页面名称即可
if ([node isKindOfClass:SATabBarButtonNode.class] && [node.elementPosition isEqualToString:itemIndex]) {
if ([node isKindOfClass:SATabBarButtonNode.class] && [node.elementContent isEqualToString:selectedItem.title]) {
// 共用自定义属性查询队列,从而保证更新页面信息后,再进行属性元素遍历
dispatch_async(SAVisualizedManager.defaultManager.visualPropertiesTracker.serialQueue, ^{
[node refreshSubNodeScreenName];
Expand Down
10 changes: 5 additions & 5 deletions SensorsAnalyticsTests/Utils/SAURLUtilsTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -162,27 +162,27 @@ - (void)testURLQueryStringWithMDicParams {
}

- (void)testDecodeQueryItemsWithNilURL {
XCTAssertNil([SAURLUtils decodeRueryItemsWithURL:nil]);
XCTAssertNil([SAURLUtils decodeQueryItemsWithURL:nil]);
}

- (void)testDecodeQueryItemsWithEmptyURL {
XCTAssertNil([SAURLUtils decodeRueryItemsWithURL:[[NSURL alloc] init]]);
XCTAssertNil([SAURLUtils decodeQueryItemsWithURL:[[NSURL alloc] init]]);
}

- (void)testDecodeQueryItemsWithURL {
NSURL *url = [NSURL URLWithString:@"https:www"];
XCTAssertNil([SAURLUtils decodeRueryItemsWithURL:url]);
XCTAssertNil([SAURLUtils decodeQueryItemsWithURL:url]);
}

- (void)testDecodeQueryItemsWithNoItemURL {
NSURL *url = [NSURL URLWithString:@"https://www.sensorsdata.cn/auto"];
XCTAssertNil([SAURLUtils decodeRueryItemsWithURL:url]);
XCTAssertNil([SAURLUtils decodeQueryItemsWithURL:url]);
}

- (void)testDecodeQueryItemsWithItemURL {
NSURL *url = [NSURL URLWithString:@"http://sdk-test.cloud.sensorsdata.cn:8006/sa?project=default&token=95c73ae661f85aa0"];
NSDictionary *items = @{@"project" : @"default", @"token" : @"95c73ae661f85aa0"};
XCTAssertTrue([[SAURLUtils decodeRueryItemsWithURL:url] isEqualToDictionary:items]);
XCTAssertTrue([[SAURLUtils decodeQueryItemsWithURL:url] isEqualToDictionary:items]);
}

- (void)testExample {
Expand Down

0 comments on commit 94ca990

Please sign in to comment.