mirror of
https://github.com/lil-org/wallet.git
synced 2025-01-04 02:24:39 +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;
|
||||
container.insertBefore(scriptTag, container.children[0]);
|
||||
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) {
|
||||
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 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";
|
||||
var remainingProviders = new Set(["ethereum", "solana", "near"]);
|
||||
|
||||
@ -101,3 +105,45 @@ function deliverResponseToSpecificProvider(id, response, provider) {
|
||||
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")) {
|
||||
return;
|
||||
} 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