Release Notes

Product deprecation notice

Effective April 30th, 2026, Vonage In-App Messaging will no longer be available. Access for new users will be closed, and the service will be discontinued for all existing users.

If you have any questions regarding this product’s discontinuation, please contact your account manager or our support team.

5.0.1 - 2022-09-29

Fixed

  • Socket handshake config cleared on logout

5.0.0 - 2022-09-01

Added

  • Support for XCFrameworks for M1

4.3.2 - 2022-07-01

Fix

  • Fix transition from mute to unmute on media object
  • Fix event parsing for NXMCustomEvent.customType

4.3.1 - 2022-05-09

Fix

  • Fix [NXMConversation sendMessage:message completionHandler:handler] for NXMMessageTypeImage, NXMMessageTypeAudio, NXMMessageTypeVideo and NXMMessageTypeFile message types.

4.3.0 - 2022-04-28

Added

  • pushNotificationTTL property added to NXMClientConfig to set TTL for push notifications.
  • [NXMConversation sendMarkDeliveredMessage:message completionHandler:handler] method added to send delivery receipts.
  • [NXMConversation sendMarkSeenMessage] now supports seen status for all messages.
  • NXMMessageStatusTypeSubmitted, NXMMessageStatusTypeRejected, NXMMessageStatusTypeUndeliverable states added to NXMMessageStatusEvent

4.2.1 - 2022-04-06

Fixed

  • [NXMClient uploadAttachmentWithType:name:data:completionHandler:] method to upload attachments returns with image data

4.2.0 - 2022-03-24

Added

  • Support for call:transfer within NXMCall
  • [NXMCallDelegate call:didTransfer:event:] to receive new call transfer event when call transferred to a new conversation.

Enhancements

  • WebRTC dependency upgraded to version 84.0.22.

4.1.0 - 2022-02-25

Added

  • [NXMClient getDeviceId] to retrieve device identifier.

4.0.6 - 2022-02-15

Fixed

  • Fix DSYM Warnings

4.0.5 - 2022-02-15

Added

  • Bitcode Support

4.0.4 - 2022-01-14

Fixed

  • Inbound call event processing queue defaults to non suspended

4.0.3 - 2021-12-13

Fixed

  • Umbrella header.

4.0.2 - 2021-12-07

Fixed

  • CocoaPods dependencies.

4.0.0 - 2021-12-06

Added

  • [NXMConversation sendMessage:completionHandler:] method to send NXMMessage.
  • [NXMClient uploadAttachmentWithType:name:data:completionHandler:] method to upload attachments.
  • NXMMessage represents a message to send.
  • NXMMessageType for messages of type text, image, audio, video, file, template, vcard and custom.
  • NXMEventTypeMemberMessageStatus, a new NXMEventType case, represents a member message status event that can be received on an NXMConversation.

Enhancements

  • WebRTC dependency upgraded to version 84.0.0.
  • Enforce direction for NXMCallMemberStatus during calls.

Changed

  • NXMDirectionType renamed to NXMChannelType.

Deprecated

  • [NXMConversation sendText:completionHandler:] method.
  • [NXMConversation sendAttachmentWithType:name:data:completionHandler:] method.

3.3.0 - 2021-11-22

Added

  • NXMClientConfig's apiPinning and websocketPinning optional fields to enable HTTP and web-socket SSL pinning.
  • [NXMPinningConfig fromPublicKeys:] method to create a public-key-based pinning configuration.
  • NXMConnectionStatusReasonSSLPinningError describing a client connection update due to an SSL pinning error.

Changed

  • Minimum supported iOS version (IPHONEOS_DEPLOYMENT_TARGET) bumped to 10.3.

3.2.1 - 2021-11-08

Fixed

  • Stash events while conversation is downloading to avoid missed events

3.2.0 - 2021-10-19

Added

  • NXMClientConfig.autoMediaReoffer to allow to automatically reconnect media when network interfaces changes.
  • [NXMClientConfig description] for a quick NXMClientConfig's instance description.
  • NXMMediaConnectionStatus enumerate.
  • [NXMConversationDelegate conversation:onMediaConnectionStateChange:legId:] to receive media connection state changed notification.
  • [NXMConversation reconnectMedia] to trigger a media reconnection.
  • [NXMClient reconnectCallWithConversationId:andLegId:completionHandler:] to reconnect a call given a conversation id and a leg id.
  • NXMCall.conversation to get the conversation associated to a call.

Deprecated

  • [NXMClientConfig initWithApiUrl:websocketUrl:ipsUrl:].
  • [NXMClientConfig initWithApiUrl:websocketUrl:ipsUrl:iceServerUrls:].
  • [NXMClientConfig initWithApiUrl:websocketUrl:ipsUrl:useFirstIceCandidate:].
  • [NXMClientConfig initWithApiUrl:websocketUrl:ipsUrl:iceServerUrls:useFirstIceCandidate].

3.1.0 - 2021-09-06

Added

  • [NXMClient inAppCallWithCallee:completionHandler:] method to perform in-app calls.
  • [NXMClient serverCallWithCallee:customData:completionHandler:] method to perform server calls, optionally specifying customData.

Enhancements

  • Internal API calls optimized for conversation creation.

Deprecated

  • [NXMClient call:callHandler:completionHandler:] method.
  • NXMCallHandler enumerate.
  • [NXMLogger getLogFileNames] method.

3.0.1 - 2021-07-12

Fixed

  • Sending DTMF during calls.
  • Prewarmed media termination.

Changed

  • NXMMemberEvent's member substituted with memberId.

3.0.0 - 2021-07-01

Added

  • Added NXMMemberSummary returned by [NXMConversation getMembersPageWithPageSize:order:completion:] (paginated), representing a subset of member's information.
  • Added NXMMemberEvent's invitedBy that represents the inviter name, if exists.
  • Added NXMEventEmbeddedInfo to all events returned by NXMEvent's embeddedInfo and containing the NXMUser linked to the event.
  • Added [NXMConversation getMemberWithMemberUuid:completion:] returning the member given its identifier.

Enhancements

  • Allow 1K members on a conversation.
  • Improved callServer setup time by pre-warming leg.
  • Disabled media after RTC hangup event.
  • Fixed text typing events handling.

Breaking changes

  • Removed NXMCallMember, replaced with NXMMember.
  • Removed NXMCallMember's status, moved to [NXMCall callStatusForMember:member:].
  • Removed [NXMCallMember mute:] converted into [NXMMember enableMute] and [NXMMember disableMute].
  • Removed NXMConversation's allMembers (replaced with [NXMConversation getMembersPageWithPageSize:order:completion:] (paginated)).
  • Removed [NXMConversationUpdateDelegate conversation:didUpdateMember:withType:], replaced with [NXMConversationDelegate conversation:didReceiveMemberEvent:] with the following possible states: NXMMemberStateInvited, NXMMemberStateJoined and NXMMemberStateLeft. Can be subscribed to using NXMConversation's delegate.
  • Renamed NXMCall's otherCallMembers to allMembers.
  • Renamed NXMCall's myCallMember to myMember.
  • The legs endpoint should be included in acl paths on JWT token creation.
"acl": {
  "paths": {
    ...,
    "/*/legs/**": {}
  }
}

2.5.0 - 2020-11-23

Changed

  • Renamed NXMCallMemberStatusCanceled to NXMCallMemberStatusCancelled.
  • Renamed NXMLegStatusCanceled to NXMLegStatusCancelled.

Enhancements

  • Notified with NXMCallMemberStatusCancelled on NXMCallDelegate for call hang up.

2.4.0 - 2020-09-24

Added

  • Expose the reason NXMConnectionStatusReasonTokenExpired on connection status NXMConnectionStatusDisconnected for the NXMClientDelegate.

2.3.0 - 2020-08-17

Added

  • [NXMClientConfig AMS] static method.

Fixed

  • Custom events parsing.

2.2.2 - 2020-07-20

Fixed

  • Event syncing after socket disconnection.

2.2.1 - 2020-07-06

Fixed

  • Server-call error reported by NXMCallDelegate on call completion.

Enhancements

  • Improved call events handling.
  • Improved conversation expiration handling.

2.2.0 - 2020-04-22

Added

  • Added isConnected method to NXMClient to show current connection state.
[NXNClient.shared isConnected]

Fixed

  • API Event client_ref handling.

2.1.10 - 2020-04-16

Enhancements

  • Improved single ICE candidate gathering implementation.

2.1.9 - 2020-04-14

Fixed

  • NXMClientConfig convenience initializer implementations.

2.1.8 - 2020-04-02

Added

  • Add useFirstIceCandidate parameters to NXMClientConfig
NXMClientConfig *config = [[NXMClientConfig alloc] initWithApiUrl:restUrl
                                                     websocketUrl:wsUrl
                                                           ipsUrl:ipsUrl
                                             useFirstIceCandidate:NO];

2.1.5 - 2020-03-18

Enhancements

  • Updated Device Registration format for production environments.

2.1.1 - 2020-03-05

Added

  • NXMClient's getConversationsPageWithSize:order:filter:completionHandler: method to get conversations with paging.

Deprecated

  • NXMClient's getConversationsPageWithSize:order:completionHandler: method to get conversations with paging.

Enhancements

  • The Client SDK is now built with Xcode 11.

2.1.0 - 2020-01-31

Added

  • NXMPushPayload for custom push notifications.
 if (NXNClient.shared isNexmoPushWithUserInfo:pushInfo]){
    NXMPushPayload *pushPayload = [myNXNClient processNexmoPushPayload:pushInfo];
    if (!pushPayload){
        // "Not a Nexmo push!!"
        return;
    };

    if (pushPayload.template == NXMPushTemplateCustom) {
        // Got custom push
        pushPayload.customData // your customData
    }
 }

2.0.0 - 2020-01-15

Added

  • NXMHelper with descriptionForEventType: method.
  • NXMConversation's getEvents: method replaced by getEventsPage:, getEventsPageWithSize:order:completionHandler:, getEventsPageWithSize:order:eventType:completionHandler:.
[myNXMConversation getEventsPagePageWithSize:15
                                       order:NXMPageOrderDesc
                                   eventType:nil
                           completionHandler:^(NSError * _Nullable error, NXMEventsPage * _Nullable page) {
                               if (error || !page) {
                                   // handle error...
                                   return;
                               }

                               // use page...
                           }];
  • NXMConversationsPage's nextPage: and previousPage: completion handlers are now non-null.

Fixed

  • Calling conversation.getEvents returned a NXMMemberEvent with the field member set to nil.

1.2.3 - 2019-12-17

Fixed

  • conversation.getEvents returned some NXMEvents containing a nil fromMember
  • Added descriptive userInfo for NXMErrors.

1.2.2 - 2019-12-12

Fixed

  • Added support for DTLS in WebRTC.
  • didReceiveCall and didReceiveConversation being called only once for the same call or conversation.
  • Added option to enable push notification with only one pushKit or userNotification token.
  • Fix for NXMClientConfig region URLs.
  • On login with invalid user, return NXMConnectionStatusReasonUserNotFound.
  • Added build architectures: armv7 and armv7s.

1.2.1 - 2019-12-05

Added

Configuration for ICE server:

NXMClientConfig *config = [[NXMClientConfig alloc] initWithApiUrl:restUrl
                                                     websocketUrl:wsUrl
                                                           ipsUrl:ipsUrl
                                                    iceServerUrls:iceUrls];
[NXMClient setConfiguration:config];

This configuration is optional and a default will be set if not specified.

Note: setConfiguration should be used before accessing NXMClient.shared.

Fixed

Corrected nil values for fromMember for NXMConversation events.

1.2.0 - 2019-12-03

Added

NXMClient's getConversationsPageWithSize:order:completionHandler: method to get conversations with paging.

NXMConversationsPage, which represents the retrieved page, provides the following instance methods:

  • hasNextPage / hasPreviousPage to check if forward/backward page retrieval is possible and
  • nextPage: / previousPage: to asynchronously retrieve the next/previous page.

Changed

NXMClient's getConversationWithUUid:completionHandler: method's name typo (now called getConversationWithUuid:completionHandler:).

1.1.1 - 2019-11-21

Added

NXMClientConfig object in order to change data center configuration. How to use:

[NXMClient setConfiguration:NXMClientConfig.DC];

NXMClient setConfiguration is optional, configuration will set to a default value.

Note: you must call setConfiguration method before using NXMClient.shared.

1.1.0 - 2019-11-14

Fixed

  • iOS 13 push notifications support.
  • Start server call stability.
  • Receiving a DTMF event in call and conversation.

Added

NXMConversationDelegate did receive DTMF event method:

- (void)conversation:(nonnull NXMConversation *)conversation didReceiveDTMFEvent:(nullable NXMDTMFEvent *)event;

Changed

NXMClient - client enable push notifications method changed. param pushKitToken - only for VoIP push (incoming calls). param userNotificationToken - all push types:

- (void)enablePushNotificationsWithPushKitToken:(nullable NSData *)pushKitToken
                          userNotificationToken:(nullable NSData *)userNotificationToken
                                      isSandbox:(BOOL)isSandbox
                              completionHandler:(void(^_Nullable)(NSError * _Nullable error))completionHandler;

1.0.0 - 2019-09-05

Fixed

  • NexmoClient when disconnected returns error callback for all function.
  • CallMember status calculated by the current leg status.
  • CallMember supports failed, busy, timeout and canceled statuses.
  • Supports member invited.
  • Conversation has media methods.
  • NexmoClient is now singleton.
  • Call method changed to string instead of array.
  • NexmoClient delegate methods renamed.

Added

  • Added conversation media:
NXMConversation myConversation;
[myConversation enableMedia];   // my media will be enabled
[myConversation disableMedia];  // my media will be disabled
  • Added invite member:
NXMConversation myConversation;
[myConversation inviteMemberWithUsername:@"someUsername"
                              completion:myCompletionBlock];
  • Added the member state initiator:
NXMMember *member = someMember;
NSDictionary<NSValue *, NXMInitiator *> *initiators = member.initiators;

NXMInitiator leftStateInitiator = initiators[NXMMemberStateLeft];
leftStateInitiator.isSystem;
leftStateInitiator.userId;
leftStateInitiator.memberId;
leftStateInitiator.time;
  • Added NXMConversationUpdateDelegate to notify on member updates like media,leg, and state.
  • Added updatesDelegate property to NXMConversation:
@property (nonatomic, weak, nullable) id <NXMConversationUpdateDelegate> updatesDelegate;

Example:

@interface MyClass() <NXMConversationUpdateDelegate>
@implementation MyClass

- (void)setConversation:(NXMConversation *conversation) {
    conversation.updatesDelegate(self); // register to conversation updatesDelegate
}

- (void)conversation:(nonnull NXMConversation *)conversation didUpdateMember:(nonnull NXMMember *)member withType:(NXMMemberUpdateType)type {
    if (type == NXMMemberUpdateTypeState) {
        // the member state changed
    }

    if (type == NXMMemberUpdateTypeMedia) {
        // the member media changed
    }
}
@end

Changed

  • NXMClient is now a singleton:
NXMClient.shared // the shared instance of NXMClient
  • Renamed:
@property (nonatomic, readonly, nullable, getter=getToken) NSString *authToken; // was token

// was - (void)login;
- (void)loginWithAuthToken:(NSString *)authToken;

// was - (void)refreshAuthToken:(nonnull NSString *)authToken;
- (void)updateAuthToken:(nonnull NSString *)authToken;

// was callees array
- (void)call:(nonnull NSString *)callee
    callHandler:(NXMCallHandler)callHandler
    delegate:(nullable id<NXMCallDelegate>)delegate
  completion:(void(^_Nullable)(NSError * _Nullable error, NXMCall * _Nullable call))completion;
completionHandler:(void(^_Nullable)(NSError * _Nullable error, NXMCall * _Nullable call))completionHandler;
  • NXMClientDelegate renamed:
@protocol NXMClientDelegate <NSObject>

// was - (void)connectionStatusChanged:(NXMConnectionStatus)status reason:(NXMConnectionStatusReason)reason;
- (void)client:(nonnull NXMClient *)client didChangeConnectionStatus:(NXMConnectionStatus)status reason:(NXMConnectionStatusReason)reason;

// was - (void)incomingCall:(nonnull NXMCall *)call;
- (void)client:(nonnull NXMClient *)client didReceiveCall:(nonnull NXMCall *)call;

