Skip to content

Commit 84e862e

Browse files
cvlosCristian Avalos
andauthored
Fdl/removes nsnull values (#10498)
* removes NSNull * fixes clang-format errors * updates on CHANGELOG * fixes lint Co-authored-by: Cristian Avalos <[email protected]>
1 parent 861839a commit 84e862e

File tree

3 files changed

+90
-10
lines changed

3 files changed

+90
-10
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 issue where `utmParametersDictionary` / `minimumAppVersion` were not provided and their value were set to `[NSNull null]` instead of `nil`.
3+
14
# 10.2.0
25
- [fixed] Fixes utm parameters not being returned to dynamic link when using universal links (#10341)
36

FirebaseDynamicLinks/Sources/FIRDynamicLinks.m

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -417,17 +417,37 @@ - (nullable FIRDynamicLink *)dynamicLinkFromCustomSchemeURL:(NSURL *)url {
417417
NSString *urlString = parameters[kFIRDLParameterLink];
418418
NSURL *deepLinkURL = [NSURL URLWithString:urlString];
419419
if (deepLinkURL) {
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-
}];
420+
NSMutableDictionary *paramsDictionary = [[NSMutableDictionary alloc]
421+
initWithDictionary:@{kFIRDLParameterDeepLinkIdentifier : urlString}];
422+
423+
if (parameters[kFIRDLParameterSource] != nil) {
424+
[paramsDictionary setValue:parameters[kFIRDLParameterSource]
425+
forKey:kFIRDLParameterSource];
426+
}
427+
428+
if (parameters[kFIRDLParameterMedium] != nil) {
429+
[paramsDictionary setValue:parameters[kFIRDLParameterMedium]
430+
forKey:kFIRDLParameterMedium];
431+
}
432+
433+
if (parameters[kFIRDLParameterTerm] != nil) {
434+
[paramsDictionary setValue:parameters[kFIRDLParameterTerm] forKey:kFIRDLParameterTerm];
435+
}
436+
437+
if (parameters[kFIRDLParameterCampaign] != nil) {
438+
[paramsDictionary setValue:parameters[kFIRDLParameterCampaign]
439+
forKey:(kFIRDLParameterCampaign)];
440+
}
441+
442+
if (parameters[kFIRDLParameterContent] != nil) {
443+
[paramsDictionary setValue:parameters[kFIRDLParameterContent]
444+
forKey:kFIRDLParameterContent];
445+
}
446+
447+
FIRDynamicLink *dynamicLink =
448+
[[FIRDynamicLink alloc] initWithParametersDictionary:paramsDictionary];
430449
dynamicLink.matchType = FIRDLMatchTypeUnique;
450+
dynamicLink.minimumAppVersion = parameters[kFIRDLParameterMinimumAppVersion];
431451

432452
// Call resolveShortLink:completion: to do logging.
433453
// TODO: Create dedicated logging function to prevent this.

FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,63 @@ - (void)testDynamicLinkFromUniversalLinkURLReturnsDLMinimumVersion {
894894
XCTAssertEqualObjects(expectedMinVersion, minVersion, @"Min version didn't match imv= parameter");
895895
}
896896

897+
- (void)testDynamicLinkFromUniversalLinkURLReturnsUTMParams {
898+
NSString *expectedUtmSource = @"utm_source";
899+
NSString *expectedUtmMedium = @"utm_medium";
900+
NSString *expectedUtmCampaign = @"utm_campaign";
901+
NSString *expectedUtmTerm = @"utm_term";
902+
NSString *expectedUtmContent = @"utm_content";
903+
904+
NSString *utmParamsString = [NSString
905+
stringWithFormat:@"utm_source=%@&utm_medium=%@&utm_campaign=%@&utm_term=%@&utm_content=%@",
906+
expectedUtmSource, expectedUtmMedium, expectedUtmCampaign, expectedUtmTerm,
907+
expectedUtmContent];
908+
NSString *urlSuffix =
909+
[NSString stringWithFormat:@"%@&%@", kEncodedComplicatedURLString, utmParamsString];
910+
911+
NSString *urlString =
912+
[NSString stringWithFormat:kStructuredUniversalLinkFmtSubdomainDeepLink, urlSuffix];
913+
NSURL *url = [NSURL URLWithString:urlString];
914+
915+
[self.service setUpWithLaunchOptions:nil
916+
apiKey:kAPIKey
917+
urlScheme:kURLScheme
918+
userDefaults:self.userDefaults];
919+
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
920+
[self.service
921+
dynamicLinkFromUniversalLinkURL:url
922+
completion:^(FIRDynamicLink *_Nullable dynamicLink,
923+
NSError *_Nullable error) {
924+
XCTAssertTrue([NSThread isMainThread]);
925+
NSDictionary *utmParameters = dynamicLink.utmParametersDictionary;
926+
NSString *utmSource = [utmParameters objectForKey:@"utm_source"];
927+
XCTAssertEqualObjects(utmSource, expectedUtmSource,
928+
@"UtmSource doesn't match utm_source parameter");
929+
930+
NSString *utmMedium = [utmParameters objectForKey:@"utm_medium"];
931+
XCTAssertEqualObjects(utmMedium, expectedUtmMedium,
932+
@"UtmMedium doesn't match utm_medium parameter");
933+
934+
NSString *utmCampaign = [utmParameters objectForKey:@"utm_campaign"];
935+
XCTAssertEqualObjects(
936+
utmCampaign, expectedUtmCampaign,
937+
@"UtmCampaign doesn't match utm_campaign parameter");
938+
939+
NSString *utmTerm = [utmParameters objectForKey:@"utm_term"];
940+
XCTAssertEqualObjects(utmTerm, expectedUtmTerm,
941+
@"UtmTerm doesn't match utm_term parameter");
942+
943+
NSString *utmContent = [utmParameters objectForKey:@"utm_content"];
944+
XCTAssertEqualObjects(
945+
utmContent, expectedUtmContent,
946+
@"UtmContent doesn't match utm_content parameter");
947+
948+
[expectation fulfill];
949+
}];
950+
951+
[self waitForExpectationsWithTimeout:kAsyncTestTimout handler:nil];
952+
}
953+
897954
- (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLMinimumVersion {
898955
NSString *expectedMinVersion = @"03-9g03hfd";
899956
NSString *urlSuffix =

0 commit comments

Comments
 (0)