Recibir una llamada
Para recibir una llamada entrante dentro de la aplicación, debes registrarte y escuchar los eventos de llamada entrante:
Para recibir una llamada entrante dentro de la aplicación, debes escuchar los eventos de llamada entrante:
application.on("member:call", (member, call) => {
...
});
El método de escucha recibe un member que contiene información sobre la persona que llama y un objeto call que te permite interactuar con la llamada en curso. Con este último, podrás realizar métodos como responder, rechazar y colgar.
val incomingCallListener = NexmoIncomingCallListener {
Log.d("TAG", "Incoming call $it")
}
val client = NexmoClient.get()
client.addIncomingCallListener(incomingCallListener)
Retire el oyente cuando sea necesario:
client.removeIncomingCallListeners()
NexmoIncomingCallListener incomingCallListener = new NexmoIncomingCallListener() {
@Override
public void onIncomingCall(NexmoCall call) {
Log.d("TAG", "Incoming call " + call);
}
};
val client = NexmoClient.get()
client.addIncomingCallListener(incomingCallListener);
Retire el oyente cuando sea necesario:
client.removeIncomingCallListeners();
Añadir NXMClientDelegate como extensión de un ViewController o similar:
extension ViewController: NXMClientDelegate {
func client(_ client: NXMClient, didChange status: NXMConnectionStatus, reason: NXMConnectionStatusReason) {
// handle connection status changed - eg: logout
...
}
func client(_ client: NXMClient, didReceiveError error: Error) {
print("connection error: \(error.localizedDescription)")
// handle client connection failure
...
}
func client(_ client: NXMClient, didReceive call: NXMCall) {
print("Incoming Call: \(call)")
// handle incoming call
...
}
}
Tener un ViewControllero similar, se ajustan a NXMClientDelegate:
@interface ViewController () <NXMClientDelegate>
...
@end
@implementation ViewController
...
//MARK:- NXMClientDelegate
- (void)client:(nonnull NXMClient *)client didChangeConnectionStatus:(NXMConnectionStatus)status
reason:(NXMConnectionStatusReason)reason {
// handle connection status changed - eg: logout
...
}
- (void)client:(nonnull NXMClient *)client didReceiveError:(nonnull NSError *)error {
NSLog(@"connection error: %@", [error localizedDescription]);
// handle client connection failure
...
}
- (void)client:(nonnull NXMClient *)client didReceiveCall:(nonnull NXMCall *)call {
NSLog(@"Incoming Call: %@", call);
// handle incoming call
...
}
@end
A continuación, podrás ejecutar métodos como responder, rechazar y colgar.
Respuesta
call.answer();
val incomingCallListener = NexmoIncomingCallListener {
Log.d("TAG", "Incoming call $it")
it.answer(answerCallListener)
}
val answerCallListener = object: NexmoRequestListener<NexmoCall> {
override fun onSuccess(nexmoCall: NexmoCall?) {
Log.d("TAG", "Call answered: $nexmoCall")
}
override fun onError(apiError: NexmoApiError) {
Log.d("TAG", "Error: Unable to answer incoming call ${apiError.message}")
}
}
val client = NexmoClient.get()
client.addIncomingCallListener(incomingCallListener)
NexmoIncomingCallListener incomingCallListener = new NexmoIncomingCallListener() {
@Override
public void onIncomingCall(NexmoCall call) {
Log.d("TAG", "Incoming call " + call);
call.answer(answerCallListener);
}
};
NexmoRequestListener<NexmoCall> answerCallListener = new NexmoRequestListener<NexmoCall>() {
@Override
public void onSuccess(@Nullable NexmoCall nexmoCall) {
Log.d("TAG", "Call answered: " + nexmoCall);
}
@Override
public void onError(@NonNull NexmoApiError apiError) {
Log.d("TAG", "Error: Unable to answer incoming call " + apiError.getMessage());
}
};
NexmoClient client = NexmoClient.get();
client.addIncomingCallListener(incomingCallListener);
Utilización de la call recibido en client(_:didReceive:):
call.answer { [weak self] error in
if let error = error {
print("error answering call: \(error.localizedDescription)")
// handle call answer failure
...
return
}
// handle call answer success
...
}
Utilización de la call recibido en client:didReceiveCall::
[call answer:^(NSError * _Nullable error) {
if (error) {
NSLog(@"error answering call: %@", error.localizedDescription);
// handle call answer failure
...
return;
}
// handle call answer success
...
}];
Rechazar
call.reject();
Utilización de la call recibido en client(_:didReceive:):
call.reject { [weak self] error in
if let error = error {
print("error declining call: \(error.localizedDescription)")
// handle call decline failure
...
return
}
// handle call decline success
...
}
Utilización de la call recibido en client:didReceiveCall::
[call reject:^(NSError * _Nullable error) {
if (error) {
NSLog(@"error answering call: %@", error.localizedDescription);
// handle call decline failure
...
return;
}
// handle call decline success
...
}];
Colgar
Para un call:
call.hangUp();
val hangupCallListener = object: NexmoRequestListener<NexmoCall> {
override fun onSuccess(nexmoCall: NexmoCall?) {
Log.d("TAG", "Call hangup: $nexmoCall")
}
override fun onError(apiError: NexmoApiError) {
Log.d("TAG", "Error: Unable to hangup call ${apiError.message}")
}
}
nexmoCall.hangup(hangupCallListener)
NexmoRequestListener<NexmoCall> hangupCallListener = new NexmoRequestListener<NexmoCall>() {
@Override
public void onSuccess(@Nullable NexmoCall nexmoCall) {
Log.d("TAG", "Call hangup: " + nexmoCall);
}
@Override
public void onError(@NonNull NexmoApiError apiError) {
Log.d("TAG", "Error: Unable to hangup call " + apiError.getMessage());
}
};
nexmoCall.hangup(hangupCallListener);
call.hangup()
[call hangup];
Escuchar eventos de llamada
Para ver información actualizada sobre el estado de una llamada, por ejemplo, para saber si el otro miembro ha contestado o ha colgado la llamada, debes escuchar los eventos de llamada.
Para ver información actualizada sobre el estado de la convocatoria y sus miembros:
application.on("call:status:changed",(call) => {
...
});
val callEventListener = object : NexmoCallEventListener {
// ...
}
nexmoCall.addCallEventListener(callEventListener)
Retire el oyente cuando sea necesario:
nexmoCall?.removeCallEventListener(callEventListener)
NexmoCallEventListener callEventListener = new NexmoCallEventListener() {
// ...
}
nexmoCall.addCallEventListener(callEventListener);
Retire el oyente cuando sea necesario:
nexmoCall.removeCallEventListener(callEventListener);
Añade el ViewControllero similar, como delegado del call antes de contestar:
call.setDelegate(self)
call.answer { [weak self] error in
...
}
ViewController ahora tendrán que ajustarse a NXMCallDelegate:
extension ViewController: NXMCallDelegate {
func call(_ call: NXMCall, didUpdate member: NXMMember, with status: NXMCallMemberStatus) {
// Handle call status updates
...
}
func call(_ call: NXMCall, didUpdate member: NXMMember, isMuted muted: Bool) {
// Handle member muting updates
...
}
func call(_ call: NXMCall, didReceive error: Error) {
print("call error: \(error.localizedDescription)")
// Handle call errors
...
}
}
Añade el ViewControllero similar, como delegado del call antes de contestar:
[call setDelegate:self];
[call answer:^(NSError * _Nullable error) {
...
}];
ViewController ahora tendrán que ajustarse a NXMCallDelegate:
@interface ViewController () <NXMCallDelegate>
...
@end
@implementation ViewController
...
//MARK:- NXMCallDelegate
- (void)call:(nonnull NXMCall *)call didUpdate:(nonnull NXMMember *)member withStatus:(NXMCallMemberStatus)status {
// Handle call status updates
...
}
- (void)call:(nonnull NXMCall *)call didUpdate:(nonnull NXMMember *)member isMuted:(BOOL)muted {
// Handle member muting updates
...
}
- (void)call:(nonnull NXMCall *)call didReceive:(nonnull NSError *)error {
NSLog(@"call error: %@", [error localizedDescription]);
// Handle call errors
...
}
@end