diff --git a/Bolts/iOS/BFURL.m b/Bolts/iOS/BFURL.m index 02ffb5b7b1fbfd3c9753b034aad4b91db4eaa0ca..1a13858508f5a268e7b9310045eda5e66e5fb1ba 100644 --- a/Bolts/iOS/BFURL.m +++ b/Bolts/iOS/BFURL.m @@ -54,7 +54,13 @@ FOUNDATION_EXPORT NSString *const BFAppLinkRefererUrl; if (applinkExtras && [applinkExtras isKindOfClass:[NSDictionary class]]) { _appLinkExtras = applinkExtras; } - _targetURL = target ? [NSURL URLWithString:target] : url; + + if (target == nil || (id)target == [NSNull null]) { + _targetURL = url; + } else { + _targetURL = [NSURL URLWithString:target]; + } + _targetQueryParameters = [BFURL queryParametersForURL:_targetURL]; NSDictionary *refererAppLink = _appLinkData[BFAppLinkRefererAppLink]; diff --git a/BoltsTests/AppLinkTests.m b/BoltsTests/AppLinkTests.m index 4decea59525c69d8b33fa42af57b4b804a517475..9c93549dc07dbca9557491b4f82f31864c4e27ca 100644 --- a/BoltsTests/AppLinkTests.m +++ b/BoltsTests/AppLinkTests.m @@ -140,6 +140,15 @@ NSMutableArray *openedUrls = nil; XCTAssertEqualObjects(url.absoluteString, openedURL.inputURL.absoluteString); } +- (void)testOpenedURLWithAppLinkWithNullTarget { + NSURL *url = [NSURL URLWithString:@"bolts://?al_applink_data=%7B%22user_agent%22%3A%22Bolts%20iOS%201.0.0%22%2C%22target_url%22%3anull%7d"]; + + BFURL *openedURL = [BFURL URLWithURL:url]; + XCTAssertEqualObjects(url.absoluteString, openedURL.targetURL.absoluteString); + XCTAssert(openedURL.appLinkData[@"user_agent"]); + XCTAssertEqualObjects(url.absoluteString, openedURL.inputURL.absoluteString); +} + - (void)testOpenedURLWithAppLinkTargetHasQueryParameters { NSURL *url = [NSURL URLWithString:@"bolts://?al_applink_data=%7B%22user_agent%22%3A%22Bolts%20iOS%201.0.0%22%2C%22target_url%22%3A%22http%3A%5C%2F%5C%2Fwww.example.com%5C%2Fpath%3Ffoo%3Dbar%22%7D"];