Menu

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

3.x Changelog

The Change Logs below include links to specific patch-level artifacts. We don't recommend using these links unless you have a known need for a specific patch level.

3.0.0-preview5 (October 24, 2018)

Fixed Issues

  • CLIENT-5186 Fixed a crash when network is lost during an active Call.
  • CLIENT-5132 The call:didDisconnectWithError: delegate method of the caller should be called with nil error instead of call:didFailToConnectWithError: when the TVOCallInvite is rejected with answerOnBridge enabled.
  • CLIENT-4837 Fixed a crash caused by SIGPIPE when a signaling socket is closed due to an error.

Known Issues

  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview4 (October 2, 2018)

Enhancements

  • Added customParameters property to TVOCallInvite.

Pass custom parameters in TwiML

  <?xml version="1.0" encoding="UTF-8"?>
  <Response>
    <Dial callerId="client:alice">
      <Client>
        <Identity>bob</Identity>
        <Parameter name="caller_first_name" value="alice" />
        <Parameter name="caller_last_name" value="smith" />
      </Client>
    </Dial>
  </Response>

callInvite.customParameters:

  {
    "caller_first_name" = "alice";
    "caller_last_name" = "smith";
  }

Fixed Issues

  • CLIENT-5202 Fixed a potential crash caused by a memory corruption when a custom TVOAudioDevice is created.
  • CLIENT-5160 The Voice SDK is built using the audio variant of WebRTC 67. Developers are no longer are required to add NSCameraUsageDescription key in app's Info.plist to consume the Voice SDK in an app and upload it to the App Store. #164
  • CLIENT-5204 Call audio was not able to recover from AVAudioSession interruptions. TVOAVAudioSessionConfigurationBlock now configures AVAudioSession.preferredIOBufferDuration to 20 milliseconds by default, to match changes in WebRTC.

Known Issues

  • CLIENT-5059 Calls made to a PSTN number may not get connected when answerOnBridge is set to true.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio's Network Traversal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4547 Insights is not published.
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs.
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview3 (September 12, 2018)

Bug Fixes

  • CLIENT-5101 The inject_credentials.sh which was accidentally included in the TwilioVoice.framework bundle has been removed.

Enhancements

  • This release is based on Chromium WebRTC 67.
  • Provide a stateless mechanism for processing push notifications related to call invites and call invite cancellations. The [TwilioVoice handleNotification:] no longer raises errors via the notificationError: method when processing invalid notifications, instead a BOOL value is returned when it is called. The boolean value is YES when the provided notification payload results in a TVOCallInvite or TVOCancelledCallInvite object. If [TwilioVoice handleNotification:] returns NO it means the data provided was not a Twilio Voice push notification. The TVOCallInvite has an accept() and a reject() method. While the TVOCancelledCallInvite simply provides the to, from, and callSid fields also available in the TVOCallInvite object. The callSid can be used to associate a TVOCallInvite with a TVOCancelledCallInvite.
  • notificationError: is removed from the TVONotificationDelegate protocol. cancelledCallInviteReceived: is added for the SDK to notify the application when a Call cancellation notification is received.

Processing push notifications in 2.X

- (void)pushRegistry:(PKPushRegistry *)registry
        didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
             forType:(NSString *)type {
    [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];
}

#pragma mark - TVONotificationDelegate

- (void)callInviteReceived:(TVOCallInvite *)callInvite {
    if (callInvite.state == TVOCallInviteStatePending) {
        [self handleCallInviteReceived:callInvite];
    } else if (callInvite.state == TVOCallInviteStateCanceled) {
        [self handleCallInviteCanceled:callInvite];
    }
}

- (void)notificationError:(NSError *)error {
    NSLog(@"Failed processing notification payload: %@", error);
}

- (void)handleCallInviteReceived:(TVOCallInvite *)callInvite {
    // Call invite received
}

- (void)handleCallInviteCanceled:(TVOCallInvite *)callInvite {
    // Call invite canceled
}

Processing push notifications in 3.X

