Directrices para dispositivos móviles — iOS
En este tema se abordan los aspectos que hay que tener en cuenta a la hora de desarrollar aplicaciones para un dispositivo iOS:
- Gestión del estado de fondo
- CallKit
- Configuración del manifiesto de privacidad
- Cambios en la red de iOS 14 que afectan a las sesiones retransmitidas
- Más información
Gestión del estado de fondo
iOS admite la multitarea para todas las aplicaciones; sin embargo, hay una serie de pasos que el desarrollador debe seguir para que el SDK de OpenTok para iOS funcione correctamente en los distintos estados de la aplicación. Este documento recoge una serie de prácticas que, según nuestra experiencia, funcionan bien con la mayoría de las aplicaciones de OpenTok. No obstante, no sustituye a la lectura de la Documentación de Apple sobre este tema —concretamente los apartados «Estrategias para gestionar las transiciones de estado de las aplicaciones», «Ejecución en segundo plano» y «Consejos para desarrollar una aplicación de VoIP». Aunque Apple no considera que la mayoría de las aplicaciones de OpenTok sean aplicaciones de VoIP, el contenido sobre la configuración de sesiones de audio y la configuración de sockets resulta relevante y útil para comprender este documento.
Guía de inicio rápido: configuración de los permisos de la aplicación
Para que la aplicación siga grabando audio en segundo plano, selecciona el objetivo de la aplicación en Xcode y selecciona el Signing & Capabilities ficha. A continuación, haga clic en el botón + Capacidad y añada la capacidad Modos de fondo al proyecto. A continuación, seleccione la opción Audio, Airplay, and Picture in Picture opción. Esta configuración también evitará que la aplicación pase a un estado de suspensión mientras se reproduce y graba audio en segundo plano.
Si su aplicación necesita notificaciones push de alta prioridad que despierten la aplicación para las llamadas entrantes, utilizando la interfaz de usuario nativa de la aplicación de teléfono, o recibir notificaciones sobre eventos de retención, seleccione la opción Voice over IP funcionalidad en XCode.
Lo que OpenTok puede (y no puede) hacer en segundo plano
Con el SDK de OpenTok, una aplicación puede Realiza cada una de las siguientes acciones mientras te encuentres en el estado de fondo:
- Mantén activa una sesión de OpenTok.
- Mantén una sesión sólo de audio.
- Establecer indicadores de audio y vídeo para emisores y receptores. Por ejemplo, al establecer el
OTPublisher.publishAudiopropiedad aYESestá permitido. - Publica utilizando una implementación de captura de vídeo personalizada que no utilice la cámara (por ejemplo, publicando desde un archivo o una fuente de vídeo sintetizado).
Una aplicación puede reanudar el uso de la cámara en cuanto vuelva al estado activo.
Sin embargo, las aplicaciones no puede Haz lo siguiente mientras estés en segundo plano:
- Utiliza la cámara como fuente de vídeo para un editor.
- Configura nuevas vistas con vídeo procedente de las transmisiones de OpenTok.
- Mantén activa la sesión de audio si recibes una llamada telefónica o por FaceTime.
- Evita que otras apps adquieran recursos de audio del sistema.
- Mantener una conexión con una sesión de OpenTok sin un emisor ni un suscriptor activos.
Sesiones activas de OpenTok en segundo plano
La configuración descrita anteriormente permite que las aplicaciones mantengan activa una sesión de OpenTok incluso cuando la aplicación se encuentra en segundo plano, probablemente porque el usuario final ha pulsado el botón de inicio, ha bloqueado la pantalla o ha abierto contenido de una URL en otro proceso. El audio Este permiso permite que el proceso de la aplicación permanezca activo mientras está en segundo plano, siempre que haya una sesión de audio activa. Esto significa que la captura y la reproducción de audio pueden continuar en tu sesión de OpenTok, siempre y cuando ningún otro proceso solicite recursos de audio.
Cuando está correctamente configurado, iOS proporciona un indicador de que tu app se está ejecutando en segundo plano con una sesión de audio activa. Esto se ve como un fondo rojo de la barra de estado, así como una barra adicional que indica el nombre de la app que mantiene la sesión de audio activa, en este caso, tu app.

