Vonage Client SDKへの移行

Nexmo Client SDKをお使いの場合、Vonage Client SDKに移行する際に考慮すべき変更点があります。

クライアントのインスタンス化

AndroidとiOSでは、SDK Clientはもはやシングルトンではありません。

// Nexmo SDK
let client = new NexmoClient()

// Vonage SDK

// If loaded with a <script> tag:
const client = new vonageClientSDK.VonageClient();

// If loaded via import:
const client = new VonageClient();
// Nexmo SDK
client = NexmoClient.Builder().build(this)

// Vonage SDK
client = VoiceClient(this)
// Nexmo SDK
let client = NXMClient.shared

// Vonage SDK
let client = VGVoiceClient()

セッション管理

以前は、AndroidとiOSのNexmo Client SDKでは、次のように呼び出していました。 login/createSession そして、リスナーを介してあなたの最初のセッションの作成に関する最新情報を受け取ります。

JavaScript Vonage Client SDKでは、アプリオブジェクトを受け取らなくなり、代わりにセッションIDを受け取ります。

Vonage Client SDKには、最初のセッション作成が成功したかどうかを知るためのコールバックがあります。再接続を含む更なるセッションの更新は、リスナー/デリゲートメソッドで利用可能です。

// Nexmo SDK
client.createSession(token)
  .then(app => {
    ...
  })
  .catch(error => {
    ...
  });

// Vonage SDK
client.createSession(token)
  .then(sessionId => {
    ...
  })
  .catch(error => {
    ...
  });
// Nexmo SDK
client.login(token)

client.setConnectionListener { connectionStatus, _ ->
    when (connectionStatus) {
        ConnectionStatus.CONNECTED ->
        ConnectionStatus.DISCONNECTED ->
        ConnectionStatus.CONNECTING ->
        ConnectionStatus.UNKNOWN ->
    }
}


// Vonage SDK
client.createSession(token) { err, sessionId ->
    when(err) {
        null ->  // Session created 🎉
        else ->  // Handle error
    }
}

client.setSessionErrorListener { err -> }

client.setReconnectingListener {}

client.setReconnectionListener {}
// NexmoSDK
client.login(withAuthToken: token)

class ExampleClientDelegate: NSObject, NXMClientDelegate {
    func client(_ client: NXMClient, didChange status: NXMConnectionStatus, reason: NXMConnectionStatusReason) {
        switch status {
        case .connected:
        case .disconnected:
        case .connecting:
    }
}

// Vonage SDK
client.createSession(token) { error, sessionId in
    if (error != nil) {
        // Handle error
    } else {
        // Session created 🎉
    }
}

class ExampleClientDelegate: NSObject, VGClientDelegate {
    func client(_ client: VGBaseClient, didReceiveSessionErrorWith reason: VGSessionErrorReason) {}

    func clientWillReconnect(_ client: VGBaseClient) {}

    func clientDidReconnect(_ client: VGBaseClient) {}
}

電話番号

Vonage Client SDKでは、サーバーコールが唯一のコールタイプです。 inApp コールタイプは廃止されました。これは、すべてのコールフローでNCCOウェブフック・サーバーが必須となったことを意味します。

サーバーコールを行うためのパラメータが変更され、以前のtoとcontextフィールドが1つのパラメータになりました。既存の NCCO ウェブフックとの後方互換性のため、次のように指定できます。 to をコンテキスト・オブジェクトの一部とすることで、前と同じようにウェブフックに転送されます。

そうでない場合は、コンテキストパラメータを使用して、カスタムデータを answer_url ウェブフック

// Nexmo SDK
application.callServer("PHONE_NUMBER")
    .then(nxmCall => {
        ...
    })
    .catch(error => {
        ...
    });

// Vonage SDK
client.serverCall({ to: "PHONE_NUMBER" })
    .then(callId => {
        ...
    })
    .catch(error => {
        ...
    });
// NexmoSDK
client.serverCall("PHONE_NUMBER", null, object : NexmoRequestListener<NexmoCall> {
    override fun onSuccess(call: NexmoCall?) {
        // Handle call
    }

    override fun onError(apiError: NexmoApiError) {
        // Handle error
    }
})

// VonageSDK
client.serverCall(mapOf("to" to "PHONE_NUMBER")) { err, voiceCall ->
    when(err) {
        null -> {
            // Handle call
        }
        else -> // Handle error
    }
}
// Nexmo SDK
client.serverCall(withCallee: "PHONE_NUMBER", customData: nil) { (error, call) in
    // Handle error/call
}

// Vonage SDK
client.serverCall(["to":"PHONE_NUMBER"]) { (error, call) in
    // Handle error/call
}

通話/チャット・アクション

また、Vonage Client SDKには、通話終了、通話ミュート、メッセージ送信などのアクションを実行するためのオブジェクト上のメソッドがなくなりました。これらのアクションはすべてクライアント上のメソッドとして利用できます。これらのアクションを実行するには、アクションを実行したいコールまたは会話IDを保存する必要があります。

例えば、通話をミュートする:

// Nexmo SDK
conversation.me.mute(true);

// Vonage SDK
client.mute(callId)
    .then(() => {
        // Mute successful
    })
    .catch(error => {
        // Handle muting error
    });
// Nexmo SDK
callMember?.enableMute(muteListener)

// Vonage SDK
client.mute(callId) { 
    error ->
    when {
        error != null -> {
            // Handle muting error
        }
    }
}
// Nexmo SDK
callMember.enableMute()

// Vonage SDK
client.mute(callId) { error in
    if error != nil {
        // Handle muting error
    }
}

あるいはメッセージを送る:

// Nexmo SDK
conversation.sendMessage({
    "message_type": "text",
    "text": "Hello world!"
}).then((event) => {
    ...
}).catch((error)=>{
    ...
});


// Vonage SDK
client.sendMessageTextEvent("CONV_ID", "Hello world!")
    .then(timestamp => {
        ...
    }).catch(error => {
        ...
    });
// Nexmo SDK
conversation.sendMessage("Hello world!", object : NexmoRequestListener<Void> {
   ...
})

// Vonage SDK
client.sendMessageTextEvent("CONV_ID", "Hello world!") { error, timestamp ->
    ...
}
// Nexmo SDK
conversation.sendMessage("Hello world!") { error in
   ...
}

// Vonage SDK
client.sendMessageTextEvent("CONV_ID", text: "Hello world!") { error, timestamp in
    ...
}