Aggiornato il 18. maggio 2023 da Jan Bunk
Alcuni siti web o funzioni di siti web funzionano solo in ambienti browser affidabili. Una WebView come quella utilizzata dalla tua applicazione per visualizzare il tuo sito web non è considerata affidabile. Questo perché le funzionalità che utilizziamo per offrirti un'applicazione visivamente accattivante e personalizzabile potrebbero essere abusate per scopi loschi. Ovviamente le nostre app non eseguono o consentono tali azioni, ma alcuni siti web limitano tutte le WebView a causa di questo rischio teorico.
Per evitarlo, puoi aprire le parti del tuo sito web che non funzionano nelle WebView nelle cosiddette schede personalizzate.
Se il tuo sito web prevede la funzione "Accedi con Google" (o Apple, Facebook, Twitter, ecc.), potrebbe funzionare solo in una scheda personalizzata. Facebook dice chiaramente che l'accesso nelle WebView non è consentito, mentre altri siti semplicemente non funzionano.
Ecco due screenshot della nostra applicazione Android per farti vedere la differenza tra l'apertura di una pagina nell'app e in una scheda personalizzata.
executeWhenAppReady()
del nostro helper script per le app. Assicura che il tuo sito web non cerchi di interagire con l'applicazione prima che sia pronta o quando il sito web viene caricato con un normale browser (ReferenceError, function is not defined).
<script>
openCustomTab("https://webtoapp.design/user/login", {
"myFirstValue": "abc",
"myNumbers": "123"
});
</script>
<script>
if (isInCustomTab()) {
// continue with the next steps...
}
</script>
<script>
// this is the data you passed as a second parameter to openCustomTab, so in our example from above:
// {
// "myFirstValue": "abc",
// "myNumbers": "123"
// }
let myData = getCustomTabData();
</script>
<script>
closeCustomTab({
"somedata": "mydata",
"moredata": {
"test": "myvalue"
}
})
</script>
<script>
document.addEventListener("customTabClosed", function (e) {
if ("reason" in e.detail) {
// currently only supports the reason "closed manually"
console.log("The custom tab was " + e.detail.reason);
}
else {
// the custom tab was closed by the website javascript
// this is the data you passed to closeCustomTab, so in our example from above:
// {
// "somedata": "mydata",
// "moredata": {
// "test": "myvalue"
// }
let returnedData = e.detail;
}
});
</script>
Ecco alcuni esempi di come potresti implementare un flusso di accessi con schede personalizzate.
Il problema principale è sempre quello di voler registrare l'utente nell'app (perché è quello che l'utente vuole usare), ma l'utente deve inserire i suoi dati di accesso nella scheda personalizzata che ha dei cookie separati (che di solito è dove si memorizza se qualcuno è connesso).
Questo è probabilmente il modo più semplice per effettuare l'accesso con una scheda personalizzata. Ricorda di non impostare i cookie che devono essere trasferiti all'applicazione come HttpOnly, perché i cookie HttpOnly non sono accessibili tramite JavaScript.
Apri il diagramma in una nuova finestraQuesto metodo di accesso è più complicato ma più flessibile, quindi potrebbe essere preferibile a seconda del tuo caso d'uso.
Apri il diagramma in una nuova finestraLe pagine caricate in una scheda personalizzata si comportano come se fossero caricate nel browser dell'utente, il che significa che le funzioni specifiche dell'app non funzioneranno, ad esempio:
getAppPlatform
executeWhenAppReady
- Ma questo non è un problema: tutte le funzioni di aiuto dell'app per gestire le schede personalizzate non hanno bisogno di aspettare che l'app sia pronta.