Aktualisiert am 18. Mai 2023 von Jan Bunk
Manche Websites oder Website-Funktionen funktionieren nur in vertrauenswürdigen Browser-Umgebungen. Eine WebView, wie deine App sie zur Anzeige deiner Website verwendet, gilt nicht als vertrauenswürdig. Das liegt daran, dass die Funktionen, die wir nutzen, um dir eine optisch ansprechende und anpassbare App zu bieten, für missbräuchliche Zwecke genutzt werden könnten. Natürlich nutzen unsere Apps diese Funktionen nur für positive Zwecke, aber einige Websites schränken alle WebViews wegen dieses theoretischen Risikos ein.
Um das zu vermeiden, kannst du Teile deiner Website, die nicht in WebViews funktionieren, in sogenannten custom Tabs öffnen.
Wenn deine Website die Funktion "Mit Google anmelden" (oder Apple, Facebook, Twitter usw.) anbietet, funktioniert sie möglicherweise nur in einem custom Tab. Facebook sagt ganz klar, dass das Einloggen in WebViews nicht erlaubt ist, während einige der anderen Seiten einfach nicht funktionieren.
Hier sind 2 Screenshots aus unserer Android-App, damit du den Unterschied zwischen dem Öffnen einer Seite in der App und in einem custom Tab sehen kannst.
executeWhenAppReady()
Funktion von unser App-Helfer-Skript. Es stellt sicher, dass deine Website nicht versucht, mit der App zu interagieren, bevor sie bereit ist oder wenn deine Website mit einem normalen Browser geladen wird (ReferenceError, Funktion ist nicht definiert).
<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>
Hier sind einige Beispiele, wie du einen Login-Prozess mit custom Tabs implementieren kannst.
Das Hauptproblem ist immer, dass wir den Nutzer in der App anmelden wollen (denn das ist es, was der Nutzer nutzen will), aber er muss seine Anmeldedaten im custom Tab eingeben, der separate Cookies hat (in denen normalerweise gespeichert wird, ob jemand angemeldet ist).
Dies ist wahrscheinlich die einfachste Art, sich mit einem benutzerdefinierten Tab anzumelden. Denke daran, die Cookies, die an die App übertragen werden müssen, nicht als HttpOnly zu setzen, da auf HttpOnly-Cookies nicht über JavaScript zugegriffen werden kann.
Diagramm in neuem Fenster öffnenDiese Anmeldemethode ist komplizierter, aber flexibler und kann daher je nach Anwendungsfall vorzuziehen sein.
Diagramm in neuem Fenster öffnenSeiten, die in einem custom Tab geladen werden, verhalten sich so, als wären sie im Browser des Nutzers geladen, was bedeutet, dass app-spezifische Funktionen nicht funktionieren, zum Beispiel:
getAppPlatform
executeWhenAppReady
- Aber das ist kein Problem, denn alle App-Helper Funktionen für den Umgang mit benutzerdefinierten Tabs müssen nicht warten, bis die App bereit ist.