Release Notes
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