- (void)pushRegistry:(PKPushRegistry *)registry
        didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
             forType:(NSString *)type {
    BOOL result = [TwilioVoice handleNotification:payload.dictionaryPayload delegate:self];
    if (!result) {
        NSLog(@"The processed data was not a Twilio push notification payload");
    }
}

#pragma mark - TVONotificationDelegate

- (void)callInviteReceived:(TVOCallInvite *)callInvite {
    // Call invite received
}

- (void)cancelledCallInviteReceived:(TVOCancelledCallInvite *)cancelledCallInvite {
    // Call invite cancelled
}

API Changes

  • Deprecated the TVOAudioOptions.levelControl and TVOAudioOptions.levelControlInitialPeakLevelDBFS properties as they are no longer supported in Chromium WebRTC 67.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview3 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
  • CLIENT-4547 Insights is not published
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview2 (August 28, 2018)

Enhancements

  • Introduced a new callback method [TVOCallDelegate callDidStartRinging:]. This callback is emitted once before the [TVOCallDelegate callDidConnect:] callback when the callee is being alerted of a Call. The duration of the TVOCallStateRinging is determined by the answerOnBridge flag provided in the Dial verb of your TwiML application associated with this client. If the answerOnBridge flag is false, which is the default, the [TVOCallDelegate callDidConnect:] callback will be emitted immediately after [TVOCallDelegate callDidStartRinging:]. If the answerOnBridge flag is true this will cause the Call to emit the callDidConnect callback only until the call is answered. See answeronbridge for more details on how to use it with the Dial TwiML verb. If the twiML response contains a Say verb, then the call will emit the [TVOCallDelegate callDidConnect:] callback immediately after [TVOCallDelegate callDidStartRinging:] is raised, irrespective of the value of answerOnBridge being set to true or false.
  • Added a new Call state TVOCallStateRinging.
  • TwilioVoice.region is moved to TVOCallOptions.region.
  • Added a getStatsWithBlock: method to TVOCall that builds a TVOStatsReport with metrics for all the audio tracks in a Call.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview2 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
  • CLIENT-2985 IPv6 is not supported.
  • CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
  • CLIENT-4547 Insights is not published
  • CLIENT-4672 CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
  • CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. #117

3.0.0-preview1 (August 10, 2018)

This is our first WebRTC based release using Chromium WebRTC 57.

This SDK introduces audio device APIs. The Voice SDK uses TVODefaultAudioDevice by default. This release intruduces a new protocol, TVOAudioDevice. This protocol gives you the ability to replace TVODefaultAudioDevice. By implementing the TVOAudioDevice protocol, you can write your own audio capturer to feed audio samples to the Voice SDK and an audio renderer to receive the remote audio samples. For example, you could integrate with ReplayKit2 and capture application audio for broadcast or play music using AVAssetReader.

This SDK introduces TVOConnectOptions and TVOAcceptOptions to allow developers to make behaviorial changes associated with a Call.

This SDK allows multiple active Calls to be managed by the application.

Enhancements

  • Introduced TwilioVoice.audioDevice class property. You should set your audio device on TwilioVoice.audioDevice before performing any other actions with the SDK such as creating Tracks or connecting to a Call.
  • Added TVODefaultAudioDevice to render and capture audio. By default, the Voice SDK uses TVODefaultAudioDevice to capture and render audio.
  • Added the ability to provide your own audio capturing and rendering via the TVOAudioDevice protocol. As a part of this change we've also added TVOAudioFormat which describes audio that is being captured and rendered.
  • This release deprecates CallKitIntegration category from TwilioVoice in favor of a new property called TVODefaultAudioDevice.enabled. This property provides developers with a mechanism to enable or disable the activation of the audio device prior to connecting to a Call or to stop or start the audio device while you are already connected to a Call. A Call can now be connected without activating the audio device by setting TVODefaultAudioDevice.enabled to NO and can be enabled during the lifecycle of the Call by setting TVODefaultAudioDevice.enabled to YES. The default value is YES. This API change was made to ensure full compatibility with CallKit as well as supporting other use cases where developers may need to disable the audio device during a call.

Examples #1 - Changing the audio route from receiver to the speaker in a live call:

// The Voice SDK uses TVODefaultAudioDevice by default.

// ... connect to a Call. The `TVODefaultAudioDevice` is configured to route audio to the receiver by default.

TVODefaultAudioDevice *audioDevice = (TVODefaultAudioDevice *)TwilioVoice.audioDevice;

audioDevice.block =  ^ {
    // We will execute `kDefaultAVAudioSessionConfigurationBlock` first.
    kDefaultAVAudioSessionConfigurationBlock();

    if (![session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]) {
        NSLog(@"AVAudiosession overrideOutputAudioPort %@",error);
    }
};
audioDevice.block();

Example #2 - Connecting to a Call using the AVAudioSessionCategoryPlayback category:

id<TVOAudioDevice> audioDevice = [TVODefaultAudioDevice audioDeviceWithBlock:^ {

    // Execute the `kDefaultAVAudioSessionConfigurationBlock` first.
    kDefaultAVAudioSessionConfigurationBlock();

    // Overwrite the category to `playback`
    AVAudioSession *session = [AVAudioSession sharedInstance];
    NSError *error = nil;
    if (![session setCategory:AVAudioSessionCategoryPlayback
                         mode:AVAudioSessionModeVoiceChat
                      options:AVAudioSessionCategoryOptionAllowBluetooth
                        error:&error]) {
        NSLog(@"AVAudioSession setCategory:options:mode:error: %@",error);
    }
}];

TwilioVoice.audioDevice = audioDevice;

TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
  • Migrated the API to make an outbound Call from [TwilioVoice call] to [TwilioVoice connectWithOptions:delegate:].
TVOConnectOptions *connectOptions = [TVOConnectOptions optionsWithAccessToken:self.accessToken
                                                                       block:^(TVOConnectOptionsBuilder *builder) {
   builder.params = twiMLParams;
   builder.uuid = [NSUUID UUID];
}];
TVOCall *call = [TwilioVoice connectWithOptions:connectOptions delegate:self];
  • Migrated the API to accept a TVOCallInvite using TVOAcceptOptions.
TVOAcceptOptions *options = [TVOAcceptOptions optionsWithCallInvite:self
   block:^(TVOAcceptOptionsBuilder *builder) {
   builder.uuid = weakSelf.callInvite.uuid;
}];
TVOCall *call = [callInvite acceptWithOptions:options delegate:strongSelf];
  • Added standalone log modules: TVOLogModuleCore, TVOLogModulePlatform, TVOLogModuleSignaling and TVOLogModuleWebRTC.
  • [TwilioVoice setModule:logLevel:] is now [TwilioVoice setLogLevel:module:].
  • [TwilioVoice logLevelForModule:] is added for retrieving log level for specific module.
  • [TwilioVoice version] is now [TwilioVoice getVersion] to avoid type conflict with NSObject.
  • Voice iOS SDK 3.0.0 supports iOS 10.0 and later versions.

Known Issues

  • CLIENT-5121 The apps using 3.0.0-preview1 may need to include NSCameraUsageDescription key and purpose string in it's Info.plist in order to submit the app to the App Store. The WebRTC used by the Twilio Voice SDK is using camera APIs. We are working on building the Voice SDK with the audio only variant of WebRTC where this workaround will not be required. #163
  • CLIENT-5059 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
  • [CLIENT-4943] Restrictive networks may fail unless ICE servers are provided via TVOConnectOptions or TVOAcceptOptions. ICE servers can be obtained from Twilio Network Travarsal Service.
  • [CLIENT-4805] The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
  • [CLIENT-4998] Network handoff, and subsequent connection renegotiation is not supported.
  • [CLIENT-2985] IPv6 is not supported.
  • [CLIENT-4698] Params that are passed to your TwiML Application while making calls are not URL encoded
  • [CLIENT-4547] Insights is not published
  • [CLIENT-4672] [CLIENT-4673] Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.

Loading Code Sample...