Skip to content

Commit 6273509

Browse files
Callback should be on main thread (#7159)
Co-authored-by: Maksym Malyhin <[email protected]>
1 parent c292354 commit 6273509

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
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] New callback added in 7.3.0 should be on the main thread. (#7159)
3+
14
# v7.3.0
25
- [added] Manually created dynamic links should be subject to allowed/blocked check (#5853)
36

FirebaseDynamicLinks/Sources/FIRDynamicLinks.m

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,16 @@ - (nullable FIRDynamicLink *)dynamicLinkFromCustomSchemeURL:(NSURL *)url {
401401
dynamicLinkInternalFromUniversalLinkURL:(NSURL *)url
402402
completion:
403403
(nullable FIRDynamicLinkUniversalLinkHandler)completion {
404+
// Make sure the completion is always called on the main queue.
405+
FIRDynamicLinkUniversalLinkHandler mainQueueCompletion =
406+
^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) {
407+
if (completion) {
408+
dispatch_async(dispatch_get_main_queue(), ^{
409+
completion(dynamicLink, error);
410+
});
411+
}
412+
};
413+
404414
if ([self canParseUniversalLinkURL:url]) {
405415
if (url.query.length > 0) {
406416
NSDictionary *parameters = FIRDLDictionaryFromQuery(url.query);
@@ -418,9 +428,7 @@ - (nullable FIRDynamicLink *)dynamicLinkFromCustomSchemeURL:(NSURL *)url {
418428
resolveShortLink:url
419429
FDLSDKVersion:FIRFirebaseVersion()
420430
completion:^(NSURL *_Nullable resolverURL, NSError *_Nullable resolverError) {
421-
if (completion) {
422-
completion(dynamicLink, resolverError);
423-
}
431+
mainQueueCompletion(dynamicLink, resolverError);
424432
}];
425433
#ifdef GIN_SCION_LOGGING
426434
FIRDLLogEventToScion(FIRDLLogEventAppOpen, parameters[kFIRDLParameterSource],
@@ -432,9 +440,7 @@ - (nullable FIRDynamicLink *)dynamicLinkFromCustomSchemeURL:(NSURL *)url {
432440
}
433441
}
434442
}
435-
if (completion) {
436-
completion(nil, nil);
437-
}
443+
mainQueueCompletion(nil, nil);
438444
return nil;
439445
}
440446

FirebaseDynamicLinks/Tests/Unit/FIRDynamicLinksTest.m

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithCustomDomainLink {
518518
dynamicLinkFromUniversalLinkURL:durabledeepLinkURL
519519
completion:^(FIRDynamicLink *_Nullable dynamicLink,
520520
NSError *_Nullable error) {
521+
XCTAssertTrue([NSThread isMainThread]);
521522
XCTAssertNotNil(dynamicLink);
522523
NSString *deepLinkURLString = dynamicLink.url.absoluteString;
523524

@@ -559,6 +560,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithSpecialCharacters {
559560
dynamicLinkFromUniversalLinkURL:durabledeepLinkURL
560561
completion:^(FIRDynamicLink *_Nullable dynamicLink,
561562
NSError *_Nullable error) {
563+
XCTAssertTrue([NSThread isMainThread]);
562564
NSString *deepLinkURLString = dynamicLink.url.absoluteString;
563565

564566
XCTAssertEqualObjects(
@@ -599,6 +601,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionWithEncodedCharacters {
599601
dynamicLinkFromUniversalLinkURL:durabledeepLinkURL
600602
completion:^(FIRDynamicLink *_Nullable dynamicLink,
601603
NSError *_Nullable error) {
604+
XCTAssertTrue([NSThread isMainThread]);
602605
NSString *deepLinkURLString = dynamicLink.url.absoluteString;
603606

604607
XCTAssertEqualObjects(
@@ -649,6 +652,7 @@ - (void)testUniversalLinkWithCompletion_DeepLink {
649652
dynamicLinkFromUniversalLinkURL:url
650653
completion:^(FIRDynamicLink *_Nullable dynamicLink,
651654
NSError *_Nullable error) {
655+
XCTAssertTrue([NSThread isMainThread]);
652656
XCTAssertEqual(dynamicLink.matchConfidence,
653657
FIRDynamicLinkMatchConfidenceStrong);
654658
XCTAssertEqualObjects(dynamicLink.url.absoluteString, deepLinkString);
@@ -697,6 +701,7 @@ - (void)testUniversalLinkWithCompletion_DeepLinkWithParameters {
697701
[self.service dynamicLinkFromUniversalLinkURL:url
698702
completion:^(FIRDynamicLink *_Nullable dynamicLink,
699703
NSError *_Nullable error) {
704+
XCTAssertTrue([NSThread isMainThread]);
700705
XCTAssertEqual(dynamicLink.matchConfidence,
701706
FIRDynamicLinkMatchConfidenceStrong);
702707
XCTAssertEqualObjects(dynamicLink.url.absoluteString,
@@ -861,6 +866,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLWithNilMinimumVers
861866
dynamicLinkFromUniversalLinkURL:url
862867
completion:^(FIRDynamicLink *_Nullable dynamicLink,
863868
NSError *_Nullable error) {
869+
XCTAssertTrue([NSThread isMainThread]);
864870
NSString *minVersion = dynamicLink.minimumAppVersion;
865871

866872
XCTAssertNil(minVersion, @"Min app version was not nil when not set.");
@@ -907,6 +913,7 @@ - (void)testDynamicLinkFromUniversalLinkURLCompletionReturnsDLMinimumVersion {
907913
dynamicLinkFromUniversalLinkURL:url
908914
completion:^(FIRDynamicLink *_Nullable dynamicLink,
909915
NSError *_Nullable error) {
916+
XCTAssertTrue([NSThread isMainThread]);
910917
NSString *minVersion = dynamicLink.minimumAppVersion;
911918

912919
XCTAssertEqualObjects(expectedMinVersion, minVersion,
@@ -953,6 +960,7 @@ - (void)testUniversalLinkWithCompletionWithSubdomain_DeepLink {
953960
dynamicLinkFromUniversalLinkURL:url
954961
completion:^(FIRDynamicLink *_Nullable dynamicLink,
955962
NSError *_Nullable error) {
963+
XCTAssertTrue([NSThread isMainThread]);
956964
XCTAssertEqual(dynamicLink.matchConfidence,
957965
FIRDynamicLinkMatchConfidenceStrong);
958966
XCTAssertEqualObjects(dynamicLink.url.absoluteString, deepLinkString);
@@ -996,6 +1004,7 @@ - (void)testUniversalLinkWithCompletionWithSubdomain_DeepLinkWithParameters {
9961004
[self.service dynamicLinkFromUniversalLinkURL:url
9971005
completion:^(FIRDynamicLink *_Nullable dynamicLink,
9981006
NSError *_Nullable error) {
1007+
XCTAssertTrue([NSThread isMainThread]);
9991008
XCTAssertEqual(dynamicLink.matchConfidence,
10001009
FIRDynamicLinkMatchConfidenceStrong);
10011010
XCTAssertEqualObjects(dynamicLink.url.absoluteString,

0 commit comments

Comments
 (0)