Skip to content
Closed
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
1 change: 1 addition & 0 deletions PostHog/Classes/PHGPostHog.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ NS_ASSUME_NONNULL_BEGIN
- (bool)isFeatureEnabled:(NSString *)flagKey;
- (bool)isFeatureEnabled:(NSString *)flagKey options:(NSDictionary *_Nullable)options;
- (void)reloadFeatureFlags;
- (void)reloadFeatureFlagsWithCallback:(void(^)(void))callback;
- (NSString *)getFeatureFlagStringPayload:(NSString *)flagKey defaultValue:(NSString *)defaultValue;
- (NSInteger)getFeatureFlagIntegerPayload:(NSString *)flagKey defaultValue:(NSInteger)defaultValue;
- (double)getFeatureFlagDoublePayload:(NSString *)flagKey defaultValue:(double)defaultValue;
Expand Down
78 changes: 42 additions & 36 deletions PostHog/Classes/PHGPostHog.m
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ - (void)handleAppStateNotification:(NSNotification *)note
{
PHGApplicationLifecyclePayload *payload = [[PHGApplicationLifecyclePayload alloc] init];
payload.notificationName = note.name;
[self run:PHGEventTypeApplicationLifecycle payload:payload];
[self run:PHGEventTypeApplicationLifecycle payload:payload callback:nil];

if ([note.name isEqualToString:UIApplicationDidFinishLaunchingNotification]) {
[self _applicationDidFinishLaunchingWithOptions:note.userInfo];
Expand Down Expand Up @@ -214,10 +214,10 @@ - (void)identify:(NSString *)distinctId properties:(NSDictionary *)properties op
anonId = [self getAnonymousId];
}

[self run:PHGEventTypeIdentify payload:
[[PHGIdentifyPayload alloc] initWithDistinctId:distinctId
anonymousId:anonId
properties:properties]];
PHGIdentifyPayload *payload = [[PHGIdentifyPayload alloc] initWithDistinctId:distinctId
anonymousId:anonId
properties:properties];
[self run:PHGEventTypeIdentify payload:payload callback:nil];
}

#pragma mark - Capture
Expand All @@ -230,9 +230,9 @@ - (void)capture:(NSString *)event
- (void)capture:(NSString *)event properties:(NSDictionary *)properties
{
NSCAssert1(event.length > 0, @"event (%@) must not be empty.", event);
[self run:PHGEventTypeCapture payload:
[[PHGCapturePayload alloc] initWithEvent:event
properties:PHGCoerceDictionary(properties)]];
PHGCapturePayload * payload = [[PHGCapturePayload alloc] initWithEvent:event
properties:PHGCoerceDictionary(properties)];
[self run:PHGEventTypeCapture payload:payload callback:nil];
}

#pragma mark - Screen
Expand All @@ -245,18 +245,17 @@ - (void)screen:(NSString *)screenTitle
- (void)screen:(NSString *)screenTitle properties:(NSDictionary *)properties
{
NSCAssert1(screenTitle.length > 0, @"screen name (%@) must not be empty.", screenTitle);

[self run:PHGEventTypeScreen payload:
[[PHGScreenPayload alloc] initWithName:screenTitle
properties:PHGCoerceDictionary(properties)]];
PHGScreenPayload *payload = [[PHGScreenPayload alloc] initWithName:screenTitle
properties:PHGCoerceDictionary(properties)];
[self run:PHGEventTypeScreen payload: payload callback:nil];
}

#pragma mark - Alias

- (void)alias:(NSString *)alias
{
[self run:PHGEventTypeAlias payload:
[[PHGAliasPayload alloc] initWithAlias:alias]];
PHGAliasPayload *payload = [[PHGAliasPayload alloc] initWithAlias:alias];
[self run:PHGEventTypeAlias payload:payload callback:nil];
}

#pragma mark - Group
Expand All @@ -272,8 +271,11 @@ - (void)group:(NSString *_Nonnull)groupType groupKey:(NSString *_Nonnull)groupKe

// TODO: set groups as super property
[self.payloadManager saveGroup:groupType groupKey:groupKey];

[self run:PHGEventTypeGroup payload: [[PHGGroupPayload alloc] initWithType:groupType groupKey:groupKey properties:PHGCoerceDictionary(properties)]];

PHGGroupPayload *payload = [[PHGGroupPayload alloc] initWithType:groupType
groupKey:groupKey
properties:PHGCoerceDictionary(properties)];
[self run:PHGEventTypeGroup payload: payload callback:nil];

NSString *possibleGroupKey = [currentGroups objectForKey:groupType];

Expand All @@ -299,10 +301,9 @@ - (id)getFeatureFlag:(NSString *)flagKey options:(NSDictionary *)options
[properties setValue:flagKey forKey:@"$feature_flag"];
[properties setValue:variantValue forKey:@"$feature_flag_response"];


[self run:PHGEventTypeCapture payload:
[[PHGCapturePayload alloc] initWithEvent:@"$feature_flag_called"
properties:PHGCoerceDictionary(properties)]];
PHGCapturePayload *payload = [[PHGCapturePayload alloc] initWithEvent:@"$feature_flag_called"
properties:PHGCoerceDictionary(properties)];
[self run:PHGEventTypeCapture payload:payload callback:nil];
}

