
-
Mejora la conectividad de los dispositivos con Wi-Fi Aware
Aprende a crear conexiones de redes entre pares con Wi-Fi Aware. También abarcaremos cómo compartir videos en tiempo real, transferir archivos de gran tamaño y controlar accesorios con un ancho de banda mejorado y una menor latencia. Y aprenderás a usar DeviceDiscoveryUI, AccessorySetupKit y el marco Network para usar Wi-Fi Aware en tu app.
Capítulos
- 0:00 - Introducción
- 1:01 - Descripción general
- 7:46 - Emparejar
- 15:05 - Conectar
- 19:01 - Optimizar
- 22:26 - Lineamientos
Recursos
Videos relacionados
WWDC24
-
Buscar este video…
Hola, soy Swetank. Soy ingeniero del equipo de Wi-Fi. Hoy veremos la estructura Wi-Fi Aware y mostraré cómo puedes usarla para potenciar las interacciones de dispositivo a dispositivo en tus apps. Primero, estableceré las bases con una descripción de Wi-Fi Aware. Luego, analizaré en detalle cómo integrar Wi-Fi Aware en tu app.
Mostraré cómo los dispositivos pueden detectarse y emparejarse de forma segura con las estructuras DeviceDiscoveryUI y AccessorySetupKit. Luego del emparejamiento, analizaré cómo los dispositivos pueden configurar conexiones Wi-Fi Aware con la estructura Network. Una vez conectado, veré cómo monitorear y optimizar el rendimiento de las conexiones Wi-Fi Aware. Por último, hablaré de algunos próximos pasos importantes. Empecemos con una descripción general. Wi-Fi Aware permite la comunicación directa de dispositivo a dispositivo. A diferencia de los modelos tradicionales que dependen de enrutadores o servidores centrales, esto es peer-to-peer.
Estas conexiones son dinámicas y por solicitud. Los dispositivos se encuentran y forman enlaces seguros en tiempo de ejecución. Perfecto para experiencias efímeras locales como compartir archivos o configurar un accesorio. Wi-Fi Aware funciona junto con tu conexión Wi-Fi habitual. Esto significa que los dispositivos permanecen conectados a Internet y a su red local mientras usan simultáneamente Wi-Fi Aware. Wi-Fi Aware es un estándar global mantenido por la Wi-Fi Alliance. Es multiplataforma, interoperable y puede ser adoptado por cualquier fabricante de dispositivos. Con Wi-Fi Aware, puedes desbloquear nuevas experiencias y permitir que tus apps detecten y se conecten sin problemas a dispositivos cercanos. Algunos ejemplos son: transmisión de medios, transferencia de archivos de alta velocidad, control de accesorios, uso compartido de pantalla y, si es necesario, puedes hacer todo esto simultáneamente.
Presentamos Wi-Fi Aware, una nueva estructura que posibilita estas experiencias en iPhone y iPad. Con la estructura, tu app puede conectarse a otros dispositivos Apple, dispositivos de terceros e incluso a accesorios.
Al usar Wi-Fi Aware, tus conexiones están autenticadas y encriptadas en la capa de Wi-Fi, soportan alto rendimiento y baja latencia y coexisten con conexiones a otros dispositivos cercanos al mismo tiempo.
Para usar Wi-Fi Aware, tu app necesita manejar dos flujos de alto nivel. El primer flujo es emparejar un dispositivo.
El emparejamiento es un proceso de configuración único que establece confianza y facilita la comunicación segura. El segundo flujo es conectar dispositivos emparejados. El sistema protege automáticamente la conexión entre dispositivos, incluso el intercambio de claves y el cifrado de enlaces, entonces, no es necesario administrar ningún protocolo de seguridad. Una vez emparejada, tu app puede volver a conectarse de forma segura siempre que tus dispositivos estén cerca y ejecutando activamente tu app. Así, la conexión al dispositivo es fluida, rápida y segura. Ahora veamos cómo configurar tu app para usar Wi-Fi Aware. Comencemos con un concepto central para Wi-Fi Aware: los servicios. Se usan para detectar dispositivos y conectarse a ellos. Piensa en los servicios como funcionalidades específicas que tu app ofrece o consume desde otros dispositivos. Antes de pasar a declarar servicios en tu app, veamos algunas convenciones clave para los servicios.
Un servicio se identifica por su nombre.
Los nombres deben ser únicos, constar solo de letras, números y guiones y no tener más de 15 caracteres.
Un nombre de servicio completo tiene dos partes.
Un nombre único, y un protocolo, que puede ser tcp para servicios que usan TCP o udp para servicios que usan otro protocolo.
Para evitar colisiones entre los nombres de servicio de tus apps y los de otras apps, puedes registrar los nombres de servicio con IANA.
Pasemos ahora a los roles de servicio. Con Wi-Fi Aware, puede haber dos roles para un servicio determinado. El primero es Editor, tu app aloja el servicio allí y actúa como servidor, recepcionando conexiones entrantes de otros dispositivos.
El segundo es Suscriptor, tu app usa el servicio allí y actúa como cliente, buscando otros dispositivos a los que conectarse.
Tu app puede funcionar simultáneamente como editor y suscriptor si es necesario para tus casos de uso.
El Info.plist de tu app especifica los servicios que pretende usar. Para eso, agrega la clave WiFiAwareServices. Este es un diccionario, aquí las claves son nombres de servicios y el valor correspondiente es la configuración de ese servicio. En este ejemplo, la app declara dos servicios: servicio de archivos y de drones.
Cada servicio tiene un diccionario de propiedades de configuración.
Para que un servicio sea Editable, agrega la clave Editable. Para hacerlo Suscribible, agrega la clave Suscribible. En este caso, el servicio de archivos se declara para Editor y Suscriptor. Esto es común cuando se crean casos de uso de app a app.
El servicio de drones solo puede usar Suscriber, un escenario común cuando se desarrolla una app para comunicarse con un accesorio. Considera que tu app solo podrá editar o suscribirse a servicios que se declararon en Info.plist. Ahora, pasemos a algo de código y veamos cómo acceder a las capacidades servicios del dispositivo que se declararon en Info.plist.
Antes de que una app use Wi-Fi Aware, debes verificar si es compatible con el dispositivo. Esto se puede hacer marcando la propiedad supportedFeatures de WACapabilities.
Los servicios publicables definidos en Info.plist están disponibles con WAPublishableService. En este ejemplo, se define una propiedad estática, fileService, para luego facilitar el acceso al servicio. A los servicios suscribibles se accede con WASubscribableService. Se definen dos propiedades estáticas para hacer referencia a fileService y droneService para su uso posterior.
Ya sabes cómo agregar servicios Wi-Fi Aware a tu app, ahora hablemos sobre cómo emparejar dispositivos Wi-Fi Aware. Primero, analicemos cómo se ve el flujo de emparejamiento para quien usa tu app. Como mencioné antes, tu app emparejará dispositivos Wi-Fi Aware antes de usarlos. Tu app puede activar el flujo de emparejamiento invocando a las API para mostrar la IU de emparejamiento del sistema. Para quien usa la app, el emparejamiento tiene un proceso simple.
Primero, se le pedirá que seleccione un dispositivo de una lista de dispositivos cercanos que coincidan con los parámetros ofrecidos por la app.
Luego, se autorizará el emparejamiento con un código PIN proporcionado por el otro dispositivo.
Finalmente, el sistema completará el emparejamiento y avisará a la persona cuando finalizó. Con esto, el dispositivo estará disponible para tu app. Una vez disponible, tu app puede realizar conexiones a ese dispositivo a solicitud sin invocar nuevamente el flujo de emparejamiento.
Hay dos estructuras de sistema disponibles para emparejar dispositivos: DeviceDiscoveryUI y AccessorySetupKit.
DeviceDiscoveryUI sirve para realizar conexiones entre apps y desde una app a otro dispositivo. Admite el emparejamiento con dispositivos Apple y de terceros. AccessorySetupKit es para que los fabricantes de accesorios los incorporen rápidamente. Es la estructura recomendada para fabricantes de accesorios. Veamos más detalles de DeviceDiscoveryUI.
Una persona que usa DeviceDiscoveryUI presionará un botón en la IU de tu app para agregar o seleccionar un dispositivo. En el lado del editor, tu app invocará a las API para presentar la IU del anunciante, como se ve a la izquierda. En otro dispositivo, tu app invocará a las API para presentar la IU del selector de dispositivos, como a la derecha.
La IU del navegador encontrará dispositivos cercanos que coincidan con tu servicio Wi-Fi Aware y los presentará para quien los elija. Si se selecciona un dispositivo no emparejado, el sistema iniciará automáticamente el flujo de emparejamiento.
Cuando se necesita un emparejamiento, aparece la solicitud entrante y un código PIN en el lado del editor y se ingresan en el lado del suscriptor.
Cuando se confirma el PIN, el sistema empareja los dispositivos. Así, tu app establecerá la conexión con el otro dispositivo.
Vimos el flujo de DeviceDiscoveryUI, ahora veamos algo de código.
En el lado del receptor, tu app creará una DevicePairingView pasando el servicio a anuncio.
En el lado del navegador, tu app creará una DevicePicker View pasando el servicio para detectar. Al tocar un dispositivo detectado, DeviceDiscoveryUI generará un punto final de red conectable a tu app. Si es necesario, DeviceDiscoveryUI realizará el emparejamiento antes de dar el punto final de red.
Si fabricas accesorios, AccessorySetupKit es el método recomendado para vincularlo con tu app. Si tu accesorio usa múltiples transportes, como Bluetooth y Wi-Fi Aware, AccessorySetupKit los emparejará y configurará al mismo tiempo. Echemos un vistazo al flujo de emparejamiento al usar AccessorySetupKit con Wi-Fi Aware. Una persona que usa AccessorySetupKit presionará un botón en la IU de tu app para agregar o seleccionar un dispositivo. Tu app completará un descriptor de detección, especificando el servicio y los filtros a usar para detectar dispositivos. Luego, aparece la IU de AccessorySetupKit.
AccessorySetupKit encontrará los dispositivos cercanos que coincidan con tu servicio y filtro de detección y los presentará en la IU. Luego, se selecciona el dispositivo que se desea configurar.
En la configuración, se ingresa un PIN para confirmar el emparejamiento con Wi-Fi Aware. El PIN se muestra en el lado del editor y se ingresa en el lado del suscriptor.
Luego, el sistema realiza el emparejamiento por la app.
Vimos el flujo de AccessorySetupKit, ahora veamos el código. Para emparejar dispositivos Wi-Fi Aware con AccessorySetupKit, crea un ASDiscoveryDescriptor con el nombre del servicio y filtros para propiedades del dispositivo, como modelo y proveedor. Luego, presenta la IU de AccessorySetupKit creando una ASAccessorySession e invocando allí a showPicker. El sistema realizará el proceso de detección y emparejamiento. Finalizado el emparejamiento, se devolverá un nuevo ASAccessory, que representa el dispositivo emparejado. Esto contiene un ASAccessoryWiFiAwarePairedDeviceID, que es el ID del dispositivo emparejado. Tu app puede usar esta ID para buscar el WAPairedDevice correspondiente con la estructura Wi-Fi Aware. El dispositivo se puede usar para iniciar la conexión con la estructura Network.
Para más información sobre AccessorySetupKit, consulta la sesión “Conoce AccessorySetupKit” de la WWDC24.
Vimos cómo emparejar dispositivos, ahora exploremos cómo tu app puede acceder a la lista de dispositivos emparejados.
Wi-Fi Aware representa un dispositivo emparejado como una estructura WAPairedDevice. Puedes obtener la lista de dispositivos con la API allDevices en WAPairedDevice. Puedes acceder a las propiedades del dispositivo, como nombre de proveedor y modelo, que se tomaron en el emparejamiento.
La API puede obtener todos los dispositivos o los que coincidan con determinado filtro.
Por ejemplo, para obtener los dispositivos que coincidan con Example Inc como nombre de proveedor, crea un filtro como se muestra aquí.
La lista de dispositivos emparejados para tu app puede cambiar en todo momento. Por ejemplo, si se elimina un dispositivo de la configuración, tu app puede recibir estos cambios y actualizar la IU y otros estados en consecuencia. La estructura ofrece una forma simple de hacer esto al exponer una secuencia asincrónica con WaPairedDevice.allDevices.
Considera que las API analizadas aquí exponen todos los dispositivos emparejados disponibles para tu app, puedan o no acceder a ellos actualmente. Cubrimos el primer flujo de alto nivel: emparejamiento, centrémonos ahora en el segundo flujo, donde tu app establecerá conexiones con los dispositivos emparejados. Antes de ver el código, primero entendamos el flujo de alto nivel para realizar una conexión Wi-Fi Aware. Para una conexión, se necesitan dos dispositivos. Un dispositivo publica el servicio y recepciona conexiones de dispositivos específicos.
El otro dispositivo se suscribe al servicio y busca dispositivos específicos a los que conectarse. Para ahorrar energía, la recepción y navegación deben limitarse a la duración necesaria para tu caso de uso.
Una vez que el navegador detecta la combinación de servicio y dispositivo que proporcionaste, expondrá puntos finales de red conectables a la app. Luego, tu app revisará los puntos finales y establecerá conexiones con uno o más de ellos. El receptor recibe la solicitud de conexión y la reenvía a tu app, y completa la conexión. Aquí se pueden intercambiar datos.
Exploremos cómo usar la estructura Network en tu app para establecer una conexión Wi-Fi Aware. Antes de editar o suscribirse, tu app debe seleccionar los dispositivos emparejados de interés. Aquí, el editor crea un filtro para los dispositivos cuyos nombres comienzan con My Device.
El filtro de suscriptores selecciona dispositivos con nombres de proveedores que comienzan con Example Inc.
Los parámetros necesarios ya están disponibles para iniciar instancias de recepción y de navegador con la estructura Network.
Para construir un NetworkListener, proporciona el objeto de servicio y el filtro de dispositivo creados antes.
El NetworkListener creado de esta manera solo aceptará conexiones para el servicio especificado y emparejará dispositivos que coincidan con el filtro proporcionado.
Además de los parámetros de Wi-Fi Aware, tu app puede configurar parámetros de red y configurar el controlador de actualización de estado.
De manera similar, el NetworkBrowser se crea con el filtro de servicios dispositivos que vimos antes.
Este navegador solo detectará dispositivos emparejados que anuncien el servicio y coincidan con el filtro.
Con el receptor y el navegador establecidos, tu app puede establecer una conexión. Para comenzar a aceptar conexiones entrantes en el receptor, invoca la operación de ejecución en el objeto receptor.
Al iniciar el receptor, tu app podrá ser detectada por otros dispositivos.
Para comenzar a suscribirse a los servicios en el navegador, invoca la operación de ejecució en el objeto del navegador.
Al iniciar el navegador se detectan los dispositivos cercanos que ofrecen el servicio. El navegador devolverá la lista de dispositivos detectados como puntos finales de red a tu app.
Luego, tu app revisará los puntos finales descubiertos y decidirá si el punto final de interés está presente.
Usa la API NetworkConnection para iniciar conexiones al punto final deseado.
Al conectarse, el receptor recibirá una devolución de llamada para la nueva conexión y se la proporcionará a tu app. Tu app ahora puede intercambiar datos mediante las API de la estructura Network. Para conservar los recursos inalámbricos y la energía, debes detener el receptor y el navegador cuando se hayan realizado todas las conexiones necesarias.
Cubrimos todos los pasos necesarios para realizar una conexión Wi-Fi Aware. Ahora veamos cómo optimizar el rendimiento de la conexión para obtener la mejor experiencia posible con la app. Para optimizar el rendimiento, debes equilibrar el rendimiento, la latencia y el consumo de energía. En la mayoría de los casos, el sistema aplicará valores predeterminados razonables. Sin embargo, si es necesario, tu app puede ajustar ciertos parámetros de conexión.
Como el modo de rendimiento Wi-Fi Aware, que influye en el ciclo de trabajo de Wi-Fi Aware.
También la clase de servicio de tráfico, que establece la prioridad para la transmisión de paquetes. El valor predeterminado es el máximo esfuerzo, pero se puede configurar en video o voz interactivos para una latencia más baja.
Si tienes datos de baja prioridad, usa la clase de servicio en segundo plano para evitar interferir con otro tráfico.
Generalmente, el modo de rendimiento masivo se utiliza con el máximo esfuerzo o la clase de servicio en segundo plano. Esta combinación resulta en menor consumo de energía, pero mayor latencia.
Por otro lado, se usa el tiempo real con la clase de servicio de voz o video interactivo. Esto ofrece latencia más baja, pero mayor consumo de energía. Antes de decidir usar el modo de tiempo real, considera si es necesario para tu caso de uso, ya que puede afectar negativamente la descarga de la batería. Además de ofrecer configuraciones ajustables para el rendimiento de la conexión, la estructura Wi-Fi Aware proporciona un informe de rendimiento solicitud para cada conexión de red. El informe incluye métricas sobre la intensidad de la señal, el rendimiento y la latencia. Usa estos comentarios para optimizar el rendimiento de tu app. Como la intensidad de la conexión Wi-Fi, la interferencia ambiental y las capacidades del dispositivo varían significativamente en el mundo real, asegúrate de probar el rendimiento de tu app en entornos con mucha actividad. Además, incorpora comentarios de conexión de protocolos de red como TCP en tu app.
Profundicemos en los códigos y veamos cómo puedes usar los parámetros ajustables. Como mencioné antes, las conexiones Wi-Fi Aware tienen como opción predeterminada el modo de rendimiento masivo y la clase de servicio de mejor esfuerzo. Si el perfil sugiere que tu caso de uso se beneficia con otra configuración, puedes establecer los parámetros en el editor y la instancia de conexión en el suscriptor para configurar el modo de rendimiento y la clase de servicio.
Aquí, el editor está configurado para usar el modo de rendimiento en tiempo real y la clase de servicio de tráfico de video interactivo.
En el lado del suscriptor, se necesita la misma configuración en el objeto NetworkConnection que crea tu app.
Para monitorear la conexión Wi-Fi Aware de tu app, accede a la ruta actual y lee el informe de rendimiento. Luego, tu app puede tomar acciones basadas en este informe y perfeccionar la experiencia general del usuario.
Ahora que vimos todo lo que necesitas para crear una app usando Wi-Fi Aware, ansío saber más sobre tus ideas. Antes de terminar, hablemos de algunos próximos pasos importantes. Si eres fabricante de hardware y desarrollas un dispositivo Wi-Fi Aware, consulta las pautas de diseño de accesorios para garantizar la interoperabilidad con los dispositivos Apple. El documento de pautas está disponible en el sitio web para desarrolladores de Apple. Con la guía, podrás hacer que tu dispositivo detecte y se empareje de manera confiable con dispositivos Apple, mantenga una seguridad sólida y maximice el rendimiento de la conexión. La guía es el mejor recurso para crear experiencias Wi-Fi Aware consistentes y de alta calidad.
Te recomendamos revisar la documentación de la estructura Wi-Fi Aware para obtener más detalles. También tienes disponible una app de muestra para ver cómo crear una app con Wi-Fi Aware y cómo las diferentes configuraciones de rendimiento afectan nuestro comportamiento.
Por último, si construyes un dispositivo Wi-Fi Aware, la guía de interoperabilidad te permite crear la mejor experiencia posible para tus usuarios.
Gracias por acompañarnos.
-
-
6:57 - Access capabilities and services
import WiFiAware // Check if Wi-Fi Aware is supported on your device guard WACapabilities.supportedFeatures.contains(.wifiAware) else { return } // Publishable service declared in Info.plist extension WAPublishableService { public static var fileService: WAPublishableService { allServices["_file-service._tcp"]! } } // Subscribable services declared in Info.plist extension WASubscribableService { public static var fileService: WASubscribableService { allServices["_file-service._tcp"]! } public static var droneService: WASubscribableService { allServices["_drone-service._udp"]! } }
-
10:33 - Pair with DeviceDiscoveryUI
import DeviceDiscoveryUI import WiFiAware import SwiftUI // Listener (Publisher) Device // Invoke Listener UI DevicePairingView(.wifiAware(.connecting(to: .fileService, from: .selected([])))) { // Provide a view to display to user before launching System UI } fallback: { // Provide a view in case of error } // Browser (Subscriber) Device // Invoke Browser UI DevicePicker(.wifiAware(.connecting(to: .selected([]), from: .fileService))) { endpoint in // Process the paired network endpoint } label: { // Provide a view to display to user before launching System UI } fallback: { // Provide a view in case of error }
-
12:29 - Pair with AccessorySetupKit
import AccessorySetupKit // Configure ASDiscoveryDescriptor (Subscriber) let descriptor = ASDiscoveryDescriptor() descriptor.wifiAwareServiceName = "_drone-service._udp" descriptor.wifiAwareModelNameMatch = .init(string: "Example Model") descriptor.wifiAwareVendorNameMatch = .init(string: "Example Inc", compareOptions: .literal) let item = ASPickerDisplayItem(name: "My Drone", productImage: UIImage(named: "DroneProductImage")!, descriptor: descriptor) // Create and activate session let session = ASAccessorySession() session.activate(on: sessionQueue) { event in // Closure will execute when device is added with event: .accessoryAdded // ASAccessoryWiFiAwarePairedDeviceID can be used to lookup a WAPairedDevice } // Present Picker UI session.showPicker(for: [item]) { error in // Handle error }
-
13:51 - Access paired devices
import Foundation import WiFiAware // WAPairedDevice var device: WAPairedDevice // Get using WAPairedDevice.allDevices // Access WAPairedDevice properties let pairingName = device.pairingInfo?.pairingName let vendorName = device.pairingInfo?.vendorName let modelName = device.pairingInfo?.modelName // Create a filter to select devices of interest let filter = #Predicate<WAPairedDevice> { $0.pairingInfo?.vendorName.starts(with: "Example Inc") ?? false } // Get all paired devices, matching the filter, at the current moment // A new snapshot of all paired devices each time a device is added, changed, or removed for try await devices in WAPairedDevice.allDevices(matching: filter) { // Process new snapshot of all paired devices }
-
16:23 - Filter paired devices
import Foundation import WiFiAware // Listener (Publisher) Device // Specify the paired devices of interest for the use case let deviceFilter = #Predicate<WAPairedDevice> { $0.name?.starts(with: "My Device") ?? false } // Browser (Subscriber) Device // Specify the paired devices of interest for the use case let deviceFilter = #Predicate<WAPairedDevice> { $0.pairingInfo?.vendorName.starts(with: "Example Inc") ?? false }
-
16:54 - Create listener and browser
import WiFiAware import Network // Listener (Publisher) Device: Construct a NetworkListener let listener = try NetworkListener(for: .wifiAware(.connecting(to: .fileService, from: .matching(deviceFilter))), using: .parameters { TLS() }) .onStateUpdate { listener, state in // Process state update } // Browser (Subscriber) Device: Construct a NetworkBrowser let browser = NetworkBrowser(for: .wifiAware(.connecting(to: .matching(deviceFilter), from: .fileService)) ) .onStateUpdate { browser, state in // Process state update }
-
17:44 - Establish a connection
// Listener (Publisher) Device: Start NetworkListener try await listener.run { connection in // Radio resources in use // Closure executes for each incoming connection connection.onStateUpdate { connection, state in // Process state update } } // Browser (Subscriber) Device: Start NetworkBrowser let endpoint = try await browser.run { waEndpoints in // Radio resources in use // Review endpoints, decide whether to return or skip if let endpoint = self.endpoint(in: waEndpoints) { return .finish(endpoint) } else { return .continue } } // Create the connection let connection = NetworkConnection(to: endpoint, using: .parameters { TLS() }) .onStateUpdate { connection, state in // Process state update }
-
21:11 - Tune performance
// Listener (Publisher) Device // Configure .realtime + .interactiveVideo on NetworkListener let listener = try NetworkListener(for: .wifiAware(.connecting(to: .fileService, from: .matching(deviceFilter))), using: .parameters { TLS() } .wifiAware { $0.performanceMode = .realtime } .serviceClass(.interactiveVideo)) // Browser (Subscriber) Device // Configure .realtime + .interactiveVideo on NetworkConnection let connection = NetworkConnection(to: endpoint, using: .parameters { TLS() } .wifiAware { $0.performanceMode = .realtime } .serviceClass(.interactiveVideo)) // Listener (Publisher) Device & Browser (Subscriber) Device // Read performance report let performanceReport = try await connection.currentPath?.wifiAware?.performance
-
-
- 0:00 - Introducción
Aprende a usar Wi-Fi Aware en iOS y iPadOS para crear conexiones de red punto a punto con baja latencia y alto rendimiento.
- 1:01 - Descripción general
Wi-Fi Aware es un estándar que permite la comunicación directa entre dispositivos sin necesidad de enrutadores o servidores centrales. Funciona junto con conexiones Wi-Fi regulares, lo que permite que los dispositivos se descubran y se conecten de forma segura y dinámica para experiencias efímeras locales como el intercambio de archivos, la transmisión multimedia, el control de accesorios y la pantalla compartida. Wi-Fi Aware es multiplataforma e interoperable, con conexiones totalmente autenticadas y encriptadas. Las apps pueden definir servicios, especificar roles como editores o suscriptores (o ambos) y sincronizar dispositivos para lograr reconexiones rápidas y sin inconvenientes siempre que estén cerca.
- 7:46 - Emparejar
Los dispositivos se pueden enlazar mediante la estructura DeviceDiscoveryUI o la estructura AccessorySetupKit. DeviceDiscoveryUI es adecuada para el enlace de app a app y es compatible con dispositivos Apple y de terceros. AccessorySetupKit es adecuada para el enlace de app a accesorio. Una vez enlazados los dispositivos, ambas estructuras permiten que las apps accedan y administren la lista de dispositivos enlazados, recuperen sus propiedades y escuchen los cambios en el estado de emparejamiento, lo que permite que la app actualice su IU y su estado en consecuencia.
- 15:05 - Conectar
Una vez enlazados, los dispositivos pueden conectarse entre sí. Un dispositivo tiene el rol de editor y el otro dispositivo tiene el rol de suscriptor. El editor filtra por dispositivos específicos y comienza a escuchar, mientras que el suscriptor filtra y comienza a navegar. Una vez que el suscriptor encuentra al editor, proporciona puntos finales a la app, que después establece conexiones. El receptor recibe y reenvía estas solicitudes de conexión, lo que permite el intercambio de datos.
- 19:01 - Optimizar
Para optimizar el rendimiento de la conexión de una app, la estructura Wi-Fi Aware permite a los desarrolladores ajustar ciertos parámetros. La estructura proporciona dos modos de rendimiento principales: masivo y en tiempo real. El modo masivo es energéticamente eficiente, pero tiene mayor latencia, mientras que el modo en tiempo real ofrece menor latencia, pero consume más energía. Los desarrolladores también pueden configurar la clase de servicio de tráfico para priorizar la transmisión de paquetes, con opciones de mejor esfuerzo, video o voz interactivos y clase de servicio en segundo plano. El marco ofrece informes de rendimiento a pedido que incluyen métricas sobre la intensidad de la señal, el rendimiento y la latencia, que los desarrolladores pueden usar para ajustar el rendimiento de su app en función de pruebas del mundo real y factores ambientales.
- 22:26 - Lineamientos
Los fabricantes de hardware que desarrollan dispositivos compatibles con Wi-Fi Aware pueden consultar las pautas de diseño de accesorios de Apple en el sitio web para desarrolladores para optimizar la interoperabilidad, la seguridad y el rendimiento. La guía, junto con la documentación de la estructura y la app de muestra, proporcionan recursos esenciales para crear experiencias de usuario de alta calidad.