Skip to content

Commit 6dfadd2

Browse files
cvlosCristian Avalos
andauthored
Fdl/fixes issues parsing utm parameters from universal links (#10413)
* updates changelog * updates code to fix missing utm parameters * fixes missing utm_term and utm_content * fixes unit tests * fixes changelog * fixes clang-format issues * updates changelog Co-authored-by: Cristian Avalos <[email protected]>
1 parent 63c6de7 commit 6dfadd2

File tree

7 files changed

+64
-27
lines changed

7 files changed

+64
-27
lines changed

FirebaseDynamicLinks/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# Unreleased
2+
- [fixed] Fixes utm parameters not being returned to dynamic link when using universal links (#10341)
3+
14
# 10.0.0
25
- [removed] Removed bare initializer from `DynamicLink`. (#10000)
36
- [fixed] Added app.google (1p domain) support in FDL SDK which was missing.

FirebaseDynamicLinks/Sources/FIRDynamicLinkNetworking.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
static NSString *const kFDLAnalyticsDataSourceKey = @"utmSource";
4242
static NSString *const kFDLAnalyticsDataMediumKey = @"utmMedium";
4343
static NSString *const kFDLAnalyticsDataCampaignKey = @"utmCampaign";
44+
static NSString *const kFDLAnalyticsDataTermKey = @"utmTerm";
45+
static NSString *const kFDLAnalyticsDataContentKey = @"utmContent";
4446
static NSString *const kHeaderIosBundleIdentifier = @"X-Ios-Bundle-Identifier";
4547
static NSString *const kGenericErrorDomain = @"com.firebase.dynamicLinks";
4648

@@ -171,9 +173,11 @@ - (void)resolveShortLink:(NSURL *)url
171173
NSString *utmSource = result[kFDLAnalyticsDataSourceKey];
172174
NSString *utmMedium = result[kFDLAnalyticsDataMediumKey];
173175
NSString *utmCampaign = result[kFDLAnalyticsDataCampaignKey];
174-
resolvedURL = FIRDLDeepLinkURLWithInviteID(invitationIDString, deepLinkString,
175-
utmSource, utmMedium, utmCampaign, NO, nil,
176-
minAppVersion, self->_URLScheme, nil);
176+
NSString *utmContent = result[kFDLAnalyticsDataContentKey];
177+
NSString *utmTerm = result[kFDLAnalyticsDataTermKey];
178+
resolvedURL = FIRDLDeepLinkURLWithInviteID(
179+
invitationIDString, deepLinkString, utmSource, utmMedium, utmCampaign, utmContent,
180+
utmTerm, NO, nil, minAppVersion, self->_URLScheme, nil);
177181
}
178182
}
179183
handler(resolvedURL, extractedError);

FirebaseDynamicLinks/Sources/FIRDynamicLinks.m

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -417,10 +417,18 @@ - (nullable FIRDynamicLink *)dynamicLinkFromCustomSchemeURL:(NSURL *)url {
417417
NSString *urlString = parameters[kFIRDLParameterLink];
418418
NSURL *deepLinkURL = [NSURL URLWithString:urlString];
419419
if (deepLinkURL) {
420-
FIRDynamicLink *dynamicLink = [[FIRDynamicLink alloc]
421-
initWithParametersDictionary:@{kFIRDLParameterDeepLinkIdentifier : urlString}];
420+
FIRDynamicLink *dynamicLink = [[FIRDynamicLink alloc] initWithParametersDictionary:@{
421+
kFIRDLParameterDeepLinkIdentifier : urlString,
422+
kFIRDLParameterCampaign : parameters[kFIRDLParameterCampaign] ?: [NSNull null],
423+
kFIRDLParameterContent : parameters[kFIRDLParameterContent] ?: [NSNull null],
424+
kFIRDLParameterMedium : parameters[kFIRDLParameterMedium] ?: [NSNull null],
425+
kFIRDLParameterSource : parameters[kFIRDLParameterSource] ?: [NSNull null],
426+
kFIRDLParameterTerm : parameters[kFIRDLParameterTerm] ?: [NSNull null],
427+
kFIRDLParameterMinimumAppVersion : parameters[kFIRDLParameterMinimumAppVersion]
428+
?: [NSNull null],
429+
}];
422430
dynamicLink.matchType = FIRDLMatchTypeUnique;
423-
dynamicLink.minimumAppVersion = parameters[kFIRDLParameterMinimumAppVersion];
431+
424432
// Call resolveShortLink:completion: to do logging.
425433
// TODO: Create dedicated logging function to prevent this.
426434
[self.dynamicLinkNetworking

FirebaseDynamicLinks/Sources/Utilities/FDLUtilities.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ NS_ASSUME_NONNULL_BEGIN
2121
FOUNDATION_EXPORT NSString *const kFIRDLParameterDeepLinkIdentifier;
2222
FOUNDATION_EXPORT NSString *const kFIRDLParameterLink;
2323
FOUNDATION_EXPORT NSString *const kFIRDLParameterMinimumAppVersion;
24-
FOUNDATION_EXPORT NSString *const kFIRDLParameterSource;
25-
FOUNDATION_EXPORT NSString *const kFIRDLParameterMedium;
2624
FOUNDATION_EXPORT NSString *const kFIRDLParameterCampaign;
25+
FOUNDATION_EXPORT NSString *const kFIRDLParameterContent;
26+
FOUNDATION_EXPORT NSString *const kFIRDLParameterMedium;
27+
FOUNDATION_EXPORT NSString *const kFIRDLParameterTerm;
28+
FOUNDATION_EXPORT NSString *const kFIRDLParameterSource;
2729
FOUNDATION_EXPORT NSString *const kFIRDLParameterMatchType;
2830
FOUNDATION_EXPORT NSString *const kFIRDLParameterInviteId;
2931
FOUNDATION_EXPORT NSString *const kFIRDLParameterWeakMatchEndpoint;
@@ -79,6 +81,8 @@ NSURL *FIRDLDeepLinkURLWithInviteID(NSString *_Nullable inviteID,
7981
NSString *_Nullable utmSource,
8082
NSString *_Nullable utmMedium,
8183
NSString *_Nullable utmCampaign,
84+
NSString *_Nullable utmContent,
85+
NSString *_Nullable utmTerm,
8286
BOOL isWeakLink,
8387
NSString *_Nullable weakMatchEndpoint,
8488
NSString *_Nullable minAppVersion,

FirebaseDynamicLinks/Sources/Utilities/FDLUtilities.m

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
NSString *const kFIRDLParameterDeepLinkIdentifier = @"deep_link_id";
2828
NSString *const kFIRDLParameterLink = @"link";
2929
NSString *const kFIRDLParameterMinimumAppVersion = @"imv";
30-
NSString *const kFIRDLParameterSource = @"utm_source";
31-
NSString *const kFIRDLParameterMedium = @"utm_medium";
3230
NSString *const kFIRDLParameterCampaign = @"utm_campaign";
31+
NSString *const kFIRDLParameterContent = @"utm_content";
32+
NSString *const kFIRDLParameterMedium = @"utm_medium";
33+
NSString *const kFIRDLParameterSource = @"utm_source";
34+
NSString *const kFIRDLParameterTerm = @"utm_term";
3335
NSString *const kFIRDLParameterMatchType = @"match_type";
3436
NSString *const kFIRDLParameterInviteId = @"invitation_id";
3537
NSString *const kFIRDLParameterWeakMatchEndpoint = @"invitation_weakMatchEndpoint";
@@ -98,6 +100,8 @@
98100
NSString *_Nullable utmSource,
99101
NSString *_Nullable utmMedium,
100102
NSString *_Nullable utmCampaign,
103+
NSString *_Nullable utmContent,
104+
NSString *_Nullable utmTerm,
101105
BOOL isWeakLink,
102106
NSString *_Nullable weakMatchEndpoint,
103107
NSString *_Nullable minAppVersion,
@@ -122,6 +126,15 @@
122126
if (utmCampaign != nil) {
123127
queryDictionary[kFIRDLParameterCampaign] = utmCampaign;
124128
}
129+
130+
if (utmContent != nil) {
131+
queryDictionary[kFIRDLParameterContent] = utmContent;
132+
}
133+
134+
if (utmTerm != nil) {
135+
queryDictionary[kFIRDLParameterTerm] = utmTerm;
136+
}
137+
125138
if (isWeakLink) {
126139
queryDictionary[kFIRDLParameterMatchType] = @"weak";
127140
} else {

FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -811,8 +811,8 @@ - (void)testDynamicLinkFromCustomSchemeURLReturnsDLWithNilMinimumVersion {
811811
apiKey:kAPIKey
812812
urlScheme:kURLScheme
813813
userDefaults:self.userDefaults];
814-
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, NO,
815-
nil, nil, kURLScheme, nil);
814+
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, nil,
815+
nil, NO, nil, nil, kURLScheme, nil);
816816
FIRDynamicLink *dynamicLink = [self.service dynamicLinkFromCustomSchemeURL:url];
817817

818818
XCTAssertNil(dynamicLink.minimumAppVersion, @"Min app version was not nil when not set.");
@@ -825,8 +825,8 @@ - (void)testDynamicLinkFromCustomSchemeURLReturnsDLMinimumVersion {
825825
apiKey:kAPIKey
826826
urlScheme:kURLScheme
827827
userDefaults:self.userDefaults];
828-
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, NO,
829-
nil, expectedMinVersion, kURLScheme, nil);
828+
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, nil,
829+
nil, NO, nil, expectedMinVersion, kURLScheme, nil);
830830
FIRDynamicLink *dynamicLink = [self.service dynamicLinkFromCustomSchemeURL:url];
831831

832832
NSString *minVersion = dynamicLink.minimumAppVersion;
@@ -841,8 +841,8 @@ - (void)testDynamicLinkFromUniversalLinkURLReturnsDLWithNilMinimumVersion {
841841
urlScheme:kURLScheme
842842
userDefaults:self.userDefaults];
843843

844-
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, NO,
845-
nil, nil, kURLScheme, nil);
844+
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, nil,
845+
nil, NO, nil, nil, kURLScheme, nil);
846846

