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]forNXMMessageTypeImage,NXMMessageTypeAudio,NXMMessageTypeVideoandNXMMessageTypeFilemessage types.
4.3.0 - 2022-04-28
Added
pushNotificationTTLproperty added toNXMClientConfigto 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,NXMMessageStatusTypeUndeliverablestates added toNXMMessageStatusEvent
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:transferwithinNXMCall [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 sendNXMMessage.[NXMClient uploadAttachmentWithType:name:data:completionHandler:]method to upload attachments.NXMMessagerepresents a message to send.NXMMessageTypefor messages of typetext,image,audio,video,file,template,vcardandcustom.NXMEventTypeMemberMessageStatus, a newNXMEventTypecase, represents a member message status event that can be received on anNXMConversation.
Enhancements
- WebRTC dependency upgraded to version
84.0.0. - Enforce direction for
NXMCallMemberStatusduring calls.
Changed
NXMDirectionTyperenamed toNXMChannelType.
Deprecated
[NXMConversation sendText:completionHandler:]method.[NXMConversation sendAttachmentWithType:name:data:completionHandler:]method.
3.3.0 - 2021-11-22
Added
NXMClientConfig'sapiPinningandwebsocketPinningoptional fields to enable HTTP and web-socket SSL pinning.[NXMPinningConfig fromPublicKeys:]method to create a public-key-based pinning configuration.NXMConnectionStatusReasonSSLPinningErrordescribing a client connection update due to an SSL pinning error.
Changed
- Minimum supported iOS version (
IPHONEOS_DEPLOYMENT_TARGET) bumped to10.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.autoMediaReofferto allow to automatically reconnect media when network interfaces changes.[NXMClientConfig description]for a quickNXMClientConfig's instance description.NXMMediaConnectionStatusenumerate.[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.conversationto 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 specifyingcustomData.
Enhancements
- Internal API calls optimized for conversation creation.
Deprecated
[NXMClient call:callHandler:completionHandler:]method.NXMCallHandlerenumerate.[NXMLogger getLogFileNames]method.
3.0.1 - 2021-07-12
Fixed
- Sending DTMF during calls.
- Prewarmed media termination.
Changed
NXMMemberEvent'smembersubstituted withmemberId.
3.0.0 - 2021-07-01
Added
- Added
NXMMemberSummaryreturned by[NXMConversation getMembersPageWithPageSize:order:completion:](paginated), representing a subset of member's information. - Added
NXMMemberEvent'sinvitedBythat represents the inviter name, if exists. - Added
NXMEventEmbeddedInfoto all events returned byNXMEvent'sembeddedInfoand containing theNXMUserlinked to the event. - Added
[NXMConversation getMemberWithMemberUuid:completion:]returning the member given its identifier.
Enhancements
- Allow 1K members on a conversation.
- Improved
callServersetup time by pre-warming leg. - Disabled media after RTC hangup event.
- Fixed text typing events handling.
Breaking changes
- Removed
NXMCallMember, replaced withNXMMember. - Removed
NXMCallMember'sstatus, moved to[NXMCall callStatusForMember:member:]. - Removed
[NXMCallMember mute:]converted into[NXMMember enableMute]and[NXMMember disableMute]. - Removed
NXMConversation'sallMembers(replaced with[NXMConversation getMembersPageWithPageSize:order:completion:](paginated)). - Removed
[NXMConversationUpdateDelegate conversation:didUpdateMember:withType:], replaced with[NXMConversationDelegate conversation:didReceiveMemberEvent:]with the following possible states:NXMMemberStateInvited,NXMMemberStateJoinedandNXMMemberStateLeft. Can be subscribed to usingNXMConversation'sdelegate. - Renamed
NXMCall'sotherCallMemberstoallMembers. - Renamed
NXMCall'smyCallMembertomyMember. - The
legsendpoint should be included inaclpaths onJWTtoken creation.
"acl": {
"paths": {
...,
"/*/legs/**": {}
}
}
2.5.0 - 2020-11-23
Changed
- Renamed
NXMCallMemberStatusCanceledtoNXMCallMemberStatusCancelled. - Renamed
NXMLegStatusCanceledtoNXMLegStatusCancelled.
Enhancements
- Notified with
NXMCallMemberStatusCancelledonNXMCallDelegatefor call hang up.
2.4.0 - 2020-09-24
Added
- Expose the reason
NXMConnectionStatusReasonTokenExpiredon connection statusNXMConnectionStatusDisconnectedfor theNXMClientDelegate.
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
NXMCallDelegateon call completion.
Enhancements
- Improved call events handling.
- Improved conversation expiration handling.
2.2.0 - 2020-04-22
Added
- Added
isConnectedmethod toNXMClientto show current connection state.
[NXNClient.shared isConnected]
Fixed
- API Event
client_refhandling.
2.1.10 - 2020-04-16
Enhancements
- Improved single ICE candidate gathering implementation.
2.1.9 - 2020-04-14
Fixed
NXMClientConfigconvenience initializer implementations.
2.1.8 - 2020-04-02
Added
- Add
useFirstIceCandidateparameters toNXMClientConfig
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'sgetConversationsPageWithSize:order:filter:completionHandler:method to get conversations with paging.
Deprecated
NXMClient'sgetConversationsPageWithSize: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
NXMPushPayloadfor 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
NXMHelperwithdescriptionForEventType:method.NXMConversation'sgetEvents:method replaced bygetEventsPage:,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'snextPage:andpreviousPage:completion handlers are now non-null.
Fixed
- Calling
conversation.getEventsreturned aNXMMemberEventwith the fieldmemberset tonil.
1.2.3 - 2019-12-17
Fixed
conversation.getEventsreturned someNXMEvents containing a nilfromMember- Added descriptive
userInfoforNXMErrors.
1.2.2 - 2019-12-12
Fixed
- Added support for DTLS in WebRTC.
didReceiveCallanddidReceiveConversationbeing called only once for the same call or conversation.- Added option to enable push notification with only one
pushKitoruserNotificationtoken. - Fix for
NXMClientConfigregion URLs. - On login with invalid user, return
NXMConnectionStatusReasonUserNotFound. - Added build architectures:
armv7andarmv7s.
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/hasPreviousPageto check if forward/backward page retrieval is possible andnextPage:/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
NexmoClientwhen disconnected returns error callback for all function.CallMemberstatus calculated by the current leg status.CallMembersupports failed, busy, timeout and canceled statuses.- Supports member invited.
Conversationhas media methods.NexmoClientis now singleton.- Call method changed to string instead of array.
NexmoClientdelegate 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
NXMConversationUpdateDelegateto notify on member updates like media,leg, and state. - Added
updatesDelegateproperty toNXMConversation:
@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
NXMClientis 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;
NXMClientDelegaterenamed:
@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
NXMConversationotherMembersproperty renamed toallMembers:
NXMConversation myConversation = someConversation;
NSArray<NXMMember *> * allMembers = myConversation.allMembers // return the all conversation members
- (void)joinMemberWithUsername:(nonnull NSString *)username // username instead of userId
NXMConversationDelegaterenamed 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
usernameinstead ofuserId.NXMCallDelegaterenamed:
// 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;
NXMEventandNXMMemberEventadd member object instead ofmemberId:
@property (nonatomic, readonly, nonnull) NXMMember *member;
NXMImageInforenamed properties:
@property NSInteger sizeInBytes; // was size
@property NXMImageSize size; // was type
NXMMessageStatusEventrenamed property:
@property NSInteger referenceEventId; // was refEventId
NexmoClientlogger exposed -NXMLoggerobject:
[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'sphoneNumberandchannelTypewere 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-nullornullableto properties. - Rename
call.declinetocall.reject.
0.1.52 - 2019-01-01
Initial beta release with basic call and chat features.
Please refer to list of features and usage: https://developer.nexmo.com/
Cocoapods: https://cocoapods.org/pods/nexmoclient