Anrufe entgegennehmen
Um einen eingehenden In-App-Anruf zu erhalten, sollten Sie sich registrieren und auf eingehende Anrufereignisse hören:
Um einen eingehenden In-App-Anruf zu erhalten, sollten Sie auf eingehende Anrufereignisse achten:
application.on("member:call", (member, call) => {
...
});
Die Listener-Methode empfängt eine member Objekt, das Informationen über den Anrufer enthält, und ein call Objekt, mit dem Sie mit dem laufenden Anruf interagieren können. Mit letzterem können Sie Methoden wie Annehmen, Ablehnen und Auflegen ausführen.
val incomingCallListener = NexmoIncomingCallListener {
Log.d("TAG", "Incoming call $it")
}
val client = NexmoClient.get()
client.addIncomingCallListener(incomingCallListener)
Entfernen Sie den Hörer bei Bedarf:
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);
Entfernen Sie den Hörer bei Bedarf:
client.removeIncomingCallListeners();
hinzufügen NXMClientDelegate als Erweiterung zu einer ViewController oder ähnlich:
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
...
}
}
Haben Sie eine ViewControlleroder ähnlich, entsprechen 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
Dann können Sie Methoden wie Annehmen, Ablehnen und Auflegen ausführen.
Antwort
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);
Die Verwendung des call Objekt empfangen in 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
...
}
Die Verwendung des call Objekt empfangen in client:didReceiveCall::
[call answer:^(NSError * _Nullable error) {
if (error) {
NSLog(@"error answering call: %@", error.localizedDescription);
// handle call answer failure
...
return;
}
// handle call answer success
...
}];
Ablehnen
call.reject();
Die Verwendung des call Objekt empfangen in 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
...
}
Die Verwendung des call Objekt empfangen in client:didReceiveCall::
[call reject:^(NSError * _Nullable error) {
if (error) {
NSLog(@"error answering call: %@", error.localizedDescription);
// handle call decline failure
...
return;
}
// handle call decline success
...
}];
Auflegen
Für ein laufendes 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];
Auf Anrufereignisse achten
Um den aktuellen Status eines Anrufs zu erfahren, z. B. ob der andere Teilnehmer den Anruf angenommen oder aufgelegt hat, sollten Sie die Anrufereignisse abhören.
Aktuelle Informationen über den Stand des Aufrufs und seine Mitglieder:
application.on("call:status:changed",(call) => {
...
});
val callEventListener = object : NexmoCallEventListener {
// ...
}
nexmoCall.addCallEventListener(callEventListener)
Entfernen Sie den Hörer bei Bedarf:
nexmoCall?.removeCallEventListener(callEventListener)
NexmoCallEventListener callEventListener = new NexmoCallEventListener() {
// ...
}
nexmoCall.addCallEventListener(callEventListener);
Entfernen Sie den Hörer bei Bedarf:
nexmoCall.removeCallEventListener(callEventListener);
Hinzufügen der aktuellen ViewControlleroder ähnliches, als Delegierter für die call bevor er antwortet:
call.setDelegate(self)
call.answer { [weak self] error in
...
}
ViewController müssen nun den folgenden Anforderungen entsprechen 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
...
}
}
Hinzufügen der aktuellen ViewControlleroder ähnliches, als Delegierter für die call bevor er antwortet:
[call setDelegate:self];
[call answer:^(NSError * _Nullable error) {
...
}];
ViewController müssen nun den folgenden Anforderungen entsprechen 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