mirror of
https://github.com/lil-org/wallet.git
synced 2025-01-06 04:13:11 +03:00
Redirect to iOS app via overlay that opens universal link
This commit is contained in:
parent
bd2c72de59
commit
5e4b32adde
@ -15,6 +15,43 @@ function injectScript() {
|
|||||||
scriptTag.textContent = request.responseText;
|
scriptTag.textContent = request.responseText;
|
||||||
container.insertBefore(scriptTag, container.children[0]);
|
container.insertBefore(scriptTag, container.children[0]);
|
||||||
container.removeChild(scriptTag);
|
container.removeChild(scriptTag);
|
||||||
|
|
||||||
|
const styles = `
|
||||||
|
#tokenary-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
font-size: 50px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: white;
|
||||||
|
background-color: #0093FF;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
height: 200pt;
|
||||||
|
border: none;
|
||||||
|
border-radius: 20pt;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tokenary-overlay {
|
||||||
|
position: fixed;
|
||||||
|
display: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: rgba(0,0,0,0.5);
|
||||||
|
z-index: 2147483647;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const styleSheet = document.createElement("style");
|
||||||
|
styleSheet.innerText = styles;
|
||||||
|
container.insertBefore(styleSheet, container.children[0]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Tokenary: Provider injection failed.', error);
|
console.error('Tokenary: Provider injection failed.', error);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -40,7 +40,11 @@ window.addEventListener("message", function(event) {
|
|||||||
const response = event.data.response;
|
const response = event.data.response;
|
||||||
const id = event.data.id;
|
const id = event.data.id;
|
||||||
|
|
||||||
if ("latestConfigurations" in response) {
|
if ("overlayLink" in response) {
|
||||||
|
window.tokenary.overlayLink = response.overlayLink;
|
||||||
|
// TODO: use queue or map instead;
|
||||||
|
window.tokenary.showOverlay();
|
||||||
|
} else if ("latestConfigurations" in response) {
|
||||||
const name = "didLoadLatestConfiguration";
|
const name = "didLoadLatestConfiguration";
|
||||||
var remainingProviders = new Set(["ethereum", "solana", "near"]);
|
var remainingProviders = new Set(["ethereum", "solana", "near"]);
|
||||||
|
|
||||||
@ -101,3 +105,45 @@ function deliverResponseToSpecificProvider(id, response, provider) {
|
|||||||
window.near.processTokenaryResponse(id, response);
|
window.near.processTokenaryResponse(id, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Tokenary overlay for iOS
|
||||||
|
|
||||||
|
window.tokenary.overlayTapped = () => {
|
||||||
|
window.tokenary.hideOverlay();
|
||||||
|
};
|
||||||
|
|
||||||
|
window.tokenary.hideOverlay = () => {
|
||||||
|
document.getElementById("tokenary-overlay").style.display = "none";
|
||||||
|
// TODO: hide animated when button is tapped
|
||||||
|
};
|
||||||
|
|
||||||
|
window.tokenary.showOverlay = () => {
|
||||||
|
// TODO: show with animation
|
||||||
|
const overlay = document.getElementById("tokenary-overlay");
|
||||||
|
if (overlay) {
|
||||||
|
overlay.style.display = "block";
|
||||||
|
} else {
|
||||||
|
window.tokenary.createOverlay();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.tokenary.createOverlay = () => {
|
||||||
|
const overlay = document.createElement("div");
|
||||||
|
overlay.setAttribute("id", "tokenary-overlay");
|
||||||
|
overlay.setAttribute("ontouchstart", `
|
||||||
|
event.stopPropagation();
|
||||||
|
if (event.target === event.currentTarget) {
|
||||||
|
window.tokenary.overlayTapped();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
|
||||||
|
overlay.innerHTML = `<button id="tokenary-button" onclick="window.tokenary.overlayButtonTapped();">Proceed in Tokenary</button>`;
|
||||||
|
document.body.appendChild(overlay);
|
||||||
|
overlay.style.display = "block";
|
||||||
|
};
|
||||||
|
|
||||||
|
window.tokenary.overlayButtonTapped = () => {
|
||||||
|
window.location.href = window.tokenary.overlayLink;
|
||||||
|
window.tokenary.hideOverlay();
|
||||||
|
};
|
||||||
|
@ -17,6 +17,19 @@ function platformSpecificProcessMessage(message) {
|
|||||||
if (message.provider == "ethereum" && (message.name == "switchEthereumChain" || message.name == "addEthereumChain")) {
|
if (message.provider == "ethereum" && (message.name == "switchEthereumChain" || message.name == "addEthereumChain")) {
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
window.location.href = "tokenary://" + encodeURIComponent(JSON.stringify(message));
|
// TODO: вот тут, где раньше переходили по диплинку, теперь будем показывать оверлей
|
||||||
|
|
||||||
|
// передавать в inpage данные для оверлея:
|
||||||
|
// - universal link, который будем открывать
|
||||||
|
// - текст для кнопки
|
||||||
|
// - данные, достаточные для того, чтобы ответить на запрос ошибкой
|
||||||
|
|
||||||
|
// + если он inpage будет отвечать на запрос ошибкой, то мне нужно будет как-то подчищать тот запрос, который ушел extension handler-у
|
||||||
|
// или на iOS сделать так, чтобы запрос extension handler-у не уходил до того момента, пока он не нажал на overlay кнопку
|
||||||
|
|
||||||
|
const link = "https://tokenary.io/extension?query=" + encodeURIComponent(JSON.stringify(message));
|
||||||
|
const response = {overlayLink: link};
|
||||||
|
window.postMessage({direction: "from-content-script", response: response, id: message.id}, "*");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user