From c812458eaa019cadf57a87ce438dc20436551ad5 Mon Sep 17 00:00:00 2001 From: Thomas von Hassel Date: Tue, 3 Oct 2017 00:19:40 +0200 Subject: [PATCH 1/4] Respond to applicationContinueUserActivityRestorationHandler for dynamic links from universal links --- firebase.ios.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/firebase.ios.js b/firebase.ios.js index 1a952c04..eab04c2c 100755 --- a/firebase.ios.js +++ b/firebase.ios.js @@ -76,7 +76,20 @@ firebase.addAppDelegateMethods = function (appDelegate) { // there's no notification event to hook into for this one, so using the appDelegate if (typeof(FBSDKApplicationDelegate) !== "undefined" || typeof(GIDSignIn) !== "undefined" || typeof(FIRInvites) !== "undefined" || typeof(FIRDynamicLink) !== "undefined") { - appDelegate.prototype.applicationOpenURLSourceApplicationAnnotation = function (application, url, sourceApplication, annotation) { + + appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { + var result = false; + var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromUniversalLinkURL(userActivity.webpageURL); + if (dynamicLink) { + if (this._dynamicLinkCallback) { + this._dynamicLinkCallback(dynamicLink.url.absoluteString); + } + result = true; + } + return result; + }; + + appDelegate.prototype.applicationOpenURLSourceApplicationAnnotation = function (application, url, sourceApplication, annotation) { var result = false; if (typeof(FBSDKApplicationDelegate) !== "undefined") { result = FBSDKApplicationDelegate.sharedInstance().applicationOpenURLSourceApplicationAnnotation(application, url, sourceApplication, annotation); From 264bec1c66ed67a4cd5457aff5cd1f6ce9de7a24 Mon Sep 17 00:00:00 2001 From: Thomas von Hassel Date: Tue, 3 Oct 2017 08:11:53 +0200 Subject: [PATCH 2/4] check if FIRDynamicLink is available --- firebase.ios.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/firebase.ios.js b/firebase.ios.js index eab04c2c..6a35c409 100755 --- a/firebase.ios.js +++ b/firebase.ios.js @@ -77,14 +77,16 @@ firebase.addAppDelegateMethods = function (appDelegate) { // there's no notification event to hook into for this one, so using the appDelegate if (typeof(FBSDKApplicationDelegate) !== "undefined" || typeof(GIDSignIn) !== "undefined" || typeof(FIRInvites) !== "undefined" || typeof(FIRDynamicLink) !== "undefined") { - appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { + appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { var result = false; - var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromUniversalLinkURL(userActivity.webpageURL); - if (dynamicLink) { - if (this._dynamicLinkCallback) { - this._dynamicLinkCallback(dynamicLink.url.absoluteString); + if (typeof(FIRDynamicLink) !== "undefined") { + var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromUniversalLinkURL(userActivity.webpageURL); + if (dynamicLink) { + if (this._dynamicLinkCallback) { + this._dynamicLinkCallback(dynamicLink.url.absoluteString); + } + result = true; } - result = true; } return result; }; From 98dd41683ae0ec21e9f86762ecd1b7038e2c4347 Mon Sep 17 00:00:00 2001 From: Thomas von Hassel Date: Tue, 3 Oct 2017 14:17:08 +0200 Subject: [PATCH 3/4] fix caching of deep links and _dynamicLinkCallback references --- firebase.ios.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/firebase.ios.js b/firebase.ios.js index 6a35c409..6964613c 100755 --- a/firebase.ios.js +++ b/firebase.ios.js @@ -77,17 +77,16 @@ firebase.addAppDelegateMethods = function (appDelegate) { // there's no notification event to hook into for this one, so using the appDelegate if (typeof(FBSDKApplicationDelegate) !== "undefined" || typeof(GIDSignIn) !== "undefined" || typeof(FIRInvites) !== "undefined" || typeof(FIRDynamicLink) !== "undefined") { - appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { + appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { var result = false; - if (typeof(FIRDynamicLink) !== "undefined") { - var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromUniversalLinkURL(userActivity.webpageURL); - if (dynamicLink) { - if (this._dynamicLinkCallback) { - this._dynamicLinkCallback(dynamicLink.url.absoluteString); - } - result = true; + result = FIRDynamicLinks.dynamicLinks().handleUniversalLinkCompletion(userActivity.webpageURL, (dynamicLink) => { + if (firebase._dynamicLinkCallback) { + firebase._dynamicLinkCallback(dynamicLink.url.absoluteString); + } else { + firebase._cachedDynamicLink = dynamicLink.url.absoluteString; } - } + }); + return result; }; @@ -116,7 +115,7 @@ firebase.addAppDelegateMethods = function (appDelegate) { if (typeof(FIRDynamicLink) !== "undefined") { var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromCustomSchemeURL(url) if (dynamicLink) { - this._cachedDeepLink = dynamicLink.url.absoluteString; + firebase._cachedDynamicLink = dynamicLink.url.absoluteString; result = true; } } @@ -148,10 +147,10 @@ firebase.addAppDelegateMethods = function (appDelegate) { if (dynamicLink) { if (dynamicLink.url !== null) { console.log(">>> dynamicLink.url.absoluteString: " + dynamicLink.url.absoluteString); - if (this._dynamicLinkCallback) { - this._dynamicLinkCallback(dynamicLink.url.absoluteString); + if (firebase._dynamicLinkCallback) { + firebase._dynamicLinkCallback(dynamicLink.url.absoluteString); } else { - this._cachedDeepLink = dynamicLink.url.absoluteString; + firebase._cachedDynamicLink = dynamicLink.url.absoluteString; } result = true; } From f620d3ffded062633bc5d6c941ce4262b85d8c8b Mon Sep 17 00:00:00 2001 From: Thomas von Hassel Date: Wed, 4 Oct 2017 14:47:56 +0200 Subject: [PATCH 4/4] move FIRApp.configure(); into applicationDidFinishLaunchingWithOptions --- firebase.ios.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/firebase.ios.js b/firebase.ios.js index 6964613c..d9ea2c25 100755 --- a/firebase.ios.js +++ b/firebase.ios.js @@ -61,6 +61,12 @@ firebase.addAppDelegateMethods = function (appDelegate) { // we need the launchOptions for this one so it's a bit hard to use the UIApplicationDidFinishLaunchingNotification pattern we're using for other things appDelegate.prototype.applicationDidFinishLaunchingWithOptions = function (application, launchOptions) { // If the app was terminated and the iOS is launching it in result of push notification tapped by the user, this will hold the notification data. + + if (FIROptions.defaultOptions() !== null) { + FIROptions.defaultOptions().deepLinkURLScheme = utils.ios.getter(NSBundle, NSBundle.mainBundle).bundleIdentifier; + } + FIRApp.configure(); + if (launchOptions && typeof(FIRMessaging) !== "undefined") { var remoteNotification = launchOptions.objectForKey(UIApplicationLaunchOptionsRemoteNotificationKey); if (remoteNotification) { @@ -77,14 +83,19 @@ firebase.addAppDelegateMethods = function (appDelegate) { // there's no notification event to hook into for this one, so using the appDelegate if (typeof(FBSDKApplicationDelegate) !== "undefined" || typeof(GIDSignIn) !== "undefined" || typeof(FIRInvites) !== "undefined" || typeof(FIRDynamicLink) !== "undefined") { - appDelegate.prototype.applicationContinueUserActivityRestorationHandler = (application, userActivity, restorationhandler) => { + appDelegate.prototype.applicationContinueUserActivityRestorationHandler = function (application, userActivity, restorationhandler) { var result = false; - result = FIRDynamicLinks.dynamicLinks().handleUniversalLinkCompletion(userActivity.webpageURL, (dynamicLink) => { + console.log('got applicationContinueUserActivityRestorationHandler with '+ userActivity.webpageURL); + result = FIRDynamicLinks.dynamicLinks().handleUniversalLinkCompletion(userActivity.webpageURL, function(dynamicLink) { + if (dynamicLink && dynamicLink.url) { if (firebase._dynamicLinkCallback) { + console.log('applicationContinueUserActivityRestorationHandler with _dynamicLinkCallback') firebase._dynamicLinkCallback(dynamicLink.url.absoluteString); } else { + console.log('applicationContinueUserActivityRestorationHandler without _dynamicLinkCallback') firebase._cachedDynamicLink = dynamicLink.url.absoluteString; } + } }); return result; @@ -115,6 +126,7 @@ firebase.addAppDelegateMethods = function (appDelegate) { if (typeof(FIRDynamicLink) !== "undefined") { var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromCustomSchemeURL(url) if (dynamicLink) { + console.log('applicationOpenURLSourceApplicationAnnotation without _dynamicLinkCallback') firebase._cachedDynamicLink = dynamicLink.url.absoluteString; result = true; } @@ -143,8 +155,10 @@ firebase.addAppDelegateMethods = function (appDelegate) { } if (typeof(FIRDynamicLink) !== "undefined") { + console.log(url); var dynamicLink = FIRDynamicLinks.dynamicLinks().dynamicLinkFromCustomSchemeURL(url) if (dynamicLink) { + console.log('applicationOpenURLOptions' + JSON.stringify(dynamicLink)); if (dynamicLink.url !== null) { console.log(">>> dynamicLink.url.absoluteString: " + dynamicLink.url.absoluteString); if (firebase._dynamicLinkCallback) { @@ -552,10 +566,10 @@ firebase.init = function (arg) { arg = arg || {}; // if deeplinks are used, then for this scheme to work the use must have added the bundle as a scheme to their plist (this is in our docs) - if (FIROptions.defaultOptions() !== null) { - FIROptions.defaultOptions().deepLinkURLScheme = utils.ios.getter(NSBundle, NSBundle.mainBundle).bundleIdentifier; - } - FIRApp.configure(); + // if (FIROptions.defaultOptions() !== null) { + // FIROptions.defaultOptions().deepLinkURLScheme = utils.ios.getter(NSBundle, NSBundle.mainBundle).bundleIdentifier; + // } + // FIRApp.configure(); if (arg.persist) { FIRDatabase.database().persistenceEnabled = true;