Permisos y detección de iOS

A partir de iOS 14, el sistema operativo aplicará nuevas restricciones y permisos que afectan la experiencia del usuario de Cast. También afectará la forma en que compilas el SDK de Cast en la app. Para que esta mantenga la funcionalidad de Cast con las versiones más recientes de iOS, debes realizar actualizaciones a fin de controlar estos cambios de 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 son compatibles con iOS 14 y sus requisitos.

A partir de iOS 14, las aplicaciones que buscan dispositivos en la red local ahora les solicitarán a los usuarios un diálogo de permisos por única vez para encontrar y conectarse a dispositivos de red locales. La plataforma de transmisión usa la red local para descubrir y controlar dispositivos de transmisión, de manera que, si el usuario rechaza los permisos, no podrá transmitir contenido.

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

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

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

Cambios en el SDK de Cast

Transmisión por primera vez

La primera vez que un usuario intente transmitir contenido, 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 del mensaje de permisos de acceso a la red local de iOS que proporciona Apple. Las simulaciones que se muestran a continuación ilustran el flujo:

Flujo de permisos de acceso a la red local

Transmisión no disponible

A partir del SDK de 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, cuando presionas el botón para transmitir, aparece un diálogo que le brinda al usuario sugerencias sobre los posibles motivos por los que no está disponible, como se muestra en las simulaciones de abajo:

El flujo con transmisión no está disponible

Actualiza tu app en iOS 14

  1. Agrega el SDK para Cast para iOS 4.7.0 a tu proyecto.

    Si usas CocoaPods, usa pod update para agregar el SDK 4.7.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 el descubrimiento de redes locales tenga éxito en iOS 14.

    Deberás agregar _googlecast._tcp y _<your-app-id>._googlecast._tcp como servicios para que el descubrimiento de dispositivos funcione correctamente.

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

    Actualiza la siguiente definición de ejemplo de NSBonjourServices y reemplaza "ABCD1234" por tu appID.

    <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 el mensaje de la red local agregando una string de permiso específica de la app en el archivo Info.plist de tu app para el NSLocalNetworkUsageDescription, como para describir el descubrimiento de Cast y otros servicios de detección, como DIAL.

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} usa la red local para descubrir 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 la simulación.

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

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

Personalizaciones

Inicio del descubrimiento del dispositivo de transmisión

De forma predeterminada, el descubrimiento 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 para controlar cuándo se inicia el descubrimiento de dispositivos y el comportamiento de ciertos elementos de la UX:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

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

Si se establece en true, el descubrimiento del dispositivo de transmisión comienza cuando un usuario presiona GCKUICastButton por primera vez. Se mostrará un mensaje informativo al usuario para informarle por qué se necesita el permiso de la red local. Después de ese mensaje, se mostrará el mensaje de LNA de iOS 14. La detección de dispositivos de transmisión comienza después de que se confirma la confirmación del mensaje.

En los lanzamientos de apps posteriores, siempre se mostrará GCKUICastButton.

Si se establece en false, el descubrimiento del dispositivo comenzará en función del valor de la marca GCKCastOptions::disableDiscoveryAutostart.

Preguntas frecuentes

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

Es posible que tu app no pueda detectar 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 con el fin de admitir la transmisión. Si planeas compilar con Xcode 12, debes lanzar tu app con Cast 4.6.0.

Si vuelvo a lanzar mi app con el nuevo SDK de Cast, ¿qué obtendrán los usuarios que ejecutan iOS 13 o versiones anteriores?

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

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

  • Actualiza el elemento Info.plist de tu app para incluir una descripción del uso de red local.
  • Agrega NSBonjourServices al Info.plist de tu app y proporciona los nombres de los servicios de 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 tienda de aplicaciones de Apple.

¿Por qué los dispositivos dejaron de aparecer en mi selector de dispositivos personalizados después de actualizar 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 en versiones anteriores, la búsqueda de dispositivos era automática. A partir de la versión 4.6.0, deberás llamar explícitamente al método startDiscovery en la clase GCKDiscoveryManager para iniciar el descubrimiento 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 haya analizado por primera vez. Esto puede provocar que aparezcan diálogos de permisos en lugares aleatorios de tu app.

Se espera que los desarrolladores que creen un selector de dispositivos personalizado para su app proporcionen un anuncio intersticial único antes de iniciar el escaneo del dispositivo por primera vez en iOS 14.

iOS 13

Con iOS 13, se introdujeron 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, se encuentra disponible un SDK adicional sin compatibilidad con el modo de invitado que no requiere permiso de Bluetooth®. Esta función está disponible en el sitio para desarrolladores y en los nuevos CocoaPods google-cast-sdk-no-bluetooth. Te recordamos que la función del modo de invitado es la capacidad de la app emisora para detectar dispositivos cercanos que están cerca de una misma red física, sin estar en la misma red, mediante un PIN que se muestra en los dispositivos habilitados para el modo de invitado.

A fin de preparar tu app para iOS 13, deberás decidir lo siguiente:

Se debe mantener la compatibilidad con el modo de invitado.

  • Se debe agregar la clave Privacy - Bluetooth Always Usage Description.
  • Agrega una string a fin de explicar el uso de Bluetooth® para tus usuarios a tu Info.plist.

Se debe quitar la compatibilidad con el modo de invitado

  • Evita que tu app requiera requisitos de transmisión de Bluetooth®.
  • Integra la versión más reciente del SDK de Google Cast sin compatibilidad con Bluetooth®.
  • Esta función está disponible en el sitio para desarrolladores y en los nuevos CocoaPods google-cast-sdk-no-bluetooth.

Desglose de las apps

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

Apps creadas con el SDK de iOS 12 o una versión anterior

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

Apps creadas con el SDK de iOS 13

  • Acción obligatoria: Es posible que la actualización al SDK de Cast 4.4.4 o el botón para transmitir no aparezcan si el usuario no otorga permiso de ubicación. La actualización al SDK de Cast 4.4.4 es necesaria para garantizar una experiencia de transmisión confiable en iOS 13.
  • Consulta la documentación para desarrolladores a fin de obtener más información sobre cómo integrar el modo de invitado o inhabilítalo con el SDK de Google Cast y sin compatibilidad con Bluetooth®.