Permisos y detección de iOS

A partir de iOS 14, el sistema operativo aplicará restricciones y permisos nuevos que afectan la experiencia del usuario de Cast. También afectará la forma en que compiles el SDK de Cast en tu app. Para que tu app mantenga la funcionalidad de Cast con las versiones más recientes de iOS, debes realizar actualizaciones para controlar estos cambios en los permisos.

iOS 14

Los desarrolladores deben actualizar sus apps emisoras de Cast para iOS a la versión 4.6.0 o posterior del SDK de Google Cast. Estas versiones ofrecen compatibilidad con iOS 14 y sus requisitos.

A partir de iOS 14, las aplicaciones que buscan dispositivos en la red local ahora solicitarán a los usuarios un diálogo de permisos únicos para buscar dispositivos de la red local y conectarse a ellos. La plataforma de Cast usa la red local para descubrir y controlar los dispositivos de transmisión, por lo que, si el usuario rechaza el permiso, no podrán realizar la transmisión.

Con el objetivo de mejorar la experiencia del usuario, realizaremos algunas modificaciones de la UX en el SDK para las apps que usen el selector de dispositivos estándar. Estas modificaciones de la UX hacen que sea más evidente para los usuarios por qué se necesitan los permisos de acceso a la red local y cómo habilitar la transmisión si se inhabilitó el acceso a la red local.

Las apps compiladas con versiones del SDK de Cast mediante la versión 4.4.8 o anteriores seguirán funcionando, siempre que se compilen con Xcode 11.7 o una versión anterior. Si compilas para iOS 14 con Xcode 12 o una versión posterior, te recomendamos que actualices al SDK de Cast 4.6.0 o una versión posterior para asegurarte de que la app de Cast seguirá funcionando correctamente.

Puedes descargar la versión 4.6.0 o posterior del SDK de Cast para iOS con CocoaPods siguiendo la configuración de CocoaPods, o bien de forma manual con la configuración manual. Esta versión incluye cambios en el mecanismo de detección subyacente para permitir que las apps compiladas con Xcode 12 encuentren dispositivos de transmisión en la red. Ahora debería aparecer siempre el botón para transmitir. Si no hay dispositivos disponibles cuando el usuario presione el botón para transmitir, se mostrará un diálogo con indicaciones sobre los motivos por los que podrían no estar disponibles, incluida información para volver a habilitar el permiso de acceso a la red local.

Cambios en el SDK de Cast

Primera transmisión

La primera vez que un usuario intente realizar la transmisión, aparecerá un diálogo intersticial de acceso a la red local (LNA) en el que se explicará por qué se necesita el acceso a la red local, seguido de un mensaje de permisos de acceso a la red local de iOS proporcionado por Apple. En las siguientes maquetas se ilustra el flujo:

Flujo de permisos de acceso a la red local

Transmisión no disponible

A partir del SDK remitente de iOS 4.6.0, el botón para transmitir siempre aparece cuando el usuario está conectado a Wi-Fi. Cuando los dispositivos de transmisión no están disponibles, si presionas el botón para transmitir, aparece un diálogo que le indica al usuario los posibles motivos por los que no está disponible, como se muestra en los siguientes ejemplos:

El flujo con transmisión no está disponible

Cómo actualizar tu app en iOS 14

  1. Agrega el SDK de Cast para iOS 4.8.0 a tu proyecto.

    Si usas CocoaPods, usa pod update para agregar el SDK 4.8.0 a tu proyecto.

    De lo contrario, extrae el SDK de forma manual.

  2. Agrega NSBonjourServices a tu Info.plist

    Especifica NSBonjourServices en tu Info.plist para permitir que la detección de la red local tenga éxito en iOS 14.

    Deberás agregar _googlecast._tcp y _<your-app-id>._googlecast._tcp como servicios para que la detección de dispositivos funcione correctamente.

    El appID es elReceiverID, que es el mismo ID que se define en tu GCKDiscoveryCriteria.

    Actualiza la siguiente definición de NSBonjourServices de ejemplo y reemplaza "ABCD1234" por el ID de la app.

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. Agrega NSLocalNetworkUsageDescription a tu Info.plist

    Te recomendamos que personalices el mensaje que se muestra en la solicitud de red local. Para ello, agrega una cadena de permiso específica de la app en el archivo Info.plist de tu app para el NSLocalNetworkUsageDescription, como para describir la detección de transmisiones y otros servicios de descubrimiento, como DIAL.

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} usa la red local para detectar dispositivos compatibles con Cast en tu red Wi-Fi.</string>

    Este mensaje aparecerá como parte del diálogo de Acceso a la red local de iOS, como se muestra en el ejemplo.

    Imagen del diálogo de permisos de acceso a la red local de transmisión
  4. Vuelve a lanzar la app en la App Store de Apple.

    Te recomendamos que también vuelvas a lanzar la app con la versión 4.8.0 lo antes posible.

