diff --git a/app/core/AppConstants.js b/app/core/AppConstants.js index dee42bfbefb..c94988de971 100644 --- a/app/core/AppConstants.js +++ b/app/core/AppConstants.js @@ -28,6 +28,7 @@ export default { SUPPORTED_NETWORKS: [MAINNET, RINKEBY], }, MM_UNIVERSAL_LINK_HOST: 'metamask.app.link', + MM_DEEP_ITMS_APP_LINK: 'https://metamask.app.link/skAH3BaF99', SAI_ADDRESS: '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', HOMEPAGE_URL: 'https://home.metamask.io/', SHORT_HOMEPAGE_URL: 'MetaMask.io', diff --git a/app/core/DeeplinkManager.js b/app/core/DeeplinkManager.js index 0b010d98457..06c151938ac 100644 --- a/app/core/DeeplinkManager.js +++ b/app/core/DeeplinkManager.js @@ -226,7 +226,8 @@ class DeeplinkManager { const handled = () => (onHandled ? onHandled() : false); - const { MM_UNIVERSAL_LINK_HOST } = AppConstants; + const { MM_UNIVERSAL_LINK_HOST, MM_DEEP_ITMS_APP_LINK } = AppConstants; + const DEEP_LINK_BASE = `${PROTOCOLS.HTTPS}://${MM_UNIVERSAL_LINK_HOST}`; switch (urlObj.protocol.replace(':', '')) { case PROTOCOLS.HTTP: @@ -250,16 +251,34 @@ class DeeplinkManager { return; } else if (PREFIXES[action]) { const url = urlObj.href.replace( - `https://${MM_UNIVERSAL_LINK_HOST}/${action}/`, + `${DEEP_LINK_BASE}/${action}/`, PREFIXES[action], ); // loops back to open the link with the right protocol this.parse(url, { browserCallBack }); } else { - // If it's our universal link don't open it in the browser - if (!action && urlObj.href === `https://${MM_UNIVERSAL_LINK_HOST}/`) + // If it's our universal link or Apple store deep link don't open it in the browser + if ( + (!action && + (urlObj.href === `${DEEP_LINK_BASE}/` || + urlObj.href === DEEP_LINK_BASE)) || + urlObj.href === MM_DEEP_ITMS_APP_LINK + ) return; + // Fix for Apple Store redirect even when app is installed + if (urlObj.href.startsWith(`${DEEP_LINK_BASE}/`)) { + this._handleBrowserUrl( + `${PROTOCOLS.HTTPS}://${urlObj.href.replace( + `${DEEP_LINK_BASE}/`, + '', + )}`, + browserCallBack, + ); + + return; + } + // Normal links (same as dapp) this._handleBrowserUrl(urlObj.href, browserCallBack); } @@ -315,6 +334,12 @@ class DeeplinkManager { params?.autosign, origin, ); + } else if (url.startsWith('metamask://dapp/')) { + try { + this._handleBrowserUrl(urlObj.href.split('metamask://dapp/')[1]); + } catch (e) { + if (e) Alert.alert(strings('deeplink.invalid'), e.toString()); + } } break; default: diff --git a/ios/MetaMask/Info.plist b/ios/MetaMask/Info.plist index 27393ee4a72..3b534004143 100644 --- a/ios/MetaMask/Info.plist +++ b/ios/MetaMask/Info.plist @@ -123,6 +123,7 @@ LSApplicationQueriesSchemes twitter + itms-apps