El Voice over IP Esta funcionalidad está pensada para mantener conexiones de señalización de larga duración con un servidor de aplicaciones.
Si selecciona la opción Voice over IP Si seleccionas esta opción en la sección «Capacidades» de Xcode, tu aplicación deberá implementar funciones que justifiquen dicha capacidad; de lo contrario, es posible que la revisión de la App Store rechace tu aplicación. Esta capacidad no debe utilizarse para mantener la aplicación en ejecución en segundo plano por motivos ajenos a las comunicaciones de audio o vídeo.
Si su aplicación necesita recibir notificaciones de eventos de aplicación, le recomendamos que utilice Notificaciones push de Apple con tu servidor de aplicaciones para activar la aplicación y ejecutar un flujo de trabajo. Si tu aplicación admite llamadas entrantes, te recomendamos que utilices el Notificaciones push de VoIP.
CallKit
CallKit es un marco de trabajo que permite a las aplicaciones de iOS mejorar la integración con el sistema operativo, lo que permite a la aplicación:
- Notificación de llamadas entrantes o salientes al sistema operativo
- Inicie la aplicación con una notificación push de VoIP (sólo si desea mostrar la interfaz de usuario de llamada entrante).
- Gestionar el enrutamiento de audio
- Coordina las sesiones de audio entre todas las aplicaciones activas
- Aumenta los niveles de salida de audio
- Muestra los controles de llamada en una notificación y en una interfaz de usuario nativa de llamadas
OpenTok ofrece dos formas de integración con CallKit:
- Establezca un
CustomAudioDeviceque controla elAudioSessionactivaciones. Véase esta muestra. - Activa el modo de servicios de llamada mediante
OTAudioDeviceManager.currentAudioSessionManager(). La instancia devuelta por el gestor de sesiones de audio debe utilizarse para configurar la sesión de audio y notificar al SDK las activaciones y desactivaciones de la sesión de audio. Véase esta muestra.
Si tu aplicación necesita recibir notificaciones sobre eventos de la aplicación, como llamadas entrantes, el desarrollador es el responsable de implementarlo. Recomendamos utilizar el PushKit marco y Notificaciones push de VoIP. A modo de referencia, véase esta muestra.
La integración nativa de OpenTok requiere que el desarrollador active el modo de servicios de llamada en las primeras fases del inicio de la aplicación. Las notificaciones push de VoIP requieren una llamada a CXProvider.reportNewIncomingCall antes de 3 segundos; de lo contrario, la aplicación puede bloquearse. En ese intervalo de tiempo, la aplicación debe configurar el soporte de CallKit del SDK antes de que se ejecute el comando CXAnswerCallAction Se ejecuta la función de devolución de llamada.
Para activar el modo de servicios de llamada, ejecute el siguiente código en la aplicación application:didFinishLaunchingWithOptions: método.
let sessionManager = OTAudioDeviceManager.currentSessionManager()
sessionManager?.enableCallingServicesMode()
Configure el AVAudioSession en el CXStartCallAction o CXAnswerCallAction CXProvider funciones de devolución de llamada.
Utiliza el modo de videollamada para las videollamadas, o el modo de chat de voz para las llamadas solo de audio.
sessionManager?.preconfigureAudioSessionForCall(withMode: .videoChat)
sessionManager?.preconfigureAudioSessionForCall(withMode: .voiceChat)
Notificar al gestor de sesiones las activaciones y desactivaciones de sesiones de audio.
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
sessionManager?.audioSessionDidActivate(audioSession)
}
func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
sessionManager?.audioSessionDidDeactivate(audioSession)
}
Compruebe el Documentación para desarrolladores de CallKit Para obtener más información.
Perder el control
Las llamadas entrantes de teléfono y FaceTime son probablemente los primeros eventos que verás que interrumpen completamente tu aplicación. Cuando esto ocurra, tu app se suspenderá, independientemente de si hay una sesión de audio activa.
Si tu aplicación se suspende porque la sesión de audio ha cedido el control a otro proceso, no es necesario aplicar ninguna lógica adicional para gestionar esta situación. Si la aplicación permanece suspendida durante un periodo prolongado, la conexión a la sesión de OpenTok se interrumpirá. Los demás clientes conectados a la sesión recibirán connectionDestroyed para la conexión del dispositivo, y una eventual limpieza será necesaria una vez que la aplicación no esté suspendida. Mientras tu controlador esté procesando los eventos de error y de delegado desconectado para la sesión, esto no debería ser diferente de un flujo de trabajo de desconexión voluntaria, o de cualquier otro. Los clientes pueden volver a conectarse tan pronto como se procese la limpieza de desconexión.
Configuración del manifiesto de privacidad
Las versiones 2.27.3, 2.26.3 y 2.25.5 del SDK de Vonage Video para iOS incorporan compatibilidad con el manifiesto de privacidad exigido por la tienda de aplicaciones de Apple. Al utilizar estas versiones del SDK, los ajustes necesarios relacionados con la privacidad se añaden automáticamente cuando crea el informe de privacidad de tu aplicación. Si necesitas utilizar una versión anterior del SDK de Vonage Video para React Native, puedes añadir manualmente la configuración de privacidad necesaria según la configuración de este archivo en el archivo de manifiesto de privacidad de tu propia aplicación.
Cambios en la red de iOS 14 que afectan a las sesiones retransmitidas
Con iOS 14, Apple introduce la privacidad en la red local (véase este vídeo).
A partir de iOS 14, el sistema operativo solicitará permiso al usuario cuando una aplicación intente suscribirse a clientes de la misma red local en un sesión retransmitida. El texto predeterminado de la notificación indica que la aplicación «desea buscar y conectarse a dispositivos de tu red local».
En una sesión retransmitida, la Video API de Vonage utiliza la red local para detectar y conectarse con los participantes de la videollamada que se encuentran en tu red local, siempre que sea posible. Si los clientes no pueden conectarse a la red local, la aplicación utilizará el servidor TURN de OpenTok para retransmitir las transmisiones de audio y vídeo.
Si el usuario rechaza el permiso, el intento de suscripción puede fallar si el cliente no puede conectarse al servidor TURN de OpenTok. En este caso, una vez rechazado el permiso, cualquier intento futuro de suscripción de clientes de la misma red también fallará, a menos que el usuario modifique el permiso en «Ajustes». Lamentablemente, iOS no ofrece una API que permita a una aplicación determinar si el usuario ha aceptado o rechazado este permiso.
Es importante señalar que esto no se aplica a las sesiones de vídeo que utilizan el OpenTok Media Router, ya que los datos se transmiten a través de Internet en lugar de por la red local.
Si tu aplicación utiliza una sesión retransmitida, te recomendamos que añadas una cadena de texto personalizada y descriptiva para informar al usuario de por qué la aplicación necesita este permiso:
- En Xcode, abre el archivo info.plist de tu aplicación.
- En el editor info.plist, haga clic con el botón derecho del ratón en la columna de la izquierda y seleccione Añadir fila (o haga clic en +) para añadir un ajuste para Privacidad - Descripción del uso de la red local.
- Modifica el valor de esta cadena para describir cómo utiliza tu aplicación este permiso. Por ejemplo, añade: «Esta aplicación utiliza la red local para detectar y conectarse con participantes de videollamadas que se encuentren en la misma red, siempre que sea posible».
El mensaje al usuario incluirá esta descripción.
En el caso de las aplicaciones que no puedan utilizar sesiones enrutadas y en las que no se desee que se solicite al usuario el acceso a la red local, puede utilizar cualquiera de las opciones que se indican en las secciones siguientes.
Omitir las comprobaciones de la red local para establecer la conectividad de los dispositivos multimedia
Puede ajustar el OTSessionICEConfig.filterOutLanCandidates propiedad para obligar a la aplicación a no utilizar la red local para establecer la conexión, tal y como se muestra en el siguiente código.
Objetivo-C
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
OTSessionICEConfig *myICEServerConfiguration = [[OTSessionICEConfig alloc] init];
myICEServerConfiguration.filterOutLanCandidates = YES;
settings.iceConfig = myICEServerConfiguration;
session = [[OTSession alloc] initWithApiKey:kApiKey
sessionId:kSessionId
delegate:self settings:settings];
Swift
let settings = OTSessionSettings()
let myICEServerConfiguration = OTSessionICEConfig()
myICEServerConfiguration.filterOutLanCandidates = true
settings.iceConfig = myICEServerConfiguration
let session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self,
settings: settings)
Nota: En OTSessionICEConfig.filterOutLanCandidates Esta propiedad está disponible en la versión 2.30.0 y posteriores del SDK de OpentTok para iOS.
Utilizar servidores TURN
Puede ajustar el OTSessionICEConfig.transportPolicy para obligar a la aplicación a utilizar servidores TURN para establecer la conexión, tal y como se muestra en el siguiente código.
Objetivo-C
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
OTSessionICEConfig *myICEServerConfiguration = [[OTSessionICEConfig alloc] init];
myICEServerConfiguration.transportPolicy = OTSessionICETransportRelay;
settings.iceConfig = myICEServerConfiguration;
session = [[OTSession alloc] initWithApiKey:kApiKey
sessionId:kSessionId
delegate:self settings:settings];
Swift
let settings = OTSessionSettings()
let myICEServerConfiguration = OTSessionICEConfig()
myICEServerConfiguration.transportPolicy = .relay
settings.iceConfig = myICEServerConfiguration
let session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self,
settings: settings)
Más información
Para obtener más información, consulta: