Zaktualizowano 18. maja 2023 przez Jan Bunk
Niektóre strony lub ich funkcje działają tylko w zaufanych środowiskach przeglądarki. WebView, z którego korzysta Twoja aplikacja do wyświetlania strony, nie jest uznawany za zaufany. Wynika to z tego, że funkcje, które umożliwiają nam stworzenie atrakcyjnej i konfigurowalnej aplikacji, mogłyby zostać wykorzystane w złych celach. Oczywiście nasze aplikacje nie wykonują ani nie pozwalają na takie działania, ale niektóre strony ograniczają wszystkie WebView właśnie przez to teoretyczne ryzyko.
Aby tego uniknąć, możesz otwierać części swojej strony, które nie działają w WebView, w tzw. custom tabach.
Jeśli Twoja strona oferuje logowanie przez Google (lub Apple, Facebook, Twitter itd.), to może ono działać tylko w custom tabie. Facebook jasno mówi, że logowanie w WebView jest zabronione, a niektóre inne po prostu nie działają.
Oto 2 zrzuty ekranu z naszej aplikacji na Androidzie, żebyś mógł zobaczyć różnicę między otwarciem strony w aplikacji a w custom tabie.
executeWhenAppReady()
w naszym pomocniczym skrypcie aplikacji. Zapewnia, że Twoja strona nie próbuje komunikować się z aplikacją zanim będzie gotowa lub gdy strona jest otwarta w zwykłej przeglądarce (ReferenceError, funkcja nie jest zdefiniowana).
<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>
Oto kilka przykładów, jak możesz zaimplementować logowanie z użyciem custom tabów.
Główny problem polega na tym, że chcemy zalogować użytkownika w aplikacji (bo z niej chce korzystać), ale musi on podać dane logowania w custom tabie, który ma osobne ciasteczka (a to tam zwykle przechowujesz informację o zalogowaniu).
To prawdopodobnie najprostszy sposób logowania przez custom taba. Pamiętaj, żeby nie ustawiać ciasteczek, które mają być przekazane do aplikacji, jako HttpOnly, bo ciasteczka HttpOnly nie są dostępne przez JavaScript.
Ta metoda logowania jest bardziej skomplikowana, ale też bardziej elastyczna, więc może być lepsza w zależności od Twojego przypadku.
Strony otwarte w custom tabie zachowują się tak, jakby były otwarte w przeglądarce użytkownika, co oznacza, że funkcje specyficzne dla aplikacji nie będą działać, na przykład:
getAppPlatform
executeWhenAppReady
- Ale to nie problem, wszystkie funkcje pomocnicze aplikacji do obsługi custom tabów nie muszą czekać, aż aplikacja będzie gotowa.