From b3bebbdc3fc5e4e3bb79d74f47ea412dab4d0a75 Mon Sep 17 00:00:00 2001 From: dmandar Date: Thu, 8 Aug 2019 18:52:28 -0700 Subject: [PATCH] Add support for initializing custom domains without Core. This is required for 1P. (#3540) --- .../DynamicLinks/Tests/FIRDynamicLinksTest.m | 21 +++++++++++++++ Firebase/DynamicLinks/FIRDynamicLinks.m | 27 ++++++++++++++----- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/Example/DynamicLinks/Tests/FIRDynamicLinksTest.m b/Example/DynamicLinks/Tests/FIRDynamicLinksTest.m index 4b53c66afa..e8e4f65a49 100644 --- a/Example/DynamicLinks/Tests/FIRDynamicLinksTest.m +++ b/Example/DynamicLinks/Tests/FIRDynamicLinksTest.m @@ -513,6 +513,27 @@ static NSString *const kInfoPlistCustomDomainsKey = @"FirebaseDynamicLinksCustom XCTAssertNil(dynamicLink, @"invite should be nil since there is no parameter."); } +// Custom domain entries in plist file: +// https://google.com +// https://google.com/one +// https://a.firebase.com/mypath +- (void)testDynamicLinkFromUniversalLinkURLWithCustomDomainLink { + self.service = [[FIRDynamicLinks alloc] init]; + NSString *durableDeepLinkString = @"https://a.firebase.com/mypath/?link=abcd"; + NSURL *durabledeepLinkURL = [NSURL URLWithString:durableDeepLinkString]; + + SwizzleDynamicLinkNetworkingWithMock(); + + FIRDynamicLink *dynamicLink = [self.service dynamicLinkFromUniversalLinkURL:durabledeepLinkURL]; + + XCTAssertNotNil(dynamicLink); + NSString *deepLinkURLString = dynamicLink.url.absoluteString; + + XCTAssertEqualObjects(@"abcd", deepLinkURLString, + @"ddl url parameter and deep link url should be the same"); + UnswizzleDynamicLinkNetworking(); +} + - (void)testDynamicLinkFromUniversalLinkURLWithSpecialCharacters { NSString *durableDeepLinkString = [NSString stringWithFormat:@"https://xyz.page.link/?link=%@", kEncodedComplicatedURLString]; diff --git a/Firebase/DynamicLinks/FIRDynamicLinks.m b/Firebase/DynamicLinks/FIRDynamicLinks.m index af0db47909..90d1c941e4 100644 --- a/Firebase/DynamicLinks/FIRDynamicLinks.m +++ b/Firebase/DynamicLinks/FIRDynamicLinks.m @@ -220,12 +220,7 @@ static const NSInteger FIRErrorCodeDurableDeepLinkFailed = -119; } [NSException raise:kFirebaseDurableDeepLinkErrorDomain format:@"%@", message]; } - // Check to see if FirebaseDynamicLinksCustomDomains array is present. - NSDictionary *infoDictionary = [NSBundle mainBundle].infoDictionary; - NSArray *customDomains = infoDictionary[kInfoPlistCustomDomainsKey]; - if (customDomains) { - FIRDLAddToAllowListForCustomDomainsArray(customDomains); - } + [self checkForCustomDomainEntriesInInfoPlist]; } - (instancetype)initWithAnalytics:(nullable id)analytics { @@ -254,6 +249,26 @@ static const NSInteger FIRErrorCodeDurableDeepLinkFailed = -119; } #endif +#pragma mark - Custom domains + +- (instancetype)init { + self = [super init]; + if (self) { + [self checkForCustomDomainEntriesInInfoPlist]; + } + return self; +} + +// Check for custom domains entry in PLIST file. +- (void)checkForCustomDomainEntriesInInfoPlist { + // Check to see if FirebaseDynamicLinksCustomDomains array is present. + NSDictionary *infoDictionary = [NSBundle mainBundle].infoDictionary; + NSArray *customDomains = infoDictionary[kInfoPlistCustomDomainsKey]; + if (customDomains) { + FIRDLAddToAllowListForCustomDomainsArray(customDomains); + } +} + #pragma mark - First party interface - (BOOL)setUpWithLaunchOptions:(nullable NSDictionary *)launchOptions