847847
FIRDynamicLink *dynamicLink = [self.service dynamicLinkFromUniversalLinkURL:url];
848848

@@ -857,8 +857,8 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLWithNilMinimumVers
857857
urlScheme:kURLScheme
858858
userDefaults:self.userDefaults];
859859

860-
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, NO,
861-
nil, nil, kURLScheme, nil);
860+
NSURL *url = FIRDLDeepLinkURLWithInviteID(nil, kEncodedComplicatedURLString, nil, nil, nil, nil,
861+
nil, NO, nil, nil, kURLScheme, nil);
862862

863863
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
864864
[self.service
@@ -1478,6 +1478,8 @@ - (void)testRetrievalProcessResultURLContainsAllParametersPassedToDynamicLinkIni
14781478
@"utm_campaign" : @"Maksym M Test",
14791479
@"utm_medium" : @"test_medium",
14801480
@"utm_source" : @"test_source",
1481+
@"utm_content" : @"test_content",
1482+
@"utm_term" : @"test_term",
14811483
@"a_parameter" : @"a_value"
14821484
};
14831485

FirebaseDynamicLinks/Tests/Unit/UtilitiesTests.m

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,19 +145,22 @@ - (void)testDeepLinkURLWithInviteIDDeepLinkStringWeakMatchEndpointCreatesExpecte
145145
NSString *utmSource = @"firebase";
146146
NSString *utmMedium = @"email";
147147
NSString *utmCampaign = @"testCampaign";
148+
NSString *utmTerm = @"testTerm";
149+
NSString *utmContent = @"testContent";
148150
NSString *matchType = @"unique";
149151

