Skip to content
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
22 changes: 12 additions & 10 deletions FirebaseInAppMessaging/Sources/Flows/FIRIAMDisplayExecutor.m
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,18 @@ - (void)messageClicked:(FIRInAppMessagingDisplayMessage *)inAppMessage
[self recordValidImpression:_currentMsgBeingDisplayed.renderData.messageID
withMessageName:_currentMsgBeingDisplayed.renderData.name];

[self.analyticsEventLogger
logAnalyticsEventForType:FIRIAMAnalyticsEventActionURLFollow
forCampaignID:_currentMsgBeingDisplayed.renderData.messageID
withCampaignName:_currentMsgBeingDisplayed.renderData.name
eventTimeInMs:nil
completion:^(BOOL success) {
FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM400032",
@"Logging analytics event for url following %@",
success ? @"succeeded" : @"failed");
}];
if (action.actionURL) {
[self.analyticsEventLogger
logAnalyticsEventForType:FIRIAMAnalyticsEventActionURLFollow
forCampaignID:_currentMsgBeingDisplayed.renderData.messageID
withCampaignName:_currentMsgBeingDisplayed.renderData.name
eventTimeInMs:nil
completion:^(BOOL success) {
FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM400032",
@"Logging analytics event for url following %@",
success ? @"succeeded" : @"failed");
}];
}
}

NSURL *actionURL = action.actionURL;
Expand Down
64 changes: 61 additions & 3 deletions FirebaseInAppMessaging/Tests/Unit/FIRIAMDisplayExecutorTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ @interface FIRIAMDisplayExecutorTests : XCTestCase
@property id<FIRInAppMessagingDisplay> mockMessageDisplayComponent;

// four pre-defined messages
@property FIRIAMMessageDefinition *m1, *m2, *m3, *m4;
@property FIRIAMMessageDefinition *m1, *m2, *m3, *m4, *m5;
@end

@implementation FIRIAMDisplayExecutorTests
Expand All @@ -220,7 +220,7 @@ - (void)setupMessageTexture {
FIRIAMDisplayTriggerDefinition *contextualTriggerDefinition =
[[FIRIAMDisplayTriggerDefinition alloc] initWithFirebaseAnalyticEvent:@"test_event"];

// m2 and m4 will be of app open trigger
// m2, m4, and m5 will be of app open trigger
FIRIAMDisplayTriggerDefinition *appOpentriggerDefinition =
[[FIRIAMDisplayTriggerDefinition alloc] initForAppForegroundTrigger];

Expand Down Expand Up @@ -338,6 +338,35 @@ - (void)setupMessageTexture {
appData:@{@"a" : @"b", @"up" : @"dog"}
experimentPayload:experimentPayload
isTestMessage:NO];

FIRIAMMessageContentDataForTesting *m5ContentData = [[FIRIAMMessageContentDataForTesting alloc]
initWithMessageTitle:nil
messageBody:nil
actionButtonText:nil
secondaryActionButtonText:nil
actionURL:nil
secondaryActionURL:nil
imageURL:[NSURL URLWithString:@"https://google.com/image"]
landscapeImageURL:nil
hasImageError:NO];

FIRIAMRenderingEffectSetting *renderSetting5 =
[FIRIAMRenderingEffectSetting getDefaultRenderingEffectSetting];
renderSetting5.viewMode = FIRIAMRenderAsImageOnlyView;

FIRIAMMessageRenderData *renderData5 =
[[FIRIAMMessageRenderData alloc] initWithMessageID:@"m5"
messageName:@"name"
contentData:m5ContentData
renderingEffect:renderSetting5];

self.m5 = [[FIRIAMMessageDefinition alloc] initWithRenderData:renderData5
startTime:activeStartTime
endTime:activeEndTime
triggerDefinition:@[ appOpentriggerDefinition ]
appData:nil
experimentPayload:nil
isTestMessage:NO];
}

NSTimeInterval DISPLAY_MIN_INTERVALS = 1;
Expand Down Expand Up @@ -599,8 +628,37 @@ - (void)testAnalyticsTrackingOnMessageClickCase {

[self.clientMessageCache setMessageData:@[ self.m2 ]];

FIRInAppMessagingAction *m2Action = [[FIRInAppMessagingAction alloc]
initWithActionText:self.m2.renderData.contentData.actionButtonText
actionURL:self.m2.renderData.contentData.actionURL];
FIRIAMMessageDisplayForTesting *display = [[FIRIAMMessageDisplayForTesting alloc]
initWithDelegateInteraction:FIRInAppMessagingDelegateInteractionClick];
initWithDelegateInteraction:FIRInAppMessagingDelegateInteractionClick
action:m2Action];
self.displayExecutor.messageDisplayComponent = display;

[self.displayExecutor checkAndDisplayNextAppForegroundMessage];
OCMVerifyAll((id)self.mockAnalyticsEventLogger);
}

- (void)testAnalyticsTrackingOnMessageClickCaseWithNoActionURL {
// This setup allows next message to be displayed from display interval perspective.
OCMStub([self.mockTimeFetcher currentTimestampInSeconds])
.andReturn(DISPLAY_MIN_INTERVALS * 60 + 100);

// We expect two analytics events for a click action:
// An impression event and an action URL follow event
OCMExpect([self.mockAnalyticsEventLogger
logAnalyticsEventForType:FIRIAMAnalyticsEventMessageImpression
forCampaignID:[OCMArg isEqual:self.m5.renderData.messageID]
withCampaignName:[OCMArg any]
eventTimeInMs:[OCMArg any]
completion:[OCMArg any]]);

[self.clientMessageCache setMessageData:@[ self.m5 ]];

FIRIAMMessageDisplayForTesting *display = [[FIRIAMMessageDisplayForTesting alloc]
initWithDelegateInteraction:FIRInAppMessagingDelegateInteractionClick
action:nil];
self.displayExecutor.messageDisplayComponent = display;

[self.displayExecutor checkAndDisplayNextAppForegroundMessage];
Expand Down