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
This commit is contained in:
Saúl Ibarra Corretgé 2019-04-25 17:26:13 +02:00 committed by Saúl Ibarra Corretgé
parent 33f133ac25
commit 85388b8d23
3 changed files with 31 additions and 11 deletions

View File

@ -67,9 +67,9 @@
= [[FIRDynamicLinks dynamicLinks] = [[FIRDynamicLinks dynamicLinks]
handleUniversalLink:userActivity.webpageURL handleUniversalLink:userActivity.webpageURL
completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) {
NSURL *dynamicLinkURL = dynamicLink.url; NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink];
if (dynamicLinkURL) { if (firebaseUrl != nil) {
userActivity.webpageURL = dynamicLinkURL; userActivity.webpageURL = firebaseUrl;
[[JitsiMeet sharedInstance] application:application [[JitsiMeet sharedInstance] application:application
continueUserActivity:userActivity continueUserActivity:userActivity
restorationHandler:restorationHandler]; restorationHandler:restorationHandler];
@ -91,19 +91,20 @@
openURL:(NSURL *)url openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)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; NSURL *openUrl = url;
if ([FIRUtilities appContainsRealServiceInfoPlist]) { if ([FIRUtilities appContainsRealServiceInfoPlist]) {
// Process Firebase Dynamic Links // Process Firebase Dynamic Links
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink != nil) { NSURL *firebaseUrl = [FIRUtilities extractURL:dynamicLink];
NSURL *dynamicLinkURL = dynamicLink.url; if (firebaseUrl != nil) {
if (dynamicLinkURL != nil openUrl = firebaseUrl;
&& (dynamicLink.matchType == FIRDLMatchTypeUnique
|| dynamicLink.matchType == FIRDLMatchTypeDefault)) {
// Strong match, process it.
openUrl = dynamicLinkURL;
}
} }
} }

View File

@ -16,8 +16,12 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@import Firebase;
@interface FIRUtilities : NSObject @interface FIRUtilities : NSObject
+ (BOOL)appContainsRealServiceInfoPlist; + (BOOL)appContainsRealServiceInfoPlist;
+ (NSURL *_Nullable)extractURL: (FIRDynamicLink* _Nullable)dynamicLink;
@end @end

View File

@ -61,4 +61,19 @@ NSString *const kGoogleAppIDPlistKey = @"GOOGLE_APP_ID";
return YES; 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 @end