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