The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
# 12.1.1
This minor version fixes the issue when logout call returns with `404` HTTP error.
# 12.1.0
This minor version contains bug fixes and enhancements including:
- Added `serviceBaseUrl` property that can be set on the settings object.
- Fixed a hang risk warning that occurred when running the SDK in Xcode 14.
- Additional hardening to prevent crashes occurring in the SDK.
# 12.0.0
This major version provides support for iOS 16 and increases the iOS minimum deployment target from iOS 10.0 to iOS 11.0.
- Fixed crashes relating to the conversation screen.
# 11.0.0
This major version contains a number of bug fixes and improvements including:
- Improved APIs related to setting up a conversation delegate. The delegate should now be set by using the `setConversationDelegate` method on the `Smooch` class. It is no longer possible to set a delegate by directly modifying a `SKTConversation` object.
- Fixed an issue that caused the `unreadCountDidChange` delegate method to not be called in a multi-conversation setting.
- Fixed an issue that caused a "Done" button to incorrectly display in the navigation bar on smaller devices.
- Fixed an observer-related crash that could occur infrequently when switching between conversations on slow connections.
- Migrated to updated API documentation tooling.
# 10.1.3
This patch version contains a number of bug fixes and improvements including:
- Fixed an issue that caused the keyboard to render over the text-input field.
- Fixed an app crash related to showing the conversation.
# 10.1.2
This patch version contains a number of bug fixes and improvements including:
- Added support for Swift Package Manager.
- Fixed an issue where a crash could occur during login/logout.
- Fixed an issue where a user's location may fail to be sent.
- Fixed an issue where attempting to send an attachment could cause a crash on iPad.
- Fixed an issue where the typing indicator was not being shown.
This patch version contains a number of bug fixes and improvements including:
- Fixed an issue where the SDK could block the main thread when sending messages and presenting and dismissing the conversation screen.
- Fixed an issue where the conversation header disappeared when cancelling a Quick Photo.
- Improved error logging in the event of a message sending failure.
# 10.1.0
This minor version contains bug fixes and enhancements including:
- Better Message Delivery tracking - enabling integrators to know when a message arrives on the device.
- We now return the participant's userExternalId when fetching the conversation information
- Added customizations for Dark Mode.
- Fixed a bug with the composer for multi-line replies.
- Fixed a minor bug for the attachment button when using UISceneDelegate.
- Fixed a bug with the seen indicator not refreshing.
# 10.0.0
This major version contains support for XCFramework, and a number of bug fixes and improvements including:
- Xcode 12 Support
- Added ability to change the colour of text in a carousel.
- Hide/Disable keyboard.
- Fixed a bug for taking quick photos in iOS 14.
- βMessagesβ is displayed for conversations that do not have a name assigned.
- Added the ability to send βavatarUrlβ when creating a conversation.
# 9.0.0
This major version enhances the support for Multi-Conversations and introduces a new conversation list UI. We have also included updates to our conversation screen UI to show the conversation icon, conversation name and description. You can also configure your app to allow users to create multiple conversations from our conversation list screen. We've fixed a bug relating to JWT expiry which invokes an auth delegate required to refresh the JWT and reattempt connection.
## Behavior Changes
### Loading a Conversation
You can now load a conversation specified by the ID and present the conversation screen.
```
[Smooch showConversationWithId:@"your conversationId"];
```
You can now load a conversation specified by the ID and present the conversation screen with prefilled text in the message input.
```
[Smooch showConversationWithId:@"your conversationId" andStartingText:@"your starting text"];
```
You can now load a conversation specified by the ID and present the conversation screen using the given view controller as presenting view controller.
```
[Smooch showConversationWithId:@"your conversationId" fromViewController:[[YourViewController alloc] init]];
```
You can now load a conversation specified by the ID and present the conversation screen with prefilled text in the message input using the given view controller as presenting view controller.
```
[Smooch showConversationWithId:@"your conversationId" fromViewController:[[YourViewController alloc] init] andStartingText:@"your starting text"];
```
### Creating a Conversation View
You can now create and return a Smooch conversation view controller loading the conversation specified by the ID.
```
[Smooch newConversationViewControllerWithId:@"your conversationId" completionHandler:^(NSError * _Nullable error, UIViewController * _Nullable viewController) {
if (error) {
// handle error
else {
// handle success
}
}];
```
You can now create and return a Smooch conversation view controller with prefilled text in the message input specified by the ID.
```
[Smooch newConversationViewControllerWithId:@"your conversationId" startingText:@"your starting text" completionHandler:^(NSError * _Nullable error, UIViewController * _Nullable viewController) {
if (error) {
// handle error
} else {
// handle success
}
}];
```
### Conversation List
You can now present the Smooch conversation list screen.
```
[Smooch showConversationList];
```
You can now present the Smooch conversation list screen without the create conversation button.
```
[Smooch showConversationListWithoutCreateConversationButton];
```
You can now dismiss the Smooch conversation list screen if shown.
```
[Smooch closeConversationList];
```
You can now present the Smooch conversation list screen, using the given view controller as presenting view controller.
```
[Smooch showConversationListFromViewController:[[YourViewController alloc] init]];
```
You can now present the Smooch conversation list screen without the create conversation button, using the given view controller as presenting view controller.
```
[Smooch showConversationListFromViewControllerWithoutCreateConversationButton:[[YourViewController alloc] init]];
```
You can create the conversation list view controller.
```
[Smooch newConversationListViewController];
```
You can now create the conversation list view controller without the create conversation button.
```
[Smooch newConversationListViewControllerWithoutCreateConversationButton];
```
You can now set the conversation list delegate to receive updates.
```
[Smooch setConversationListDelegate:self];
```
### Creating a Conversation
You can now create a conversation for the current user with optional displayName, description, iconUrl, metadata and send a message of type text.
```
[Smooch createConversationWithName:@"displayName" description:@"description" iconUrl:@"iconUrl" metadata:@{@"metadataKey": @"metadataValue"} message:@[[[SKTMessage alloc] initWithText:@"message"]] completionHandler:^(NSError * _Nullable error, NSDictionary * _Nullable userInfo) {
if (error) {
// handle error
} else {
// handle success
}
}];
```
### Updating a Conversation
You can now update a conversation for the current user with optional displayName, description, iconUrl and metadata.
```
[Smooch updateConversationById:@"your conversationId" withName:@"displayName" description:@"description" iconUrl:@"iconUrl" metadata:@{@"metadataKey": @"metadataValue"} completionHandler:^(NSError * _Nullable error, NSDictionary * _Nullable userInfo) {
if (error) {
// handle error
} else {
// handle success
}
}];
```
### Loading Conversations
You can now load a list of the next 10 conversations from the server.
```
[self.conversationController getMoreConversations:^(NSError * error) {
if (error) {
// handle error
} else {
// handle success
}
}];
```
You can now support pagination with this boolean, representing if the server has more conversations to load for the user.
```
[self.conversationController hasMoreConversations];
```
## API Changes (Breaking)
- Updated the following SKTUser properties.
- `userId` is now `externalId`
- `properties` is now `metadata`
- `appUserId` is now `userId`
- Updated the following SKTConversation properties.
- `appUserId` is now `userId`
- `appMakerLastRead` is now `businessLastRead`
- `appMaker` is now `business`
- Updated the following SKTParticipant property for the participants included in the `participants` array
- `appUserId` is now `userId`
- Updated the following SKTMessage properties for the messages included in the `messages` array
- `authorId` is now `userId` and will only be included for messages with `role` equals to `user`
- `name` is now `displayName`
## API Additions
1. Class `Smooch.h`
- Added class method `+(void)showConversationWithId:(NSString *)conversationId`
- Added class method `+(void)showConversationWithId:(NSString *)conversationId andStartingText:(nullable NSString *)startingText`
- Added class method `+(void)showConversationWithId:(NSString *)conversationId fromViewController:(UIViewController*)viewController;`
- Added class method `+(void)showConversationWithId:(NSString *)conversationId fromViewController:(UIViewController*)viewController andStartingText:(nullable NSString *)startingText`
- Added class method `+(void)newConversationViewControllerWithId:(NSString *)conversationId completionHandler:(nullable void(^)(NSError * _Nullable error, UIViewController * _Nullable viewController))handler`
- Added class method `+(void)newConversationViewControllerWithId:(NSString *)conversationId startingText:(nullable NSString *)startingText completionHandler:(nullable void(^)(NSError * _Nullable error, UIViewController * _Nullable viewController))handler`
- Added class method `+(void)showConversationList`
- Added class method `+(void)showConversationListWithoutCreateConversationButton`
- Added class method `+(void)closeConversationList`
- Added class method `+(void)showConversationListFromViewController:(UIViewController*)viewController`
- Added class method `+(void)showConversationListFromViewControllerWithoutCreateConversationButton:(UIViewController *)viewController`
- Added class method `+(nullable UIViewController *)newConversationListViewController`
- Added class method `+(nullable UIViewController *)newConversationListViewControllerWithoutCreateConversationButton`
- Added class method `+(void)setConversationListDelegate:(nullable id<SKTConversationListDelegate>)delegate`
- Added class method `+(void)createConversationWithName:(nullable NSString *)displayName description:(nullable NSString *)description iconUrl:(nullable NSString *)iconUrl metadata:(nullable NSDictionary *)metadata message:(nullable NSArray<SKTMessage *> *)message
completionHandler:(nullable void(^)(NSError * _Nullable error, NSDictionary * _Nullable userInfo))completionHandler`
- Added class method `+(void)updateConversationById:(NSString *)conversationId withName:(nullable NSString *)displayName description:(nullable NSString *)description iconUrl:(nullable NSString *)iconUrl metadata:(nullable NSDictionary *)metadata completionHandler:(nullable void(^)(NSError * _Nullable error, NSDictionary * _Nullable userInfo))completionHandler`
- Added class method `+ (void)getMoreConversations:(void (^)(NSError * _Nullable))completionHandler`
- Added class method `+ (BOOL)hasMoreConversations`
2. Class `SKTSettings.h`
- Added property `UIColor *conversationListAccentColor`
3. Added Protocol SKTConversationListDelegate
- Added method shouldCreateCustomConversationFlow
- Added method conversationListDidSelectCreateConversation