return variantValue;
Expand Down Expand Up @@ -335,10 +336,9 @@ - (bool)isFeatureEnabled:(NSString *)flagKey options:(NSDictionary *)options

[properties setValue:flagKey forKey:@"$feature_flag"];
[properties setValue:@(isFlagEnabled) forKey:@"$feature_flag_response"];

[self run:PHGEventTypeCapture payload:
[[PHGCapturePayload alloc] initWithEvent:@"$feature_flag_called"
properties:PHGCoerceDictionary(properties)]];
PHGCapturePayload *payload = [[PHGCapturePayload alloc] initWithEvent:@"$feature_flag_called"
properties:PHGCoerceDictionary(properties)];
[self run:PHGEventTypeCapture payload: payload callback:nil];
}

return isFlagEnabled;
Expand Down Expand Up @@ -434,7 +434,14 @@ - (NSArray *)getFeatureFlagArrayPayload:(NSString *)flagKey defaultValue:(NSArra

- (void)reloadFeatureFlags
{
[self run:PHGEventTypeReloadFeatureFlags payload:nil];
[self run:PHGEventTypeReloadFeatureFlags payload:nil callback:nil];
}

- (void)reloadFeatureFlagsWithCallback:(void(^)(void))callback
{
[self run:PHGEventTypeReloadFeatureFlags payload:nil callback:^(BOOL earlyExit, NSArray<id<PHGMiddleware>> * _Nonnull remainingMiddlewares) {
callback();
}];
}

- (void)capturePushNotification:(NSDictionary *)properties fromLaunch:(BOOL)launch
Expand All @@ -453,37 +460,37 @@ - (void)receivedRemoteNotification:(NSDictionary *)userInfo
}
PHGRemoteNotificationPayload *payload = [[PHGRemoteNotificationPayload alloc] init];
payload.userInfo = userInfo;
[self run:PHGEventTypeReceivedRemoteNotification payload:payload];
[self run:PHGEventTypeReceivedRemoteNotification payload:payload callback:nil];
}

- (void)failedToRegisterForRemoteNotificationsWithError:(NSError *)error
{
PHGRemoteNotificationPayload *payload = [[PHGRemoteNotificationPayload alloc] init];
payload.error = error;
[self run:PHGEventTypeFailedToRegisterForRemoteNotifications payload:payload];
[self run:PHGEventTypeFailedToRegisterForRemoteNotifications payload:payload callback:nil];
}

- (void)registeredForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSParameterAssert(deviceToken != nil);
PHGRemoteNotificationPayload *payload = [[PHGRemoteNotificationPayload alloc] init];
payload.deviceToken = deviceToken;
[self run:PHGEventTypeRegisteredForRemoteNotifications payload:payload];
[self run:PHGEventTypeRegisteredForRemoteNotifications payload:payload callback:nil];
}

- (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo
{
PHGRemoteNotificationPayload *payload = [[PHGRemoteNotificationPayload alloc] init];
payload.actionIdentifier = identifier;
payload.userInfo = userInfo;
[self run:PHGEventTypeHandleActionWithForRemoteNotification payload:payload];
[self run:PHGEventTypeHandleActionWithForRemoteNotification payload:payload callback:nil];
}

- (void)continueUserActivity:(NSUserActivity *)activity
{
PHGContinueUserActivityPayload *payload = [[PHGContinueUserActivityPayload alloc] init];
payload.activity = activity;
[self run:PHGEventTypeContinueUserActivity payload:payload];
[self run:PHGEventTypeContinueUserActivity payload:payload callback:nil];

if (!self.configuration.captureDeepLinks) {
return;
Expand All @@ -506,7 +513,7 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options
payload.url = [NSURL URLWithString:[PHGUtils traverseJSON:url.absoluteString
andReplaceWithFilters:self.configuration.payloadFilters]];
payload.options = options;
[self run:PHGEventTypeOpenURL payload:payload];
[self run:PHGEventTypeOpenURL payload:payload callback:nil];

if (!self.configuration.captureDeepLinks) {
return;
Expand All @@ -522,12 +529,12 @@ - (void)openURL:(NSURL *)url options:(NSDictionary *)options

- (void)reset
{
[self run:PHGEventTypeReset payload:nil];
[self run:PHGEventTypeReset payload:nil callback:nil];
}

- (void)flush
{
[self run:PHGEventTypeFlush payload:nil];
[self run:PHGEventTypeFlush payload:nil callback:nil];
}

- (void)enable
Expand Down Expand Up @@ -567,7 +574,7 @@ + (NSString *)version

#pragma mark - Helpers

- (void)run:(PHGEventType)eventType payload:(PHGPayload *)payload
- (void)run:(PHGEventType)eventType payload:(PHGPayload *)payload callback:(RunMiddlewaresCallback _Nullable)callback
{
if (!self.enabled) {
return;
Expand All @@ -576,8 +583,7 @@ - (void)run:(PHGEventType)eventType payload:(PHGPayload *)payload
ctx.eventType = eventType;
ctx.payload = payload;
}];
// Could probably do more things with callback later, but we don't use it yet.
[self.runner run:context callback:nil];
[self.runner run:context callback:callback];
}

@end