Uppdaterad den 18. maj 2023 av Jan Bunk
Vissa webbplatser eller webbplatsfunktioner fungerar endast i betrodda webbläsarmiljöer. En WebView som din app använder för att visa din webbplats anses inte vara tillförlitlig. Det beror på att de funktioner som vi använder för att erbjuda dig en visuellt tilltalande och anpassningsbar app kan missbrukas i onda syften. Självklart utför eller tillåter våra appar inte sådana skadliga åtgärder, men vissa webbplatser begränsar alla WebViews på grund av denna teoretiska risk.
För att undvika detta kan du öppna delar av din webbplats som inte fungerar i WebViews i så kallade anpassade flikar.
Om din webbplats har en funktion "Logga in med Google" (eller Apple, Facebook, Twitter osv.) kanske den bara fungerar i en anpassad flik. Facebook säger tydligt att inloggning i WebViews inte är tillåten, medan vissa av de andra helt enkelt inte fungerar.
Här är två skärmdumpar från vår Android-app så att du kan se skillnaden mellan att öppna en sida i appen och i en anpassad flik.
executeWhenAppReady()
-funktionen i vårt hjälparskript för appen. Det säkerställer att din webbplats inte försöker interagera med appen innan den är redo eller när din webbplats laddas med en vanlig webbläsare (ReferenceError, funktionen är inte definierad).
<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>
Här är några exempel på hur du kan implementera ett inloggningsflöde med anpassade flikar.
Huvudproblemet är alltid att vi vill logga in användaren i appen (eftersom det är det som användaren vill använda), men de måste ange sina inloggningsuppgifter i den anpassade fliken som har separata cookies (där du vanligtvis lagrar om någon är inloggad).
Detta är förmodligen det enklaste sättet att logga in med en anpassad flik. Tänk på att inte ställa in de cookies som måste överföras till appen som HttpOnly, eftersom HttpOnly-cookies inte kan nås via JavaScript.
Öppna diagrammet i ett nytt fönsterDenna inloggningsmetod är mer komplicerad men mer flexibel, så den kan vara att föredra beroende på hur du använder den.
Öppna diagrammet i ett nytt fönsterSidor som laddas i en anpassad flik beter sig som om de laddades i användarens webbläsare, vilket innebär att appspecifika funktioner inte fungerar, till exempel:
getAppPlatform
executeWhenAppReady
- Men det är inget problem, alla apphjälparfunktioner för att hantera anpassade flikar behöver inte vänta på att appen ska vara klar.