Reconectar los medios de una llamada o conversación
Visión general
Esta guía explica cómo volver a conectarte a una llamada o a los medios de una conversación en tu aplicación cliente de Vonage para Android e iOS.
Reconectar automáticamente
El Client SDK puede intentar volver a conectarse automáticamente a una llamada o a los medios de una conversación si se configura la opción del cliente autoReoffer propiedad de configuración. Esto es útil para cuando hay una breve caída en la conectividad a Internet o el usuario cambia entre celular y WiFi.
val client = NexmoClient.Builder().autoMediaReoffer(true).build(this)
NexmoClient client = new NexmoClient.Builder()
.autoMediaReoffer(true)
.build(context);
let config = NXMClientConfig()
config.autoMediaReoffer = true
NXMClient.setConfiguration(config)
NXMClientConfig *configuration = [[NXMClientConfig alloc] init];
configuration.autoMediaReoffer = YES;
[NXMClient setConfiguration:configuration];
Escucha de los cambios de estado de las llamadas
Para saber cuándo ha cambiado el estado de los medios de una llamada o conversación, puedes escuchar los eventos de estado de los medios con el SDK de Android e iOS. Tenga en cuenta el estado desconectado. Un estado desconectado significa que ha habido un problema de red temporal y el cliente intentará una reconexión proporcionando el autoReoffer de configuración. Si no estableció autoReoffer a true entonces puedes reconectarte manualmente aquí.
Para obtener MediaConnectionState actualizaciones que necesita para añadir un NexmoMediaStatusListener. Puede hacerlo estableciéndolo en el objeto de conversación de una llamada.
call?.conversation?.addMediaStatusListener(object: NexmoMediaStatusListener {
override fun onMediaConnectionStateChange(legId: String, status: EMediaConnectionState) {
// Update UI and/or reconnect
}
})
Para obtener MediaConnectionState actualizaciones, es necesario añadir un NexmoMediaStatusListener. Puede hacerlo estableciéndolo en el objeto de conversación de una llamada.
NexmoMediaStatusListener listener = new NexmoMediaStatusListener() {
@Override
public void onMediaConnectionStateChange(@NonNull String legId, @NonNull EMediaConnectionState status) {
// Update UI and/or reconnect
}
};
call.getConversation().addMediaStatusListener(listener);
Para obtener NXMMediaConnectionStatus actualizaciones debe ajustarse a la NXMConversationDelegate. Puede hacerlo estableciéndolo en el objeto de conversación de una llamada.
call.conversation.delegate = self
A continuación, puede aplicar el método onMediaConnectionStateChange función delegada
extension ViewController: NXMConversationDelegate {
func conversation(_ conversation: NXMConversation, didReceive error: Error) {}
func conversation(_ conversation: NXMConversation, onMediaConnectionStateChange state: NXMMediaConnectionStatus, legId: String) {
// Update UI and/or reconnect
}
}
Para obtener NXMMediaConnectionStatus actualizaciones debe ajustarse a la NXMConversationDelegate. Puede hacerlo estableciéndolo en el objeto de conversación de una llamada.
call.conversation.delegate = self
A continuación, puede aplicar el método onMediaConnectionStateChange función delegada
- (void)conversation:(NXMConversation *)conversation didReceive:(NSError *)error {}
- (void)conversation:(NXMConversation *)conversation onMediaConnectionStateChange:(NXMMediaConnectionStatus)state legId:(NSString *)legId {
// Update UI and/or reconnect
}
Reconectar manualmente
El Client SDK dispone de funciones para reconectar explícitamente los medios de una llamada o conversación. Esto resulta útil, por ejemplo, cuando se desea cambiar el dispositivo en el que está hablando un usuario sin colgar e iniciar una nueva llamada si la aplicación muere.
Llama:
client.reconnectCall("conversationId", "legId", object : NexmoRequestListener<NexmoCall> {
override fun onSuccess(result: NexmoCall?) {
// handle call
}
override fun onError(error: NexmoApiError) {
// handle error
}
})
Medios de conversación:
conversation.reconnectMedia()
Llama:
NexmoRequestListener<NexmoCall> listener = new NexmoRequestListener<NexmoCall>() {
@Override
public void onSuccess(@Nullable NexmoCall result) {
// handle call
}
@Override
public void onError(@NonNull NexmoApiError error) {
// handle error
}
};
client.reconnectCall("conversationId", "legId", listener);
Medios de conversación:
conversation.reconnectMedia();
Llama:
NXMClient.shared.reconnectCall(withConversationId: "", andLegId: "") { error, call in
if error != nil {
// handle error
return
}
// handle call
}
Medios de conversación:
conversation.reconnectMedia()
Llama:
[NXMClient.shared reconnectCallWithConversationId:@"" andLegId:@"" completionHandler:^(NSError * _Nullable error, NXMCall * _Nullable call) {
if (error) {
// handle error
return;
}
// handle call
}];
Medios de conversación:
[conversation reconnectMedia];