Ok, la réponse de @Rinat était presque parfaite.
Il y a un problème avec cette fonction dans la page captcha.
function sendTokenToApp(token) {
var baseUri = decodeURIComponent(location.search.replace(/^\?appurl\=/, ''));
location.href = baseUri + '/?token=' + encodeURIComponent(token);
}
Cela fonctionne avec iOS (Safary), mais il s'avère que Chrome n'autorise pas
location.href
des URLs personnalisées (nous essayions de rediriger l'utilisateur vers une URL personnalisée, exp://192.12.12.31)
Voici donc la nouvelle fonction :
function sendTokenToApp(token) {
var baseUri = decodeURIComponent(location.search.replace(/^\?appurl\=/, ''));
const finalUrl = location.href = baseUri + '/?token=' + encodeURIComponent(token);
const continueBtn = document.querySelector('#continue-btn');
continueBtn.onclick = (event)=>{
window.open(finalUrl,'_blank')
}
continueBtn.style.display = "block";
}
Bien sûr, vous devez ajouter un bouton dans le HTML, afin de pouvoir cliquer dessus.
Voici le code complet :
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>Entering captcha</title>
</head>
<body>
<p style="text-align: center; font-size: 1.2em;">Please, enter captcha for continue<p/>
<button id="continue-btn" style="display:none">Continue to app</button>
<script src="/__/firebase/5.3.1/firebase-app.js"></script>
<script src="/__/firebase/5.3.1/firebase-auth.js"></script>
<script src="/__/firebase/init.js"></script>
<script>
function getToken(callback) {
var container = document.createElement('div');
container.id = 'captcha';
document.body.appendChild(container);
var captcha = new firebase.auth.RecaptchaVerifier('captcha', {
'size': 'normal',
'callback': function(token) {
callback(token);
},
'expired-callback': function() {
callback('');
}
});
captcha.render().then(function() {
captcha.verify();
});
}
function sendTokenToApp(token) {
var baseUri = decodeURIComponent(location.search.replace(/^\?appurl\=/, ''));
const finalUrl = location.href = baseUri + '/?token=' + encodeURIComponent(token);
const continueBtn = document.querySelector('#continue-btn');
continueBtn.onclick = (event)=>{
window.open(finalUrl,'_blank')
}
continueBtn.style.display = "block";
}
document.addEventListener('DOMContentLoaded', function() {
getToken(sendTokenToApp);
});
</script>
</body>
</html>
Cela m'a pris presque 7 heures pour trouver la solution, alors j'espère que cela aidera quelqu'un !
Montage après production :
N'oubliez pas d'ajouter "scheme" : "appName" , vers app.json de l'application expo ou le navigateur ne s'ouvre pas à cause du problème de lien profond.
Lire la suite
https://docs.expo.io/versions/latest/workflow/linking#in-a-standalone-app