私はAngularアプリでTwilioを使用しています。私はユーザーが特定のページにアクセスするたびにTwilioデバイスを初期化しています(顧客のページと呼ぶ)ので、ユーザーは特定の顧客に電話をかけることができます。この初期化関数は、顧客のコントローラに呼び出されます。Twilio.Deviceハンドラが既に存在するかどうかを確認する方法
function _initializeDevice(token, connectHandler, disconnectHandler) {
console.log('CALLED INITIALIZE DEVICE');
var device = Twilio.Device;
device.setup(token, {debug: true});
console.log(device);
device.connect(connectHandler);
device.disconnect(disconnectHandler);
device.offline(function() {
_getToken().then(function(result) {
device.setup(result.data.token, {debug: true});
});
});
device.error(_handleTwilioError);
}
そして、これは、上記に渡される切断ハンドラです:問題は、ユーザーが離れて顧客のページから移動したときに、ある
function onDisconnect() {
console.log('SAVING CALL');
// code to save call
}
とページを更新せずに戻ると、顧客コントローラが再び実行され、_initializeDevice
機能も再び実行されます。複数の接続/切断/その他。ハンドラは同じデバイスに登録されてしまうため、複数回実行する必要があるものが一度しか実行されません。
CALLED INITIALIZE DEVICE
[Device] Setting up PStream
[WSTransport] Opening socket
[WSTransport] attempting to connect
[WSTransport] Socket opened
[PStream] Setting token and publishing listen
[Device] Stream is ready
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Twilio.PeerConnection] signalingState is "have-local-offer"
[Twilio.PeerConnection] signalingState is "stable"
[Twilio.PeerConnection] iceConnectionState is "checking"
[Twilio.PeerConnection] iceConnectionState is "connected"
[Twilio.PeerConnection] iceConnectionState is "completed"
[Connection] Disconnecting...
[Twilio.PeerConnection] iceConnectionState is "closed"
[Twilio.PeerConnection] signalingState is "closed"
SAVING CALL
:ここ
だからここで私は最初は、顧客のページに移動して、初めて_initializeDevice
を呼び出すときに何が起こるかだ...問題を説明するために私のコンソールログのサンプルです
次に、顧客ページから離れて再び移動して、リフレッシュせずにコントローラが初期化コードを再度実行し、ハンドラを複製します。
CALLED INITIALIZE DEVICE
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
CALLED INITIALIZE DEVICE
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Device] Found existing Device; using new token but ignoring options
[PStream] Setting token and publishing listen
[Twilio.PeerConnection] signalingState is "have-local-offer"
[Twilio.PeerConnection] signalingState is "stable"
[Twilio.PeerConnection] iceConnectionState is "checking"
[Twilio.PeerConnection] iceConnectionState is "connected"
[Twilio.PeerConnection] iceConnectionState is "completed"
[Connection] Received HANGUP from gateway
[Connection] Disconnecting...
[Twilio.PeerConnection] iceConnectionState is "closed"
[Twilio.PeerConnection] signalingState is "closed"
SAVING CALL
SAVING CALL
SAVING CALL
Twilio.Device.destroy()
を使ってみましたが、ハンドラはまだあります。
ハンドラがすでにTwilioデバイスに接続されているかどうかを確認するにはどうすればよいですか?または、私はAngularアプリのどこか別の場所にイベントハンドラをつけていますか?
編集:参考のために、ここで私は(ボタンに添付)のコールを切断しています方法は次のとおりです。
function hangUp() {
Twilio.Device.disconnectAll();
}
申し訳ありませんが少し遅れて戻ってきましたが、Twilio.Device.instance.removeListener( 'disconnect'、disconnectHandler); '(上記のコードと同じ' disconnectHandler')と思われました働くハンドラはまだ2回呼び出されていました。 – chinaowl
気にしないで、私はそれを理解した!最初に 'Twilio.Device.instance._events.connect'を使ってハンドラのインスタンスを取得しなければなりませんでした。 – chinaowl