150-
NSString *expectedURLString =
151-
[NSString stringWithFormat:@"%@://google/link/?utm_campaign=%@"
152-
@"&deep_link_id=%@&utm_medium=%@&invitation_weakMatchEndpoint=%@"
153-
@"&utm_source=%@&invitation_id=%@&match_type=%@",
154-
kURLScheme, utmCampaign, encodedDeepLinkString, utmMedium,
155-
weakMatchEndpoint, utmSource, inviteID, matchType];
152+
NSString *expectedURLString = [NSString
153+
stringWithFormat:@"%@://google/link/?utm_campaign=%@"
154+
@"&deep_link_id=%@&utm_medium=%@&invitation_weakMatchEndpoint=%@"
155+
@"&utm_source=%@&invitation_id=%@&match_type=%@"
156+
@"&utm_content=%@&utm_term=%@",
157+
kURLScheme, utmCampaign, encodedDeepLinkString, utmMedium, weakMatchEndpoint,
158+
utmSource, inviteID, matchType, utmContent, utmTerm];
156159
NSURLComponents *expectedURLComponents = [NSURLComponents componentsWithString:expectedURLString];
157160

158-
NSURL *actualURL =
159-
FIRDLDeepLinkURLWithInviteID(inviteID, deepLinkString, utmSource, utmMedium, utmCampaign, NO,
160-
weakMatchEndpoint, nil, kURLScheme, nil);
161+
NSURL *actualURL = FIRDLDeepLinkURLWithInviteID(inviteID, deepLinkString, utmSource, utmMedium,
162+
utmCampaign, utmContent, utmTerm, NO,
163+
weakMatchEndpoint, nil, kURLScheme, nil);
161164

162165
NSURLComponents *actualURLComponents = [NSURLComponents componentsWithURL:actualURL
163166
resolvingAgainstBaseURL:NO];

0 commit comments

Comments
 (0)