Personalizaciones

Iniciación de descubrimiento de dispositivos de transmisión

De forma predeterminada, la detección de dispositivos de transmisión se inicia la primera vez que el usuario presiona el botón para transmitir (GCKUICastButton). Si es la primera vez que el usuario intenta usar la app de Cast en la red local después de actualizar a iOS 14, aparecerá el nuevo anuncio intersticial de LNA, seguido del diálogo de permisos de acceso a la red local de iOS.

Hay una nueva marca disponible que te permite controlar cuándo se inicia la detección de dispositivos y el comportamiento de ciertos elementos de la UX:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

El valor predeterminado es true. Esta marca solo es aplicable cuando la marca GCKCastOptions::disableDiscoveryAutostart se establece en false.

Si se configura como true, la detección de dispositivos de transmisión comienza cuando un usuario presiona GCKUICastButton por primera vez. Se mostrará un mensaje informativo al usuario en el que se le informará por qué se necesita el permiso de red local. Luego de ese mensaje, se mostrará el mensaje de LNA para iOS 14. La detección de dispositivos de transmisión comienza después de que se confirma el mensaje.

En los inicios posteriores de la app, siempre se muestra GCKUICastButton.

Si se configura como false, la detección de dispositivos comenzará según el valor de la marca GCKCastOptions::disableDiscoveryAutostart.

Preguntas frecuentes

¿Qué sucede si vuelvo a lanzar mi app emisora de Cast con el SDK de Cast 4.4.8 y Xcode 12?

Es posible que tu app no pueda descubrir dispositivos de transmisión en la red local, a menos que hayas obtenido un derecho de multidifusión de red de Apple. Ten en cuenta que Apple no otorgará derechos de multidifusión solo para admitir la transmisión. Si planeas compilar con Xcode 12, debes lanzar la app con Cast 4.6.0.

Si vuelvo a lanzar mi app con el nuevo SDK de Cast, ¿qué ejecutarán mis usuarios en iOS 13 o en una experiencia anterior?

Seguirán viendo la misma experiencia que tenían antes del relanzamiento de la app. Los cambios visibles para los usuarios se limitan a los usuarios que ejecutan iOS 14.

¿Qué tendré que hacer para actualizar mi app una vez que se lance la nueva versión del SDK de Cast?

  • Actualiza el archivo Info.plist de tu app para incluir una descripción de uso de la red local.
  • Agrega NSBonjourServices al Info.plist de tu app y proporciona los nombres de servicio Bonjour para Cast y el ID de tu app.
  • Actualiza la app emisora para usar el SDK de Cast 4.6.0.
  • Vuelve a lanzar la app en la App Store de Apple.

¿Por qué dejaron de aparecer los dispositivos en el selector de dispositivos personalizado después de que actualicé a la versión 4.6.0?

Este es un problema conocido que puede ocurrir si usas un selector de dispositivos personalizado en lugar del selector de dispositivos estándar. En la versión 4.4.8 del SDK de Cast y versiones anteriores, el escaneo de dispositivos era automático. A partir de la versión 4.6.0, deberás llamar explícitamente al método startDiscovery en la clase GCKDiscoveryManager para iniciar la detección del dispositivo.

El motivo de este cambio es que aparecerá el mensaje de permisos de Acceso a la red local (LNA) después de que la app realice un análisis por primera vez. Esto podría hacer que aparezcan diálogos de permisos en lugares aleatorios de tu app.

Se espera que los desarrolladores que compilan un selector de dispositivos personalizado para su app proporcionen un anuncio intersticial por única vez antes de iniciar el análisis del dispositivo por primera vez en iOS 14.

iOS 13

En iOS 13, se agregaron nuevos requisitos de permisos que afectan a las apps que usan el SDK de Google Cast.

A partir de la versión 4.4.3 del SDK de Google Cast, hay un SDK adicional disponible que no requiere permiso de Bluetooth®. Está disponible en el sitio para desarrolladores y en los nuevos CocoaPods de google-cast-sdk-no-bluetooth.

Desglose de la app

A continuación, se muestra un desglose según la versión del SDK de iOS que uses actualmente:

Apps compiladas con el SDK de iOS 12 o versiones anteriores

  • Acción recomendada. El rendimiento del descubrimiento de dispositivos puede disminuir cuando se ejecuta en iOS 13, pero seguirá funcionando. Recomendamos a los desarrolladores que actualicen a la versión 4.4.4 del SDK de Cast cuando esté disponible.
  • iOS 13 solicitará a los usuarios que le otorguen permisos de Bluetooth® a la app.

Apps creadas con el SDK de iOS 13

  • Acción obligatoria: Actualiza al SDK de Cast 4.4.4 o es posible que el botón para transmitir no aparezca si el usuario no otorga permiso de ubicación. Es necesario actualizar al SDK de Cast 4.4.4 para garantizar una experiencia de transmisión confiable en iOS 13.