From 85388b8d230a101bbed661709c337fa16216b888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Thu, 25 Apr 2019 17:26:13 +0200 Subject: [PATCH] ios: handle some corner cases with Firebase Dynamic Links - handle some weird bug (https://github.com/firebase/firebase-ios-sdk/issues/233) - use a common function to extract the URL off a dynamic link --- ios/app/src/AppDelegate.m | 23 ++++++++++++----------- ios/app/src/FIRUtilities.h | 4 ++++ ios/app/src/FIRUtilities.m | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/ios/app/src/AppDelegate.m b/ios/app/src/AppDelegate.m index b4d6a24ad..d7acc40d7 100644 --- a/ios/app/src/AppDelegate.m +++ b/ios/app/src/AppDelegate.m @@ -67,9 +67,9 @@ = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { - NSURL *dynamicLinkURL = dynamicLink.url; - if (dynamicLinkURL) { - userActivity.webpageURL = dynamicLinkURL; + NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink]; + if (firebaseUrl != nil) { + userActivity.webpageURL = firebaseUrl; [[JitsiMeet sharedInstance] application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; @@ -91,19 +91,20 @@ openURL:(NSURL *)url options:(NSDictionary *)options { + // This shows up during a reload in development, skip it. + // https://github.com/firebase/firebase-ios-sdk/issues/233 + if ([[url absoluteString] containsString:@"google/link/?dismiss=1&is_weak_match=1"]) { + return NO; + } + NSURL *openUrl = url; if ([FIRUtilities appContainsRealServiceInfoPlist]) { // Process Firebase Dynamic Links FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; - if (dynamicLink != nil) { - NSURL *dynamicLinkURL = dynamicLink.url; - if (dynamicLinkURL != nil - && (dynamicLink.matchType == FIRDLMatchTypeUnique - || dynamicLink.matchType == FIRDLMatchTypeDefault)) { - // Strong match, process it. - openUrl = dynamicLinkURL; - } + NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink]; + if (firebaseUrl != nil) { + openUrl = firebaseUrl; } } diff --git a/ios/app/src/FIRUtilities.h b/ios/app/src/FIRUtilities.h index 8fb01b7d3..3e7906475 100644 --- a/ios/app/src/FIRUtilities.h +++ b/ios/app/src/FIRUtilities.h @@ -16,8 +16,12 @@ #import +@import Firebase; + + @interface FIRUtilities : NSObject + (BOOL)appContainsRealServiceInfoPlist; ++ (NSURL *_Nullable)extractURL: (FIRDynamicLink* _Nullable)dynamicLink; @end diff --git a/ios/app/src/FIRUtilities.m b/ios/app/src/FIRUtilities.m index 0d3f1c015..a8f5b4184 100644 --- a/ios/app/src/FIRUtilities.m +++ b/ios/app/src/FIRUtilities.m @@ -61,4 +61,19 @@ NSString *const kGoogleAppIDPlistKey = @"GOOGLE_APP_ID"; return YES; } ++ (NSURL *)extractURL: (FIRDynamicLink*)dynamicLink { + NSURL *url = nil; + if (dynamicLink != nil) { + NSURL *dynamicLinkURL = dynamicLink.url; + if (dynamicLinkURL != nil + && (dynamicLink.matchType == FIRDLMatchTypeUnique + || dynamicLink.matchType == FIRDLMatchTypeDefault)) { + // Strong match, process it. + url = dynamicLinkURL; + } + } + + return url; +} + @end