This page contains an overview of all relevant changes made to the Amity Chat SDK modules and the latest version releases
Introduce a completion parameter to registerDeviceWithUserId(:_)
in EkoClient
None
Fixed issue where categories property of community is updated incorrectly when fetching list of community categories.
None
Fix socket connection state that causes feed cannot be loaded
Fix issue where token does not update correctly
Fix issue where collection is not triggered when there is empty result
Fix edited date does changed after the comment get updated
None
Fix issue where custom messages are not parsed correctly
Fix crash when setting up custom avatar for in EkoClient
class.
None
N/A
Add EkoUserNotification
and EkoUserNotificationModule
class for supporting user notification settings
Add EkoCommunityNotification
and EkoCommunityNotificationEvent
class for supporting community notification settings
Add notificationManagerForCommunityId:
method in EkoCommunityRepository
class to provide EkoCommunityNotificationsManager
Add EkoRoleFilter
and EkoRoleFilterType
; class and enum for defining what roles would be affected by notification setting
Add displayName
option in EkoCommunitySortOption
enum to sort list of communities alphabetically.
Fix issue where dataStatus
for EkoObject
was not reflected correctly.
Add EkoCommunityFeedSortOption
enum.
sortBy
parameter type is changed to EkoCommunityFeedSortOption
for getCommunityFeed:
method in EkoFeedRepository
class.
Add EkoCommunityMembershipSortOption
enum.
sortBy
parameter type is changed to EkoCommunityMembershipSortOption
for getMemberships:
method in EkoCommunityParticipation
class.
Note: If you have been using enum in short form i.e
.displayName
, these breaking changes would not cause any effect.
Fix issue where post was not getting removed from global feed when deleted
Fix issue where non members could search for private communities locally
Comment in error state can be hard deleted by deleteComment()
api in EkoCommentEditor
Fix issue where deleted comment was being shown from cache
SDK is now distributed as xcframework. .dsym files are also included inside the framework. Please refer to installation docs for more info
Add new message type i.e audio. Please refer to Message documentation
EkoMediaRepository
has been depreciated. Please migrate to downloadImage:
& downloadFile:
method present in EkoMessageRepository
.
Add roles
properties in EkoCommunityMembership
class
Add hasPermission:
methods in EkoClient to check permissions for current user.
New Channel Types: Community
& Live
. Channel type Private
and Standard
has been removed. Please refer to channel documentation for more details
Older createChannel:
methods has been removed. Use new method with builder instead.
type
parameter is removed from joinChannel
method.
Older createConversation:
method has been removed. Use new createChannel
or new method with builder instead.
Add EkoCommentRepository, EkoCommentEditor and EkoCommentFlagger class. Complete documentations are on Comment section.
Add EkoReactionRepository model support reactions.
Add EkoReaction class to provide reaction info.
Support Xcode 11.7
Fix bug on membership
property on EkoChannelUserModel
which has wrong result
Fix bug on isEdited
property on EkoMessage
which has an unconsistent result
No need to add zlib
integration anymore
Support Cocoapod and Carthage installation
Resolve crash when trying to access editedAt
timestamp for message
Add isEdited
property on EkoMessage
to check if message has been edited
Resolve allow display name nil
and empty string on registerDevice
Support Xcode 11.6
Resolve bug on conversation channel filtering
Add getAllUsersSortedBy
method to fetch list of users in EkoUserRepository
.
Add searchUser
method to search list of users with their display name in EkoUserRepository
.
Add new UI for showing list of Users.
Refactor UI to show two tabs, one for list of users and another for channels/chat.
Support getMessage
by messageId
from EkoMessageRepository
using getMessage(messageId)
function.
Add new 'UI' for select the channel type for query.
Add new 'UI' for re-select the channel type on More
page.
Fix 'UI' for create new channel type.
Support query
all channel
types which is Standard
, Private
, Broadcast
, Conversation
, and combination.
Support creating 2 channel
types which is Standard
and Private
.
New API for creating a conversation
is embedded into EkoChannelRepository
which is createConversation
.
Add new function for retrieving the channelCollection
object by query
it through new Builder
pattern. Consists of 5 type of Builder
which is EkoStandardChannelQueryBuilder
, EkoPrivateChannelQueryBuilder
, EkoByTypesChannelQueryBuilder
, EkoBroadcastChannelQueryBuilder
and EkoConversationChannelQueryBuilder
. Each builder has their own configuration settings based on their requirements.
New getter of channelCollection
on EkoChannelRepository
that will return the EkoChannelQueryBuilder
following by the channel type then call query
method, observe the changes using EkoNotificationToken
.
Support private
and standard
channel type for createChannel
.
New enum for creation which is EkoChannelCreateType
.
New method helper inside EkoChannel
for conversion between EkoChannelCreateType
into EkoChannelType
if needed.
channelsForFilter
and channelsForFilter:includingTags:excludingTags
is deprecated function.
joinChannel
only works for join existing channel, it doesn't work for join while creating a channel simultaneously.
Support getMessage
by messageId
from EkoMessageRepository
using getMessage(messageId)
function.
Add new 'Like' UI on each message for react of Like and Unlike to test the optimistic UI.
Change implementation of EkoMessageReactor
so it able to retain the process of previous reactor.
Add optimistic UI on the Reaction
implementation.
Give safeguard for RLMRealm
access of the properties in each object.
Protect setDisplayName
of EkoClient
to be able sent with empty userId
.
Set EkoObject
to be nil in any case if model not exist or invalidated.
Protect joinChannel
parameters attribute with nonnull
protection to guarantee the channelId
is not null
value.
Make sure if the realmModel
is invalidated
then it changes the dataStatus
to be notExist
and set the EkoObject
to be nil
and continue the network request process.
Add new 'Setting' section in the settings page for updating the user meta data.
Add new 'User Meta data' section inside about page for showing the user meta data.
Add setUserMetadata
function inside EkoClient
object for updating the current user meta data.
Fix crash that happens if show reaction with empty display name.
Fix reactions model is not auto removed when someone removes the reaction.
Fix and enhance query system to clear reactions cache on first query.
Fix handle case when display name is empty.
Add support for Xcode 11.3.1.
Support query all reactions.
New method for observing all reaction which is allMessageReactionsWithMessageId
within a message on EkoMessageRepository
for retrieving all of reactions inside a specific message.
New properties on EkoMessageReaction
which is reactorId
and also reactorDisplayName
for getting the user id of the reactor along with the display name.
Add action sheet for displaying all of reactions the single message.
Support add and remove reactions.
New class EkoMessageReaction
and EkoMessageReactor
.
Add Message reaction feature, a reaction can be added or removed from a message with EkoMessageReactor
.
New properties on EkoMessage
which is reactions
data and also reactionsCount
and myReactions
.
Add action sheet for adding and removing reactions on the message.
Add action sheet for displaying all of own reactions on the message.
Change update data endpoint.
Support update custom message.
Sample App Changes
Add action sheet for editing or deleting the message by clicking on the selected message cell.
Support Custom message type:
A message of this type can be created with a Dictionary
data that following a JSON
format that the developers are responsible to parse it by themselves.
This object is included in the data
property of the message.
Support File message type:
A message of this type can be created with an NSData
of the choosen file. File could not exceed than 1 GB.
Add upload file button to choose file from the device.
New file cell view for the file message type.
Parse custom message from server into a text cell.
Add new custom view for sending the custom message, limit to only sent a key and value as a String
.
Fix handling of deleted images
Add support for Xcode 11 and Swift 5.1
Message tagging support:
Messages can now be sent along with customized tags.
Messages can now be filtered by tags (both including and excluding).
Tags can also be set on any message.
Every message has a new tags
property.
Message sorting support:
Messages can now be fetched from the oldest first, or the newest first.
Message parenting support:
Messages can now be connected on creation by passing a new optional parentId
value.
Note how a message child can also become a parent itself, without any limit.
The parentId
must be passed on the child message creation and cannot be changed afterwards.
Every message has a new optional parentId
and childrenNumber
property.
Improve background transaction performances
Remove AFNetworking dependency
Memory improvements
Enhance code documentation
Add full message tags support
Add full message order support
Add full message parenting support
Add example of message parenting usage with a special comment screen:
join a channel with tag “comments
” to see the alternative experience
Enhance api key management
Display push notifications even when app is in foreground
Reset badge count upon opening the app
Enhance project structure
EkoMessageRepository
replaces the function messages(withChannelId:)
with messages(withChannelId:reverse:)
, along with many other new options such as messages(withChannelId:includingTags:excludingTags:reverse:)
, messages(withChannelId:filterByParentId:parentId:reverse:)
.
Be aware that all the functions above are convenience function to the complete messages(withChannelId:includingTags:excludingTags:filterByParentId:parentId:reverse:)
function.
Add Push Notification toggles:
users can now choose to mute selected channels or stop receiving notifications completely from any device.
The new settings, documented in the Notifications section, are per user, not per single device.
Adopt new push notification toggles.
Refactor various settings in new screens throughout the app.
Add Push Notification feature:
developers can call register and unregister for push notification directly from the EkoClient
instance. Read more about the feature in the new Notifications section.
Several internal performance and memory enhancements
Add notifications support (note: your implementation will work with Eko Notifications only in Production, not in sandbox/development)
Add new GlobalBanError
:
when a user is banned globally is automatically unregistered and the EkoChat sdk will be on a clean state. This event is sent to the EkoClient
's clientErrorDelegate
EkoChannel
has a new lastActivity
property
Fix register/unregister issue:
you can now use the same EkoClient to log in and log out multiple times with different users.
Improve documentation
Add possibility to login/logout with different users
ChannelListTableViewController
now displays channels types
Add possibility to choose channel type when creating a new channel
Several minor improvements everywhere
EkoChannelRepository
replaces the function channelsForFilter(:tags:)
with channelsForFilter(:includingTags:excludingTags:)
internal Realm objects are no longer exposed:
from this version there's no longer need for migrations when upgrading the SDK
actively purging Channel Memberships when new data comes from the server:
a new EkoChannelMembership
collection observation is needed in order to to trigger this
update channel filtering functionality with both including and excluding tags
remove channel videos
improve set channel tags UI/UX
improve MembershipListTableViewController
improve EkoMessagesTableViewController
EkoChannelRepository
replaces the function channelsForFilter(:tags:)
with channelsForFilter(:includingTags:excludingTags:)
remove markReadWithCompletion
function from EkoMessageEditor
. Use EkoChannelParticipation
start/stop reading functions instead
change channelsForFilter
behaviour:
a channel is now matched when it contains ANY tag listed in includingTags
, and contains NONE of the tags listed in excludingTags
. Previously a channel would match only if it contained ALL the listed tags. If you would like the old behaviour, please create your own filter on top of this method.
EkoChannelMembership
now behaves correctly
add Channel Membership List View
multiple minor improvements
Xcode 10.2 and Swift 5 support
Xcode 10.1 and iOS 12.1 SDK support
add isFlagByMeWithCompletion:
method in both EkoUserFlagger
and EkoMessageFlagger
EkoUserFlagger
and EkoMessageFlagger
now require, respectively, a EkoUser
and a EkoMessage
on initialisation
improve flag feature
add back iOS 9 support
new Flag feature:
flags are reported to the Admin panel for moderator to see
EkoMessage
and EkoUser
expose a new NSUInteger
flagCount
property
Introducing EkoMessageFlagger
and EkoUserFlagger
objects, both of which have two methods:
flagWithCompletion:
unflagWithCompletion:
EkoChannel
's tags
property is now indexed (which results in slower writes, bigger realm database, and much faster searches)
remove EkoMessage
's EkoMessageEditor
shortcut: this way the EkoMessage is a pure model. If you'd like this feature back, please write your own extension/category/wrapper around it.
Add Flag feature in Sample App
remove completion blocks from EkoChannelParticipation
's start/stop reading methods
EkoChannelRepository
createChannel
requires a new tags
parameter (read the below for more info)
EkoChannelRepository
channelsForFilter
requires a new tags
parameter (read the below for more info)
automatically call startRead
upon re-gaining connection with the server if the connection was ever lost (the SDK will keep track of the channels currently being read until the app is killed)
improve Realm migration logic
introducing EkoChannel
's tags
property:
this property is an optional array of strings that the developer can use for whatever purpose.
Via the EkoChannelRepository
you can now:
create a channel with tags via the createChannel:displayName:type:metadata:users:
method
query/filter channels by tags via the channelsForFilter:tags:
method
set tags on existing channels (each call will overwrite the previous channels tags) via the setTagsForChannel:tags:completion:
method
improve channels cleanup on startup: at every startup, the data of channels where the user is not a member is deleted
internal fixes and enhancements
implement channel tags usage in sample app
implement channels filtering in sample app
Xcode 10 support
add possibility to get channels based on the user membership (all channels, channels where user is member, channels where user is not a member) via the EkoChannelRepository
's channelsForFilter:
add membership
property in EkoChannelMembership
object: the possible values are member
, none
(not member), and banned
;
expose the device user membership
above also in the associated EkoChannel
object via the new currentUserMembership
property;
expose totalUnreadCount
in the EkoChannelRepository
new live reading feature:
every user can now start and stop reading a channel (via the EkoChannelParticipation
's startReadingWithCompletion
/stopReadingWithCompletion
methods), this will automatically update the unread count for said channel when receiving new messages for that channel.
implement unread count
, both total and per channel, and membership type
usage in sample app
internal fixes and enhancements
Internal changes (for gathering statistics on sdk version usage)