Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ABTesting): add more parameters to experiment #326

Merged
merged 9 commits into from
Sep 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
- name: Brew Install Xcresultparser
run: |
brew tap a7ex/homebrew-formulae
brew install xcresultparser
brew install xcresultparser@1.6.5

- name: Parse xcresult to Cobertura xml
run: |
Expand Down

Large diffs are not rendered by default.

118 changes: 59 additions & 59 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
PODS:
- GrowingAnalytics/ABTesting (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Ads (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/APM (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/ABTesting (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Ads (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/APM (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAPM/Core (~> 1.0.1)
- GrowingAnalytics/Autotracker (4.3.0):
- GrowingAnalytics/AutotrackerCore (= 4.3.0)
- GrowingAnalytics/DefaultServices (= 4.3.0)
- GrowingAnalytics/Hybrid (= 4.3.0)
- GrowingAnalytics/MobileDebugger (= 4.3.0)
- GrowingAnalytics/WebCircle (= 4.3.0)
- GrowingAnalytics/AutotrackerCore (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Autotracker (4.3.2):
- GrowingAnalytics/AutotrackerCore (= 4.3.2)
- GrowingAnalytics/DefaultServices (= 4.3.2)
- GrowingAnalytics/Hybrid (= 4.3.2)
- GrowingAnalytics/MobileDebugger (= 4.3.2)
- GrowingAnalytics/WebCircle (= 4.3.2)
- GrowingAnalytics/AutotrackerCore (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingUtils/AutotrackerCore (~> 1.2.3)
- GrowingAnalytics/Compression (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Database (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/DefaultServices (4.3.0):
- GrowingAnalytics/Compression (= 4.3.0)
- GrowingAnalytics/Encryption (= 4.3.0)
- GrowingAnalytics/JSON (= 4.3.0)
- GrowingAnalytics/Network (= 4.3.0)
- GrowingAnalytics/Protobuf (= 4.3.0)
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Encryption (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Hybrid (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/ImpressionTrack (4.3.0):
- GrowingAnalytics/AutotrackerCore (= 4.3.0)
- GrowingAnalytics/JSON (4.3.0):
- GrowingAnalytics/Database (= 4.3.0)
- GrowingAnalytics/MobileDebugger (4.3.0):
- GrowingAnalytics/Screenshot (= 4.3.0)
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/WebSocket (= 4.3.0)
- GrowingAnalytics/Network (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Protobuf (4.3.0):
- GrowingAnalytics/Database (= 4.3.0)
- GrowingAnalytics/Protobuf/Proto (= 4.3.0)
- GrowingAnalytics/Protobuf/Proto (4.3.0):
- GrowingAnalytics/Database (= 4.3.0)
- GrowingAnalytics/Compression (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Database (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/DefaultServices (4.3.2):
- GrowingAnalytics/Compression (= 4.3.2)
- GrowingAnalytics/Encryption (= 4.3.2)
- GrowingAnalytics/JSON (= 4.3.2)
- GrowingAnalytics/Network (= 4.3.2)
- GrowingAnalytics/Protobuf (= 4.3.2)
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Encryption (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Hybrid (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/ImpressionTrack (4.3.2):
- GrowingAnalytics/AutotrackerCore (= 4.3.2)
- GrowingAnalytics/JSON (4.3.2):
- GrowingAnalytics/Database (= 4.3.2)
- GrowingAnalytics/MobileDebugger (4.3.2):
- GrowingAnalytics/Screenshot (= 4.3.2)
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/WebSocket (= 4.3.2)
- GrowingAnalytics/Network (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Protobuf (4.3.2):
- GrowingAnalytics/Database (= 4.3.2)
- GrowingAnalytics/Protobuf/Proto (= 4.3.2)
- GrowingAnalytics/Protobuf/Proto (4.3.2):
- GrowingAnalytics/Database (= 4.3.2)
- Protobuf (~> 3.27)
- GrowingAnalytics/Screenshot (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/Tracker (4.3.0):
- GrowingAnalytics/DefaultServices (= 4.3.0)
- GrowingAnalytics/MobileDebugger (= 4.3.0)
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/TrackerCore (4.3.0):
- GrowingAnalytics/Screenshot (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/Tracker (4.3.2):
- GrowingAnalytics/DefaultServices (= 4.3.2)
- GrowingAnalytics/MobileDebugger (= 4.3.2)
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAnalytics/TrackerCore (4.3.2):
- GrowingUtils/TrackerCore (~> 1.2.3)
- GrowingAnalytics/WebCircle (4.3.0):
- GrowingAnalytics/AutotrackerCore (= 4.3.0)
- GrowingAnalytics/Hybrid (= 4.3.0)
- GrowingAnalytics/Screenshot (= 4.3.0)
- GrowingAnalytics/WebSocket (= 4.3.0)
- GrowingAnalytics/WebSocket (4.3.0):
- GrowingAnalytics/TrackerCore (= 4.3.0)
- GrowingAnalytics/WebCircle (4.3.2):
- GrowingAnalytics/AutotrackerCore (= 4.3.2)
- GrowingAnalytics/Hybrid (= 4.3.2)
- GrowingAnalytics/Screenshot (= 4.3.2)
- GrowingAnalytics/WebSocket (= 4.3.2)
- GrowingAnalytics/WebSocket (4.3.2):
- GrowingAnalytics/TrackerCore (= 4.3.2)
- GrowingAPM (1.0.1):
- GrowingAPM/Core (= 1.0.1)
- GrowingAPM/CrashMonitor (= 1.0.1)
Expand Down Expand Up @@ -160,7 +160,7 @@ EXTERNAL SOURCES:
:path: "../"

SPEC CHECKSUMS:
GrowingAnalytics: db127985c0799074bbd131991296195fc65efdd0
GrowingAnalytics: 4c012ec2089eaf54206cdce3dc282b70648ee56d
GrowingAPM: 3c4de0384935b654e6798b95606f47883a99418b
GrowingToolsKit: 53160d19690da0b78e04a9242abde7af86442922
GrowingUtils: 68aee2c96849bf9b674740503da30c2da468e79d
Expand Down
3 changes: 3 additions & 0 deletions Modules/ABTesting/GrowingABTExperiment+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) long long fetchTime;

- (instancetype)initWithLayerId:(NSString *)layerId
layerName:(NSString *_Nullable)layerName
experimentId:(NSString *_Nullable)experimentId
experimentName:(NSString *_Nullable)experimentName
strategyId:(NSString *_Nullable)strategyId
strategyName:(NSString *_Nullable)strategyName
variables:(NSDictionary *_Nullable)variables
fetchTime:(long long)fetchTime;
- (void)saveToDisk;
Expand Down
18 changes: 18 additions & 0 deletions Modules/ABTesting/GrowingABTExperiment.m
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@
@interface GrowingABTExperiment ()

@property (nonatomic, copy, readwrite) NSString *layerId;
@property (nonatomic, copy, nullable, readwrite) NSString *layerName;
@property (nonatomic, copy, nullable, readwrite) NSString *experimentId;
@property (nonatomic, copy, nullable, readwrite) NSString *experimentName;
@property (nonatomic, copy, nullable, readwrite) NSString *strategyId;
@property (nonatomic, copy, nullable, readwrite) NSString *strategyName;
@property (nonatomic, copy, nullable, readwrite) NSDictionary *variables;
@property (nonatomic, assign) long long fetchTime;

Expand All @@ -33,14 +36,20 @@ @interface GrowingABTExperiment ()
@implementation GrowingABTExperiment

- (instancetype)initWithLayerId:(NSString *)layerId
layerName:(NSString *_Nullable)layerName
experimentId:(NSString *_Nullable)experimentId
experimentName:(NSString *_Nullable)experimentName
strategyId:(NSString *_Nullable)strategyId
strategyName:(NSString *_Nullable)strategyName
variables:(NSDictionary *_Nullable)variables
fetchTime:(long long)fetchTime {
if (self = [super init]) {
_layerId = layerId.copy;
_layerName = layerName.copy;
_experimentId = experimentId.copy;
_experimentName = experimentName.copy;
_strategyId = strategyId.copy;
_strategyName = strategyName.copy;
_variables = variables.copy;
_fetchTime = fetchTime;
}
Expand Down Expand Up @@ -111,12 +120,21 @@ - (id)toJSONObject {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[@"layerId"] = self.layerId.copy;
dic[@"fetchTime"] = @(self.fetchTime);
if (self.layerName) {
dic[@"layerName"] = self.layerName.copy;
}
if (self.experimentId) {
dic[@"experimentId"] = self.experimentId.copy;
}
if (self.experimentName) {
dic[@"experimentName"] = self.experimentName.copy;
}
if (self.strategyId) {
dic[@"strategyId"] = self.strategyId.copy;
}
if (self.strategyName) {
dic[@"strategyName"] = self.strategyName.copy;
}
if (self.variables) {
dic[@"variables"] = self.variables.copy;
}
Expand Down
6 changes: 6 additions & 0 deletions Modules/ABTesting/GrowingABTExperimentStorage.m
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,19 @@ - (instancetype)init {
if ([array isKindOfClass:[NSArray class]]) {
for (NSDictionary *dic in array) {
NSString *layerId = dic[@"layerId"];
NSString *layerName = dic[@"layerName"];
NSString *experimentId = dic[@"experimentId"];
NSString *experimentName = dic[@"experimentName"];
NSString *strategyId = dic[@"strategyId"];
NSString *strategyName = dic[@"strategyName"];
NSDictionary *variables = dic[@"variables"];
long long fetchTime = ((NSNumber *)dic[@"fetchTime"]).longLongValue;
GrowingABTExperiment *e = [[GrowingABTExperiment alloc] initWithLayerId:layerId
layerName:layerName
experimentId:experimentId
experimentName:experimentName
strategyId:strategyId
strategyName:strategyName
variables:variables
fetchTime:fetchTime];
[_experiments addObject:e];
Expand Down
41 changes: 35 additions & 6 deletions Modules/ABTesting/GrowingABTesting.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,11 @@

static NSString *const kABTExpHit = @"$exp_hit";
static NSString *const kABTExpLayerId = @"$exp_layer_id";
static NSString *const kABTExpLayerName = @"$exp_layer_name";
static NSString *const kABTExpId = @"$exp_id";
static NSString *const kABTExpName = @"$exp_name";
static NSString *const kABTExpStrategyId = @"$exp_strategy_id";
static NSString *const kABTExpStrategyName = @"$exp_strategy_name";

@implementation GrowingABTesting

Expand Down Expand Up @@ -83,12 +86,23 @@ + (BOOL)isToday:(double)timestamp {
}

+ (void)trackExperiment:(GrowingABTExperiment *)experiment {
[GrowingEventGenerator generateCustomEvent:kABTExpHit
attributes:@{
kABTExpLayerId: experiment.layerId.copy,
kABTExpId: experiment.experimentId.copy,
kABTExpStrategyId: experiment.strategyId.copy
}];
NSMutableDictionary *attributes = @{
kABTExpLayerId: experiment.layerId.copy,
kABTExpId: experiment.experimentId.copy,
kABTExpStrategyId: experiment.strategyId.copy,
}
.mutableCopy;
if (experiment.layerName && experiment.layerName.length > 0) {
attributes[kABTExpLayerName] = experiment.layerName.copy;
}
if (experiment.experimentName && experiment.experimentName.length > 0) {
attributes[kABTExpName] = experiment.experimentName.copy;
}
if (experiment.strategyName && experiment.strategyName.length > 0) {
attributes[kABTExpStrategyName] = experiment.strategyName.copy;
}

[GrowingEventGenerator generateCustomEvent:kABTExpHit attributes:attributes.copy];
}

+ (void)fetchExperiment:(NSString *)layerId
Expand Down Expand Up @@ -151,18 +165,30 @@ + (void)requestExperiment:(NSString *)layerId
return;
}
NSInteger code = -1;
NSString *layerName = nil;
NSString *strategyId = nil;
NSString *strategyName = nil;
NSString *experimentId = nil;
NSString *experimentName = nil;
NSDictionary *variables = nil;
@try {
NSDictionary *dic = [data growingHelper_dictionaryObject];
code = ((NSNumber *)dic[@"code"]).integerValue;
if ([dic[@"layerName"] isKindOfClass:[NSString class]]) {
layerName = (NSString *)dic[@"layerName"];
}
if ([dic[@"strategyId"] isKindOfClass:[NSNumber class]]) {
strategyId = ((NSNumber *)dic[@"strategyId"]).stringValue;
}
if ([dic[@"strategyName"] isKindOfClass:[NSString class]]) {
strategyName = (NSString *)dic[@"strategyName"];
}
if ([dic[@"experimentId"] isKindOfClass:[NSNumber class]]) {
experimentId = ((NSNumber *)dic[@"experimentId"]).stringValue;
}
if ([dic[@"experimentName"] isKindOfClass:[NSString class]]) {
experimentName = (NSString *)dic[@"experimentName"];
}
if ([dic[@"variables"] isKindOfClass:[NSDictionary class]]) {
variables = dic[@"variables"];
}
Expand All @@ -184,8 +210,11 @@ + (void)requestExperiment:(NSString *)layerId

GrowingABTExperiment *exp =
[[GrowingABTExperiment alloc] initWithLayerId:layerId
layerName:layerName
experimentId:experimentId
experimentName:experimentName
strategyId:strategyId
strategyName:strategyName
variables:variables
fetchTime:GrowingULTimeUtil.currentTimeMillis];

Expand Down
3 changes: 3 additions & 0 deletions Modules/ABTesting/Public/GrowingABTExperiment.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ NS_SWIFT_NAME(ABTExperiment)
@interface GrowingABTExperiment : NSObject

@property (nonatomic, copy, readonly) NSString *layerId;
@property (nonatomic, copy, nullable, readonly) NSString *layerName;
@property (nonatomic, copy, nullable, readonly) NSString *experimentId;
@property (nonatomic, copy, nullable, readonly) NSString *experimentName;
@property (nonatomic, copy, nullable, readonly) NSString *strategyId;
@property (nonatomic, copy, nullable, readonly) NSString *strategyName;
@property (nonatomic, copy, nullable, readonly) NSDictionary *variables;

@end
Expand Down
Loading