Cambios de WebKit y Safari en iOS 11
iOS 11 presenta una nueva versión del explorador web Safari (Safari 11.0), que incluye cambios en WebKit y SafariServices. En esta guía se exploran estos cambios.
SafariServices
SFSafariViewController
se introdujo en iOS 9 como opción para mostrar contenido web o autenticar a los usuarios en la aplicación. Puede encontrar más información sobre sus características en la guía Vistas web.
iOS 11 ha introducido actualizaciones de estilo en el controlador de vista de Safari, lo que proporciona a los usuarios una experiencia más fluida entre una aplicación y la web. Por ejemplo, la eliminación de la barra de dirección ahora proporciona al controlador de vista de Safari la sensación de un explorador dentro de la aplicación, en lugar de un miniexplorador. También puede personalizar la combinación de colores para que se ajuste a la de la aplicación estableciendo las propiedades preferredBarTintColor
y PreferredControlTintColor
:
sfViewController.PreferredControlTintColor = UIColor.White;
sfViewController.PreferredBarTintColor = UIColor.Purple;
El siguiente fragmento de código representa las barras en color púrpura y blanco, como se muestra en la imagen siguiente:
El botón Descartar presentado en el controlador de vista de Safari también se puede cambiar estableciendo la propiedad DismissButtonStyle
en Done
, Close
o Cancel
:
sfViewController.DismissButtonStyle = SFSafariViewControllerDismissButtonStyle.Close;
Este valor se puede cambiar mientras se presenta SFSafariViewController
.
Dependiendo del contenido que se muestra dentro de un controlador de vista de Safari, puede ser necesario asegurarse de que las barras de menú no se contraen cuando el usuario se desplaza. Para ello, establezca la nueva propiedad BarCollapsedEnabled
en false
:
var config = new SFSafariViewControllerConfiguration();
config.BarCollapsingEnabled = false;
var sfViewController = new SFSafariViewController(url, config);
Apple también ha realizado actualizaciones de la privacidad en el controlador de vista de Safari en iOS 11. Ahora, la exploración de datos, como las cookies y el almacenamiento local, solo existen por aplicación, en lugar de en todas las instancias del controlador de vista de Safari. Esto mantiene privada la actividad de exploración del usuario dentro de la aplicación.
También se han agregado características adicionales, como la compatibilidad con arrastrar y colocar para las direcciones URL y la compatibilidad con window.open()
a SFSafariViewController
en iOS 11. Puede encontrar más información sobre estas nuevas características en la documentación de SFSafariViewController de Apple.
WebKit
WKWebView
se introdujo como parte de WebKit en iOS 8 como medio para mostrar contenido web al usuario. Es mucho más personalizable que SFSafariViewController
, lo que le permite crear su propia interfaz de usuario y navegación.
Apple ha introducido tres mejoras principales para WKWebView
en iOS 11:
- La posibilidad de administrar cookies
- Filtrado de contenido
- La carga de recursos personalizados
La administración de cookies se realiza a través de la nueva clase WKHttpCookieStore
, que permite agregar y eliminar cookies, obtener todas las cookies almacenadas en un objeto WKWebView y observar el almacén de cookies para ver si hay cambios.
El filtrado de contenido le permite administrar el tipo de contenido que verá el usuario y así tener la certeza de que es seguro, familiar y, si es necesario, solo está disponible para un grupo de usuarios determinado. Esto se implementa mediante la nueva clase WKContentRuleList
, proporcionando pares de desencadenadores y acciones en JSON. Puede encontrar más información sobre estos desencadenadores y acciones en la guía Reglas de bloqueo de contenido de Apple.
iOS 11 ahora le permite personalizar WKWebView
el contenido web mediante la carga de recursos personalizados. Esto se implementa mediante la interfaz IWKUrlSchemeHandler
, que permite controlar esquemas de direcciones URL que no son nativos de Web Kit. Esta interfaz tiene un método de inicio y detención que se debe implementar:
public class MyHandler : NSObject, IWKUrlSchemeHandler {
[Export("webView:startURLSchemeTask:")]
public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask){
// Implement a IWKUrlSchemeTask here
var response = new NSUrlResponse(urlSchemeTask.Request.Url, "text/html", ContentLength, null);
urlSchemeTask.DidReceiveResponse(response);
urlSchemeTask.DidReceiveData(someData);
urlSchemeTask.DidFinish();
}
[Export("webView:stopURLSchemeTask:")]
public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask){
throw new NotImplementedException();
}
}
Una vez implementado el controlador, úselo para establecer la propiedad SetUrlSchemeHandler
en el objeto WKWebViewConfiguration
. A continuación, cargue la dirección URL de algo que use el esquema personalizado:
var config = new WKWebViewConfiguration();
config.SetUrlSchemeHandler(new MyHandler(), "xamarin-asset");
webView = new WKWebView (View.Frame, config);
webView.LoadRequest (new NSUrlRequest("xamarin-asset://xamarin.com"));