From 61f83b886515ef53712ea65218da28f266d4875d Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 00:44:18 -0800 Subject: [PATCH 01/14] Add support for creating DL with custom domain names/paths. The new domainURIPrefix parameter requires either a. a valid FDL domain name created in the Firebase console or b. a custom domain name or c. a custom domain name with path registered for DL. All domainURIPrefixes need to start with a valid (https) scheme. --- .../FDLBuilderTestAppObjC/ViewController.m | 2 +- .../Tests/FDLURLComponentsTests.m | 49 +++++++++++-------- .../Tests/FIRDynamicLinkNetworkingTests.m | 2 +- .../FDLURLComponents/FDLURLComponents.m | 27 ++++++++-- Firebase/DynamicLinks/Logging/FDLLogging.h | 1 + .../DynamicLinks/Public/FDLURLComponents.h | 26 +++++++++- 6 files changed, 80 insertions(+), 27 deletions(-) diff --git a/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m b/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m index cfacbc060ad..1c03b09df75 100644 --- a/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m +++ b/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m @@ -289,7 +289,7 @@ - (void)_initDefaultValues { - (void)_buildFDLLink { NSURL *link = [NSURL URLWithString:_paramValues[@"linkString"]]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:_paramValues[@"domain"]]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:_paramValues[@"domain"]]; FIRDynamicLinkGoogleAnalyticsParameters *analyticsParams = [FIRDynamicLinkGoogleAnalyticsParameters diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index b1a51ee5f3b..9b4ec042b80 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -21,7 +21,8 @@ #import -static NSString *const kFDLURLDomain = @"xyz.page.link"; +static NSString *const kFDLURLDomain = @"https://xyz.page.link"; +static NSString *const kFDLURLCustomDomain = @"https://foo.com/path"; @interface FDLURLComponentsTests : XCTestCase @end @@ -461,14 +462,14 @@ - (void)testLinkOptionsParamsPropertiesSetProperly { - (void)testFDLComponentsFactoryReturnsInstanceOfCorrectClass { NSURL *link = [NSURL URLWithString:@"https://google.com"]; - id returnValue = [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + id returnValue = [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; XCTAssertTrue([returnValue isKindOfClass:[FIRDynamicLinkComponents class]]); } - (void)testFDLComponentsFactoryReturnsInstanceWithAllNilProperties { NSURL *link = [NSURL URLWithString:@"https://google.com"]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; XCTAssertNil(components.analyticsParameters); XCTAssertNil(components.socialMetaTagParameters); @@ -484,11 +485,27 @@ - (void)testFDLComponentsCreatesSimplestLinkCorrectly { NSURL *link = [NSURL URLWithString:linkString]; NSString *expectedURLString = - [NSString stringWithFormat:@"https://%@/?link=%@", kFDLURLDomain, endcodedLinkString]; + [NSString stringWithFormat:@"%@/?link=%@", kFDLURLDomain, endcodedLinkString]; NSURL *expectedURL = [NSURL URLWithString:expectedURLString]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; + NSURL *actualURL = components.url; + + XCTAssertEqualObjects(actualURL, expectedURL); +} + +- (void)testFDLComponentsCustomDomainWithPath { + NSString *linkString = @"https://google.com"; + NSString *endcodedLinkString = @"https%3A%2F%2Fgoogle%2Ecom"; + NSURL *link = [NSURL URLWithString:linkString]; + + NSString *expectedURLString = + [NSString stringWithFormat:@"%@/?link=%@", kFDLURLCustomDomain, endcodedLinkString]; + NSURL *expectedURL = [NSURL URLWithString:expectedURLString]; + + FIRDynamicLinkComponents *components = + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLCustomDomain]; NSURL *actualURL = components.url; XCTAssertEqualObjects(actualURL, expectedURL); @@ -499,7 +516,7 @@ - (void)testFDLComponentsFailsOnMalformedDomain { NSURL *link = [NSURL URLWithString:linkString]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:@"this is invalid domain"]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:@"this is invalid domain"]; XCTAssertNil(components.url); } @@ -553,7 +570,7 @@ - (void)testFDLComponentsCreatesFullLinkCorrectly { NSURL *link = [NSURL URLWithString:@"https://google.com"]; FIRDynamicLinkComponents *fdlComponents = - [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; fdlComponents.analyticsParameters = analyticsParams; fdlComponents.iOSParameters = iosParams; fdlComponents.iTunesConnectParameters = itcParams; @@ -642,7 +659,7 @@ - (void)testShortenURL { XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"]; NSURL *link = [NSURL URLWithString:@"https://google.com/abc"]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; [components shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray *_Nullable warnings, NSError *_Nullable error) { @@ -679,7 +696,7 @@ - (void)testShortenURLReturnsErrorWhenAPIKeyMissing { [self expectationWithDescription:@"completion called with error"]; NSURL *link = [NSURL URLWithString:@"https://google.com/abc"]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:kFDLURLDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLDomain]; [components shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray *_Nullable warnings, NSError *_Nullable error) { @@ -714,20 +731,10 @@ - (void)testShortenURLReturnsErrorWhenDomainIsMalformed { return YES; }]]; - XCTestExpectation *expectation = - [self expectationWithDescription:@"completion called with error"]; NSURL *link = [NSURL URLWithString:@"https://google.com/abc"]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:@"this is invalid domain"]; - [components - shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray *_Nullable warnings, - NSError *_Nullable error) { - XCTAssertNil(shortURL); - if (error) { - [expectation fulfill]; - } - }]; - [self waitForExpectationsWithTimeout:0.1 handler:nil]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:@"this is invalid domain"]; + XCTAssertNil(components); [keyProviderClassMock verify]; [keyProviderClassMock stopMocking]; diff --git a/Example/DynamicLinks/Tests/FIRDynamicLinkNetworkingTests.m b/Example/DynamicLinks/Tests/FIRDynamicLinkNetworkingTests.m index 3a8070e2c49..80be311184e 100644 --- a/Example/DynamicLinks/Tests/FIRDynamicLinkNetworkingTests.m +++ b/Example/DynamicLinks/Tests/FIRDynamicLinkNetworkingTests.m @@ -16,7 +16,7 @@ #import -#import "OCMock.h" +#import #import #import "DynamicLinks/FIRDynamicLinkNetworking+Private.h" diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index 9c6a0062ae0..f334f05b0fc 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -20,6 +20,7 @@ #import "DynamicLinks/FDLURLComponents/FIRDynamicLinkComponentsKeyProvider.h" #import "DynamicLinks/Public/FDLURLComponents.h" +#import "DynamicLinks/Logging/FDLLogging.h" #import "DynamicLinks/Utilities/FDLUtilities.h" /// The exact behavior of dict[key] = value is unclear when value is nil. This function safely adds @@ -448,15 +449,35 @@ - (instancetype)init { @implementation FIRDynamicLinkComponents +#pragma mark Deprecated Initializers. + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { - return [[self alloc] initWithLink:link domain:domain]; + NSString *domainURIPrefix = [NSString stringWithFormat:@"https://%@", domain]; + return [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:domainURIPrefix]; } - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { + NSString *domainURIPrefix = [NSString stringWithFormat:@"https://%@", domain]; + return [self initWithLink:link domainURIPrefix:domainURIPrefix]; +} + +#pragma mark Initializers. ++ (instancetype)componentsWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix { + if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); + return nil; + } + return [[self alloc] initWithLink:link domainURIPrefix:domainURIPrefix]; +} + +- (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix { self = [super init]; if (self) { _link = link; - _domain = [domain copy]; + if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); + return nil; + } + _domain = [domainURIPrefix copy]; } return self; } @@ -593,7 +614,7 @@ - (NSURL *)url { addEntriesFromDictionaryRepresentingConformerToDictionary(_otherPlatformParameters); NSString *queryString = FIRDLURLQueryStringFromDictionary(queryDictionary); - NSString *urlString = [NSString stringWithFormat:@"https://%@/%@", _domain, queryString]; + NSString *urlString = [NSString stringWithFormat:@"%@/%@", _domain, queryString]; return [NSURL URLWithString:urlString]; } diff --git a/Firebase/DynamicLinks/Logging/FDLLogging.h b/Firebase/DynamicLinks/Logging/FDLLogging.h index 5a9ea134d47..efd8fedeed0 100644 --- a/Firebase/DynamicLinks/Logging/FDLLogging.h +++ b/Firebase/DynamicLinks/Logging/FDLLogging.h @@ -33,6 +33,7 @@ typedef NS_ENUM(NSInteger, FDLLogIdentifier) { FDLLogIdentifierSetupNilAPIKey = 0, FDLLogIdentifierSetupNilClientID = 1, FDLLogIdentifierSetupNonDefaultApp = 2, + FDLLogIdentifierSetupInvalidDomainScheme = 3, }; /** The appropriate formatter for using NSInteger in FIRLogger. */ diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index cc27736f545..d3479ab8ae7 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -516,7 +516,8 @@ FIR_SWIFT_NAME(DynamicLinkComponents) */ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain - NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); +NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); +DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for domainUriPrefix- componentsWithLink:domainURIPrefix."); /** * @method initWithLink:domain: @@ -528,6 +529,29 @@ FIR_SWIFT_NAME(DynamicLinkComponents) * Console. */ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain; +DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for domainUriPrefix- initWithLink:domainURIPrefix."); + +/** + * @method componentsWithLink:domain: + * @abstract Generates a Dynamic Link URL components object with the minimum necessary parameters + * set to generate a fully-functional Dynamic Link. + * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of + * the Dynamic link. + * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned domain from the Firebase console or b. your custom domain or c. your custom domain with a valid path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme (https://) + */ ++ (instancetype)componentsWithLink:(NSURL *)link + domainURIPrefix:(NSString *)domainURIPrefix + NS_SWIFT_UNAVAILABLE("Use init(link:domainURIPrefix:)"); + +/** + * @method initWithLink:domain: + * @abstract Generates a Dynamic Link URL components object with the minimum necessary parameters + * set to generate a fully-functional Dynamic Link. + * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of + * the Dynamic link. + * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned domain from the Firebase console or b. your custom domain or c. your custom domain with a valid path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme (https://). + */ +- (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix; /** * @method shortenURL:options:completion: From 72e079d3d86996ffcb2d0cb6a0f4cfccbac6b879 Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 01:06:15 -0800 Subject: [PATCH 02/14] Fix style. --- .../Tests/FDLURLComponentsTests.m | 9 +++++---- .../FDLURLComponents/FDLURLComponents.m | 11 ++++++---- .../DynamicLinks/Public/FDLURLComponents.h | 20 +++++++++++++------ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index 9b4ec042b80..89bc35aa28c 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -104,8 +104,9 @@ - (void)testAnalyticsParamsDictionaryRepresentationReturnsCorrectDictionaryEmpty } - (void)testAnalyticsParamsFactoryWithParamsReturnsInstanceOfCorrectClass { - id returnValue = - [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" medium:@"m" campaign:@"c"]; + id returnValue = [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" + medium:@"m" + campaign:@"c"]; XCTAssertTrue([returnValue isKindOfClass:[FIRDynamicLinkGoogleAnalyticsParameters class]]); } @@ -501,11 +502,11 @@ - (void)testFDLComponentsCustomDomainWithPath { NSURL *link = [NSURL URLWithString:linkString]; NSString *expectedURLString = - [NSString stringWithFormat:@"%@/?link=%@", kFDLURLCustomDomain, endcodedLinkString]; + [NSString stringWithFormat:@"%@/?link=%@", kFDLURLCustomDomain, endcodedLinkString]; NSURL *expectedURL = [NSURL URLWithString:expectedURLString]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLCustomDomain]; + [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:kFDLURLCustomDomain]; NSURL *actualURL = components.url; XCTAssertEqualObjects(actualURL, expectedURL); diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index f334f05b0fc..875e9a710ac 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -463,7 +463,8 @@ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { #pragma mark Initializers. + (instancetype)componentsWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix { if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { - FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, + @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; } return [[self alloc] initWithLink:link domainURIPrefix:domainURIPrefix]; @@ -474,7 +475,8 @@ - (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURI if (self) { _link = link; if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { - FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, + @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; } _domain = [domainURIPrefix copy]; @@ -498,8 +500,9 @@ + (void)shortenURL:(NSURL *)url } NSURLRequest *request = [self shorteningRequestForLongURL:url options:options]; if (!request) { - NSError *error = - [NSError errorWithDomain:kFirebaseDurableDeepLinkErrorDomain code:0 userInfo:nil]; + NSError *error = [NSError errorWithDomain:kFirebaseDurableDeepLinkErrorDomain + code:0 + userInfo:nil]; completion(nil, nil, error); return; } diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index d3479ab8ae7..9a0d8d27890 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -516,8 +516,9 @@ FIR_SWIFT_NAME(DynamicLinkComponents) */ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain -NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); -DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for domainUriPrefix- componentsWithLink:domainURIPrefix."); + NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); +DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for " + "domainUriPrefix- componentsWithLink:domainURIPrefix."); /** * @method initWithLink:domain: @@ -529,7 +530,8 @@ DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method w * Console. */ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain; -DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for domainUriPrefix- initWithLink:domainURIPrefix."); +DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for " + "domainUriPrefix- initWithLink:domainURIPrefix."); /** * @method componentsWithLink:domain: @@ -537,10 +539,13 @@ DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method w * set to generate a fully-functional Dynamic Link. * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of * the Dynamic link. - * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned domain from the Firebase console or b. your custom domain or c. your custom domain with a valid path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme (https://) + * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned + * domain from the Firebase console or b. your custom domain or c. your custom domain with a valid + * path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme + * (https://) */ + (instancetype)componentsWithLink:(NSURL *)link - domainURIPrefix:(NSString *)domainURIPrefix + domainURIPrefix:(NSString *)domainURIPrefix NS_SWIFT_UNAVAILABLE("Use init(link:domainURIPrefix:)"); /** @@ -549,7 +554,10 @@ DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method w * set to generate a fully-functional Dynamic Link. * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of * the Dynamic link. - * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned domain from the Firebase console or b. your custom domain or c. your custom domain with a valid path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme (https://). + * @param domainURIPrefix Domain URI Prefix of your App. This value must be either a. your assigned + * domain from the Firebase console or b. your custom domain or c. your custom domain with a valid + * path that is registered for Dynamic Links. The domain URI prefix must start with a valid scheme + * (https://). */ - (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix; From 0f2b022299b899248e458e4b0a337620ffb60d05 Mon Sep 17 00:00:00 2001 From: Paul Beusterien Date: Tue, 13 Nov 2018 06:51:14 -0800 Subject: [PATCH 03/14] style --- Example/DynamicLinks/Tests/FDLURLComponentsTests.m | 5 ++--- .../DynamicLinks/FDLURLComponents/FDLURLComponents.m | 5 ++--- Firebase/DynamicLinks/Public/FDLURLComponents.h | 10 ++++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index 89bc35aa28c..be30905f98c 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -104,9 +104,8 @@ - (void)testAnalyticsParamsDictionaryRepresentationReturnsCorrectDictionaryEmpty } - (void)testAnalyticsParamsFactoryWithParamsReturnsInstanceOfCorrectClass { - id returnValue = [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" - medium:@"m" - campaign:@"c"]; + id returnValue = + [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" medium:@"m" campaign:@"c"]; XCTAssertTrue([returnValue isKindOfClass:[FIRDynamicLinkGoogleAnalyticsParameters class]]); } diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index 875e9a710ac..27793217728 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -500,9 +500,8 @@ + (void)shortenURL:(NSURL *)url } NSURLRequest *request = [self shorteningRequestForLongURL:url options:options]; if (!request) { - NSError *error = [NSError errorWithDomain:kFirebaseDurableDeepLinkErrorDomain - code:0 - userInfo:nil]; + NSError *error = + [NSError errorWithDomain:kFirebaseDurableDeepLinkErrorDomain code:0 userInfo:nil]; completion(nil, nil, error); return; } diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index 9a0d8d27890..8ae1dacbcd4 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -517,8 +517,9 @@ FIR_SWIFT_NAME(DynamicLinkComponents) + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); -DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for " - "domainUriPrefix- componentsWithLink:domainURIPrefix."); +DEPRECATED_MSG_ATTRIBUTE( + "This method is deprecated. Please use the new method with support for " + "domainUriPrefix- componentsWithLink:domainURIPrefix."); /** * @method initWithLink:domain: @@ -530,8 +531,9 @@ DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method w * Console. */ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain; -DEPRECATED_MSG_ATTRIBUTE("This method is deprecated. Please use the new method with support for " - "domainUriPrefix- initWithLink:domainURIPrefix."); +DEPRECATED_MSG_ATTRIBUTE( + "This method is deprecated. Please use the new method with support for " + "domainUriPrefix- initWithLink:domainURIPrefix."); /** * @method componentsWithLink:domain: From 57f3da3203c82480506f774d886f470d517b37be Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 12:00:03 -0800 Subject: [PATCH 04/14] Fix typo in DEPRECATED_MSG_ATTRIBUTE, other nits. --- .../FDLBuilderTestAppObjC/ViewController.m | 9 +++++---- Example/DynamicLinks/Tests/FDLURLComponentsTests.m | 11 +++++++---- Firebase/DynamicLinks/Public/FDLURLComponents.h | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m b/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m index 1c03b09df75..51450db9b4c 100644 --- a/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m +++ b/Example/DynamicLinks/FDLBuilderTestAppObjC/ViewController.m @@ -155,9 +155,9 @@ - (void)_initDefaultValues { }, // The default value of domain appcode belongs to project: app-invites-qa @{ - @"id" : @"domain", - @"label" : @"App domain (required)", - @"defaultValue" : @"testfdl.page.link", + @"id" : @"domainURIPrefix", + @"label" : @"App domainURIPrefix (required)", + @"defaultValue" : @"https://testfdl.page.link", }, // analytics params @{ @@ -289,7 +289,8 @@ - (void)_initDefaultValues { - (void)_buildFDLLink { NSURL *link = [NSURL URLWithString:_paramValues[@"linkString"]]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:_paramValues[@"domain"]]; + [FIRDynamicLinkComponents componentsWithLink:link + domainURIPrefix:_paramValues[@"https://domain"]]; FIRDynamicLinkGoogleAnalyticsParameters *analyticsParams = [FIRDynamicLinkGoogleAnalyticsParameters diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index be30905f98c..3f01980352e 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -104,8 +104,9 @@ - (void)testAnalyticsParamsDictionaryRepresentationReturnsCorrectDictionaryEmpty } - (void)testAnalyticsParamsFactoryWithParamsReturnsInstanceOfCorrectClass { - id returnValue = - [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" medium:@"m" campaign:@"c"]; + id returnValue = [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" + medium:@"m" + campaign:@"c"]; XCTAssertTrue([returnValue isKindOfClass:[FIRDynamicLinkGoogleAnalyticsParameters class]]); } @@ -516,7 +517,8 @@ - (void)testFDLComponentsFailsOnMalformedDomain { NSURL *link = [NSURL URLWithString:linkString]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:@"this is invalid domain"]; + [FIRDynamicLinkComponents componentsWithLink:link + domainURIPrefix:@"this is invalid domain URI Prefix"]; XCTAssertNil(components.url); } @@ -733,7 +735,8 @@ - (void)testShortenURLReturnsErrorWhenDomainIsMalformed { NSURL *link = [NSURL URLWithString:@"https://google.com/abc"]; FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:@"this is invalid domain"]; + [FIRDynamicLinkComponents componentsWithLink:link + domainURIPrefix:@"this is invalid domain URI Prefix"]; XCTAssertNil(components); [keyProviderClassMock verify]; diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index 8ae1dacbcd4..d1456de97bb 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -516,7 +516,7 @@ FIR_SWIFT_NAME(DynamicLinkComponents) */ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain - NS_SWIFT_UNAVAILABLE("Use init(link:domain:)"); + NS_SWIFT_UNAVAILABLE("Use init(link:domain:)") DEPRECATED_MSG_ATTRIBUTE( "This method is deprecated. Please use the new method with support for " "domainUriPrefix- componentsWithLink:domainURIPrefix."); @@ -530,7 +530,7 @@ DEPRECATED_MSG_ATTRIBUTE( * @param domain Domain of your App. This value must be equal to your assigned domain from Firebase * Console. */ -- (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain; +- (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain DEPRECATED_MSG_ATTRIBUTE( "This method is deprecated. Please use the new method with support for " "domainUriPrefix- initWithLink:domainURIPrefix."); From 59137d2de0e2696c66d2e6c84dc9544d345632cd Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 12:18:30 -0800 Subject: [PATCH 05/14] Fix styling. --- .../DynamicLinks/Tests/FDLURLComponentsTests.m | 5 ++--- Firebase/DynamicLinks/Public/FDLURLComponents.h | 16 ++++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index 3f01980352e..64f7d21a1d1 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -104,9 +104,8 @@ - (void)testAnalyticsParamsDictionaryRepresentationReturnsCorrectDictionaryEmpty } - (void)testAnalyticsParamsFactoryWithParamsReturnsInstanceOfCorrectClass { - id returnValue = [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" - medium:@"m" - campaign:@"c"]; + id returnValue = + [FIRDynamicLinkGoogleAnalyticsParameters parametersWithSource:@"s" medium:@"m" campaign:@"c"]; XCTAssertTrue([returnValue isKindOfClass:[FIRDynamicLinkGoogleAnalyticsParameters class]]); } diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index d1456de97bb..b09cc86e82b 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -516,10 +516,9 @@ FIR_SWIFT_NAME(DynamicLinkComponents) */ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain - NS_SWIFT_UNAVAILABLE("Use init(link:domain:)") -DEPRECATED_MSG_ATTRIBUTE( - "This method is deprecated. Please use the new method with support for " - "domainUriPrefix- componentsWithLink:domainURIPrefix."); + NS_SWIFT_UNAVAILABLE("Use init(link:domain:)")DEPRECATED_MSG_ATTRIBUTE( + "This method is deprecated. Please use the new method with support for " + "domainUriPrefix- componentsWithLink:domainURIPrefix."); /** * @method initWithLink:domain: @@ -530,10 +529,11 @@ DEPRECATED_MSG_ATTRIBUTE( * @param domain Domain of your App. This value must be equal to your assigned domain from Firebase * Console. */ -- (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain -DEPRECATED_MSG_ATTRIBUTE( - "This method is deprecated. Please use the new method with support for " - "domainUriPrefix- initWithLink:domainURIPrefix."); +- (instancetype)initWithLink:(NSURL *)link + domain:(NSString *)domain + DEPRECATED_MSG_ATTRIBUTE( + "This method is deprecated. Please use the new method with support for " + "domainUriPrefix- initWithLink:domainURIPrefix."); /** * @method componentsWithLink:domain: From 6bea846b51f5d75d2a0d4ddb8bd480ecff88f3a5 Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 12:46:38 -0800 Subject: [PATCH 06/14] Check incoming domainURIPrefix for validity using NSURL and check for an https scheme. --- .../FDLURLComponents/FDLURLComponents.m | 21 +++++++++++++++---- Firebase/DynamicLinks/Logging/FDLLogging.h | 3 ++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index 27793217728..a51903562d2 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -462,8 +462,14 @@ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { #pragma mark Initializers. + (instancetype)componentsWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURIPrefix { - if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { - FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, + NSURL *domainURIPrefixURL = [NSURL URLWithString:domainURIPrefix]; + if (!domainURIPrefixURL) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefix, + @"Invalid domainURIPrefix. Please input a valid URL."); + return nil; + } + if (![[domainURIPrefixURL.scheme lowercaseString] hasPrefix:@"https"]) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; } @@ -474,8 +480,15 @@ - (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURI self = [super init]; if (self) { _link = link; - if (![[domainURIPrefix lowercaseString] hasPrefix:@"https://"]) { - FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainScheme, + /// Must be a URL that conforms to RFC 2396. + NSURL *domainURIPrefixURL = [NSURL URLWithString:domainURIPrefix]; + if (!domainURIPrefixURL) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefix, + @"Invalid domainURIPrefix. Please input a valid URL."); + return nil; + } + if (![[domainURIPrefixURL.scheme lowercaseString] hasPrefix:@"https"]) { + FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; } diff --git a/Firebase/DynamicLinks/Logging/FDLLogging.h b/Firebase/DynamicLinks/Logging/FDLLogging.h index efd8fedeed0..084fcb0df3a 100644 --- a/Firebase/DynamicLinks/Logging/FDLLogging.h +++ b/Firebase/DynamicLinks/Logging/FDLLogging.h @@ -33,7 +33,8 @@ typedef NS_ENUM(NSInteger, FDLLogIdentifier) { FDLLogIdentifierSetupNilAPIKey = 0, FDLLogIdentifierSetupNilClientID = 1, FDLLogIdentifierSetupNonDefaultApp = 2, - FDLLogIdentifierSetupInvalidDomainScheme = 3, + FDLLogIdentifierSetupInvalidDomainURIPrefixScheme = 3, + FDLLogIdentifierSetupInvalidDomainURIPrefix = 4, }; /** The appropriate formatter for using NSInteger in FIRLogger. */ From d7ef90dec0d75f06dd45530c0095efbc505b7bdc Mon Sep 17 00:00:00 2001 From: Mandar Date: Tue, 13 Nov 2018 22:14:23 -0800 Subject: [PATCH 07/14] Add extra checks for deprecated domain parameter being incorrectly called with a scheme. Also fix some nits. --- .../Tests/FDLURLComponentsTests.m | 36 +++++++++++++++++++ .../FDLURLComponents/FDLURLComponents.m | 8 +++-- .../DynamicLinks/Public/FDLURLComponents.h | 4 +-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m index 64f7d21a1d1..c7fa6f6bc8b 100644 --- a/Example/DynamicLinks/Tests/FDLURLComponentsTests.m +++ b/Example/DynamicLinks/Tests/FDLURLComponentsTests.m @@ -675,6 +675,42 @@ - (void)testShortenURL { [componentsClassMock stopMocking]; } +- (void)testDeprecatedMethodComponentsWithLinkForDomain { + NSString *shortURLString = @"https://xyz.page.link/abcd"; + + // Mock key provider + id keyProviderClassMock = OCMClassMock([FIRDynamicLinkComponentsKeyProvider class]); + [[[keyProviderClassMock expect] andReturn:@"fake-api-key"] APIKey]; + + id componentsClassMock = OCMClassMock([FIRDynamicLinkComponents class]); + [[componentsClassMock expect] + sendHTTPRequest:OCMOCK_ANY + completion:[OCMArg checkWithBlock:^BOOL(id obj) { + void (^completion)(NSData *_Nullable, NSError *_Nullable) = obj; + NSDictionary *JSON = @{@"shortLink" : shortURLString}; + NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:0]; + completion(JSONData, nil); + return YES; + }]]; + + XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"]; + NSURL *link = [NSURL URLWithString:@"https://google.com/abc"]; + FIRDynamicLinkComponents *components = + [FIRDynamicLinkComponents componentsWithLink:link domain:@"xyz.page.link"]; + [components + shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray *_Nullable warnings, + NSError *_Nullable error) { + XCTAssertEqualObjects(shortURL.absoluteString, shortURLString); + [expectation fulfill]; + }]; + [self waitForExpectationsWithTimeout:0.1 handler:nil]; + + [keyProviderClassMock verify]; + [keyProviderClassMock stopMocking]; + [componentsClassMock verify]; + [componentsClassMock stopMocking]; +} + - (void)testShortenURLReturnsErrorWhenAPIKeyMissing { NSString *shortURLString = @"https://xyz.page.link/abcd"; diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index a51903562d2..d7ec1d48295 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -451,12 +451,16 @@ @implementation FIRDynamicLinkComponents #pragma mark Deprecated Initializers. + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { - NSString *domainURIPrefix = [NSString stringWithFormat:@"https://%@", domain]; + NSURL *domainURL = [NSURL URLWithString:domain]; + NSString *domainURIPrefix = + domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain]; return [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:domainURIPrefix]; } - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { - NSString *domainURIPrefix = [NSString stringWithFormat:@"https://%@", domain]; + NSURL *domainURL = [NSURL URLWithString:domain]; + NSString *domainURIPrefix = + domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain]; return [self initWithLink:link domainURIPrefix:domainURIPrefix]; } diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index b09cc86e82b..20fdd9ba6f5 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -518,7 +518,7 @@ FIR_SWIFT_NAME(DynamicLinkComponents) domain:(NSString *)domain NS_SWIFT_UNAVAILABLE("Use init(link:domain:)")DEPRECATED_MSG_ATTRIBUTE( "This method is deprecated. Please use the new method with support for " - "domainUriPrefix- componentsWithLink:domainURIPrefix."); + "domainURIPrefix- componentsWithLink:domainURIPrefix."); /** * @method initWithLink:domain: @@ -533,7 +533,7 @@ FIR_SWIFT_NAME(DynamicLinkComponents) domain:(NSString *)domain DEPRECATED_MSG_ATTRIBUTE( "This method is deprecated. Please use the new method with support for " - "domainUriPrefix- initWithLink:domainURIPrefix."); + "domainURIPrefix- initWithLink:domainURIPrefix."); /** * @method componentsWithLink:domain: From 0bcf156195795e436321f8fbaabffc8ce4a7677c Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 10:52:55 -0800 Subject: [PATCH 08/14] Log a warning for the deprecated API stating that the scheme for the supplied domain will be deduced as https. --- .../DynamicLinks/FDLURLComponents/FDLURLComponents.m | 12 ++++++++++-- Firebase/DynamicLinks/Logging/FDLLogging.h | 1 + Firebase/DynamicLinks/Public/FDLURLComponents.h | 6 ++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index d7ec1d48295..27c388a51e4 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -452,6 +452,10 @@ @implementation FIRDynamicLinkComponents #pragma mark Deprecated Initializers. + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { NSURL *domainURL = [NSURL URLWithString:domain]; + if (!domainURL.scheme) { + FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHttpsScheme, + @"Only https scheme is allowed. The supplied domain's scheme will be treated as https."); + } NSString *domainURIPrefix = domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain]; return [FIRDynamicLinkComponents componentsWithLink:link domainURIPrefix:domainURIPrefix]; @@ -459,6 +463,10 @@ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { NSURL *domainURL = [NSURL URLWithString:domain]; + if (!domainURL.scheme) { + FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHttpsScheme, + @"Only https scheme is allowed. The supplied domain's scheme will be treated as https."); + } NSString *domainURIPrefix = domainURL.scheme ? domain : [NSString stringWithFormat:@"https://%@", domain]; return [self initWithLink:link domainURIPrefix:domainURIPrefix]; @@ -472,7 +480,7 @@ + (instancetype)componentsWithLink:(NSURL *)link domainURIPrefix:(NSString *)dom @"Invalid domainURIPrefix. Please input a valid URL."); return nil; } - if (![[domainURIPrefixURL.scheme lowercaseString] hasPrefix:@"https"]) { + if (![[domainURIPrefixURL.scheme lowercaseString] isEqualToString:@"https"]) { FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; @@ -491,7 +499,7 @@ - (instancetype)initWithLink:(NSURL *)link domainURIPrefix:(NSString *)domainURI @"Invalid domainURIPrefix. Please input a valid URL."); return nil; } - if (![[domainURIPrefixURL.scheme lowercaseString] hasPrefix:@"https"]) { + if (![[domainURIPrefixURL.scheme lowercaseString] isEqualToString:@"https"]) { FDLLog(FDLLogLevelError, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme, @"Invalid domainURIPrefix scheme. Scheme needs to be https"); return nil; diff --git a/Firebase/DynamicLinks/Logging/FDLLogging.h b/Firebase/DynamicLinks/Logging/FDLLogging.h index 084fcb0df3a..6e265b926e0 100644 --- a/Firebase/DynamicLinks/Logging/FDLLogging.h +++ b/Firebase/DynamicLinks/Logging/FDLLogging.h @@ -35,6 +35,7 @@ typedef NS_ENUM(NSInteger, FDLLogIdentifier) { FDLLogIdentifierSetupNonDefaultApp = 2, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme = 3, FDLLogIdentifierSetupInvalidDomainURIPrefix = 4, + FDLLogIdentifierSetupWarnHttpsScheme = 5, }; /** The appropriate formatter for using NSInteger in FIRLogger. */ diff --git a/Firebase/DynamicLinks/Public/FDLURLComponents.h b/Firebase/DynamicLinks/Public/FDLURLComponents.h index 20fdd9ba6f5..a06dc5a1585 100644 --- a/Firebase/DynamicLinks/Public/FDLURLComponents.h +++ b/Firebase/DynamicLinks/Public/FDLURLComponents.h @@ -512,7 +512,8 @@ FIR_SWIFT_NAME(DynamicLinkComponents) * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of * the Dynamic link. * @param domain Domain of your App. This value must be equal to your assigned domain from Firebase - * Console. + * Console. (e.g. xyz.page.link). Note that the domain scheme is required to be https and is + * assumed as such by this API. */ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain @@ -527,7 +528,8 @@ FIR_SWIFT_NAME(DynamicLinkComponents) * @param link Deep link to be stored in created Dynamic link. This link also called "payload" of * the Dynamic link. * @param domain Domain of your App. This value must be equal to your assigned domain from Firebase - * Console. + * Console. (e.g. xyz.page.link). Note that the domain scheme is required to be https and is + * assumed as such by this API. */ - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain From 4cc724853c5ffdd335bc20ce4c64b2e74fc928db Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 12:30:23 -0800 Subject: [PATCH 09/14] Update CHANGELOG for M38. --- Firebase/DynamicLinks/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Firebase/DynamicLinks/CHANGELOG.md b/Firebase/DynamicLinks/CHANGELOG.md index f0872de9b54..5746cdf5dcb 100644 --- a/Firebase/DynamicLinks/CHANGELOG.md +++ b/Firebase/DynamicLinks/CHANGELOG.md @@ -1,3 +1,6 @@ +# v3.2.0 +- Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. + # v3.1.2 - Delete deprecated source files. (#2038) From 282c5b0aa514e03fd2633909a288eeb4d8525cca Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 12:37:29 -0800 Subject: [PATCH 10/14] Update changelog for M38 --- Firebase/DynamicLinks/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firebase/DynamicLinks/CHANGELOG.md b/Firebase/DynamicLinks/CHANGELOG.md index 5746cdf5dcb..a40ffbb61c1 100644 --- a/Firebase/DynamicLinks/CHANGELOG.md +++ b/Firebase/DynamicLinks/CHANGELOG.md @@ -1,5 +1,5 @@ # v3.2.0 -- Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. +- Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. (#2078) # v3.1.2 - Delete deprecated source files. (#2038) From 8551fad487cac47a910dbf62f4ff8157e7f29e8d Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 12:42:09 -0800 Subject: [PATCH 11/14] Update CHANGELOG for M38 release. --- Firebase/DynamicLinks/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firebase/DynamicLinks/CHANGELOG.md b/Firebase/DynamicLinks/CHANGELOG.md index a40ffbb61c1..c20a1e83ca4 100644 --- a/Firebase/DynamicLinks/CHANGELOG.md +++ b/Firebase/DynamicLinks/CHANGELOG.md @@ -1,5 +1,5 @@ # v3.2.0 -- Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. (#2078) +- Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. (#1962, #2017, #2078) # v3.1.2 - Delete deprecated source files. (#2038) From f043ee8cbab4b98cc3bbc201aa1c8758219a889c Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 13:44:14 -0800 Subject: [PATCH 12/14] Capitalize HTTPS. --- Firebase/DynamicLinks/Logging/FDLLogging.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firebase/DynamicLinks/Logging/FDLLogging.h b/Firebase/DynamicLinks/Logging/FDLLogging.h index 6e265b926e0..2d0efc572e2 100644 --- a/Firebase/DynamicLinks/Logging/FDLLogging.h +++ b/Firebase/DynamicLinks/Logging/FDLLogging.h @@ -35,7 +35,7 @@ typedef NS_ENUM(NSInteger, FDLLogIdentifier) { FDLLogIdentifierSetupNonDefaultApp = 2, FDLLogIdentifierSetupInvalidDomainURIPrefixScheme = 3, FDLLogIdentifierSetupInvalidDomainURIPrefix = 4, - FDLLogIdentifierSetupWarnHttpsScheme = 5, + FDLLogIdentifierSetupWarnHTTPSScheme = 5, }; /** The appropriate formatter for using NSInteger in FIRLogger. */ From 57bbac5f0f264ce0ca5f20fa3ddb7a156bb6f8c2 Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 13:47:29 -0800 Subject: [PATCH 13/14] Update CHANGELOG to include PR for removal of deprecated files. --- Firebase/DynamicLinks/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Firebase/DynamicLinks/CHANGELOG.md b/Firebase/DynamicLinks/CHANGELOG.md index c20a1e83ca4..79655c21b1b 100644 --- a/Firebase/DynamicLinks/CHANGELOG.md +++ b/Firebase/DynamicLinks/CHANGELOG.md @@ -1,7 +1,5 @@ # v3.2.0 - Add support for creating and receiving dynamic links from custom domains. This feature is not yet available for public consumption. (#1962, #2017, #2078) - -# v3.1.2 - Delete deprecated source files. (#2038) # v3.1.1 From 8e26357861a387fbd6128366c71ce2c3d1ffcfc1 Mon Sep 17 00:00:00 2001 From: Mandar Date: Wed, 14 Nov 2018 13:56:02 -0800 Subject: [PATCH 14/14] Capitalize HTTPS. --- Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m index 27c388a51e4..2fe4323bbba 100644 --- a/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m +++ b/Firebase/DynamicLinks/FDLURLComponents/FDLURLComponents.m @@ -453,7 +453,7 @@ @implementation FIRDynamicLinkComponents + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { NSURL *domainURL = [NSURL URLWithString:domain]; if (!domainURL.scheme) { - FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHttpsScheme, + FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHTTPSScheme, @"Only https scheme is allowed. The supplied domain's scheme will be treated as https."); } NSString *domainURIPrefix = @@ -464,7 +464,7 @@ + (instancetype)componentsWithLink:(NSURL *)link domain:(NSString *)domain { - (instancetype)initWithLink:(NSURL *)link domain:(NSString *)domain { NSURL *domainURL = [NSURL URLWithString:domain]; if (!domainURL.scheme) { - FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHttpsScheme, + FDLLog(FDLLogLevelWarning, FDLLogIdentifierSetupWarnHTTPSScheme, @"Only https scheme is allowed. The supplied domain's scheme will be treated as https."); } NSString *domainURIPrefix =