// was - (void)incomingConversation:(nonnull NXMConversation *)conversation;
- (void)client:(nonnull NXMClient *)client didReceiveConversation:(nonnull NXMConversation *)conversation;
@end
  • NXMConversation otherMembers property renamed to allMembers:
NXMConversation myConversation = someConversation;
NSArray<NXMMember *> * allMembers = myConversation.allMembers // return the all conversation members

- (void)joinMemberWithUsername:(nonnull NSString *)username // username instead of userId
  • NXMConversationDelegate renamed methods:
// was - (void)customEvent:(nonnull NXMCustomEvent *)customEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveCustomEvent:(nonnull NXMCustomEvent *)event;

// was - (void)textEvent:(nonnull NXMMessageEvent *)textEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveTextEvent:(nonnull NXMTextEvent *)event;

// was - (void)attachmentEvent:(nonnull NXMMessageEvent *)attachmentEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveImageEvent:(nonnull NXMImageEvent *)event;

// - (void)messageStatusEvent:(nonnull NXMMessageStatusEvent *)messageStatusEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveMessageStatusEvent:(nonnull NXMMessageStatusEvent *)event;

// was - (void)typingEvent:(nonnull NXMTextTypingEvent *)typingEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveTypingEvent:(nonnull NXMTextTypingEvent *)event;

// was - (void)memberEvent:(nonnull NXMMemberEvent *)memberEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveMemberEvent:(nonnull NXMMemberEvent *)event;

// was - (void)legStatusEvent:(nonnull NXMLegStatusEvent *)legStatusEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveLegStatusEvent:(nonnull NXMLegStatusEvent *)event;

// was - (void)mediaEvent:(nonnull NXMEvent *)mediaEvent;
- (void)conversation:(nonnull NXMConversation *)conversation didReceiveMediaEvent:(nonnull NXMMediaEvent *)event;
  • Use username instead of userId.

  • NXMCallDelegate renamed:

// was - (void)statusChanged:(nonnull NXMCallMember *)callMember;
- (void)didUpdate:(nonnull NXMCallMember *)callMember status:(NXMCallMemberStatus)status;
- (void)didUpdate:(nonnull NXMCallMember *)callMember muted:(BOOL)muted;

// was - (void)DTMFReceived:(nonnull NSString *)dtmf callMember:(nonnull NXMCallMember *)callMember;
- (void)didReceive:(nonnull NSString *)dtmf fromCallMember:(nonnull NXMCallMember *)callMember;
  • NXMEvent and NXMMemberEvent add member object instead of memberId:
@property (nonatomic, readonly, nonnull) NXMMember *member;
  • NXMImageInfo renamed properties:
@property NSInteger sizeInBytes; // was size
@property NXMImageSize size; // was type
  • NXMMessageStatusEvent renamed property:
@property NSInteger referenceEventId; // was refEventId
  • NexmoClient logger exposed - NXMLogger object:
[NXMLogger setLogLevel:NXMLoggerLevelDebug];
NSArray *logNames = [NXMLogger getLogFileNames];

Removed

  • NXMLoggerDelegate
NXMClient myClient = ...;
[myClient setLoggerDelegate:LoggerDelegate];

0.3.0 - 2019-06-03

Added

  • Interoperability with the JS and Android SDKs - Calls can now be placed between apps using the iOS, JS or Android SDKs.

Changed

  • NXMCallMember - added member channel with direction data:
@interface NXMCallMember : NSObject
...
@property (nonatomic, readonly, nullable) NXMChannel *channel;
...
@end
@interface NXMChannel : NSObject

@property (nonatomic, readonly, nonnull) NXMDirection *from;
@property (nonatomic, readonly, nullable) NXMDirection *to;

@end
@interface NXMDirection : NSObject

@property (nonatomic, assign) NXMDirectionType type;
@property (nonatomic, copy, nullable) NSString *data;

@end

Removed

  • NXMCallMember's phoneNumber and channelType were removed.

0.2.56 - 2019-01-24

Added

  • Change log file.

Changed

  • Memory management improvements.
  • Fetch missing and new events on network changes.
  • Returning User objects instead of Ids.
  • Bug fixes.
  • Add non-null or nullable to properties.
  • Rename call.decline to call.reject.

0.1.52 - 2019-01-01