Skip to main content
Compatibility rows on this page are checked against the matching Android SDK Git tags in Amity-Social-Cloud-SDK-Android. Pre-release alpha tags are not listed here unless promoted into the public SDK changelog.
New ReleasesImprovements

🚀 New Features

GIF Comments

Comments can now carry a GIF from your GIF provider, with or without text. See GIF Comments.
  • Create or reply: pass an AmityComment.Attachment.GIF(url, width, height) to createComment()…attachments(...). width and height are optional. A GIF-only comment needs no text.
  • Edit: editComment(commentId).attachments(...) with a new GIF replaces it, and an empty list removes it while keeping the text. Leave attachments out to keep the GIF.
  • Read: a GIF comment reports AmityComment.DataType.GIF and exposes the attachment’s getUrl(), getWidth(), and getHeight().
  • Query: AmityCommentDataTypeFilter accepts GIF for both any and exact matching.

GIF Posts

Posts can now include GIF attachments, on their own or mixed with other media. See GIF Post.
  • Create: pass AmityGif(url, width, height) as an attachment to createMixedAttachmentPost. A GIF post needs no text.
  • Edit: post edit accepts AmityGif in the attachment list alongside images, videos, files, and audio.
  • Read: GIF child posts surface as AmityPost.Data.GIF (with getUrl(), getWidth(), getHeight(), and toGif()) and AmityPost.DataType.GIF. A post with GIFs beside other media is a mixed post.
  • Feeds: gif is a supported data type on feed queries, and community feeds include GIF posts.

🐞 Bug Fixes

  • Fixed comment collections on the same post with different data type filters sharing one set of results.

🧩 Compatibility

📘 API Reference — 7.33.0

Improvements

🐞 Bug Fixes

  • Fixed realtime events never connecting after an app updated from an older SDK version restored its existing session.
  • Fixed realtime events staying disconnected for up to a few minutes after the device’s network came back, including when the app returns from the background. The SDK now reconnects as soon as network access is restored.
  • Fixed live collections briefly reporting an empty, fully loaded list after a refresh (for example, member search showing “No results found” for a second or two) before the fetched results appeared.

🧩 Compatibility

📘 API Reference — 7.32.0

Improvements

✨ Improvements

  • login() and loginWithAccessToken() no longer send a separate user update request after login.

🚨 Compatibility Changes

  • When the stored session token is still valid, logging in with a different displayName no longer updates the user’s display name on the server. To change a display name for an existing user, use AmityCoreClient.editUser().displayName(...).build().apply() instead.

🧩 Compatibility

📘 API Reference — 7.31.0

New Releases

🚀 New Features

Child Endangerment Report Reason

Users can now report posts, comments, messages, and users for child endangerment. The reason is available as AmityContentFlagReasonType.CHILD_ENDANGERMENT and as AmityContentFlagReason.ChildEndangerment, so it also appears in any picker built from AmityContentFlagReason.list(). See Content Flagging.

🧩 Compatibility

📘 API Reference — 7.30.0

New ReleasesImprovements

🚀 New Features

Report Reasons with Details

Posts, comments, and messages can now be reported under any reason with an optional free-text detail. Previously, text could only be attached to the “Others” reason. See Content Flagging and Message Flagging.
  • New reason enum: AmityContentFlagReasonType lists the report reasons without payloads.
  • New calls: flagPost(postId, reason, detail), flagComment(commentId, reason, detail), and flagMessage(messageId, reason, detail). detail is optional and is sent exactly as given.
  • Deprecated: the overloads that take AmityContentFlagReason. They keep working and send the same request as before. The ID-only overloads are no longer deprecated.

Profile and Behavior User Reports

User reports are now split by what is being reported, and each can carry an optional comment. See Flag and Unflag User.
  • Report a profile field: AmityUserRepository.flagUserProfile(userId, field, comment), where field is an AmityUserProfileField (DISPLAY_NAME, DESCRIPTION, AVATAR).
  • Report behavior: AmityUserRepository.flagUserBehavior(userId, reason, comment), with an AmityContentFlagReasonType reason.
  • Comment limit: the comment is trimmed, left out when blank, and rejected with IllegalArgumentException when it is over 300 characters.
  • Check your own reports: AmityUser.getUserFlagsByMe() returns AmityUserFlagByMe, with isFlagByMe and one AmityUserFlag (report type, reason, comment, created time) per report the current user filed.
  • Withdraw one report type: unflagUser(userId, reportType) takes an optional AmityUserReportTypeFilter. Without it, the call behaves as before.
  • Deprecated: the flagUser overloads that take a report type or reason. flagUser(userId) stays supported.

Sort Channels by Last Message

Channel queries can now be sorted by the newest message, so member joins, leaves, and bans no longer move a channel. See Query Channels.
  • Sort option: sortBy(AmityChannelSortBy) on every channel query builder, with LAST_ACTIVITY (default) and LAST_MESSAGE. LAST_MESSAGE must be enabled for your network; until it is, the query fails.
  • New field: AmityChannel.getLastMessageAt() returns the time of the newest message, or null if it is not available yet. Fall back to getCreatedAt() when it is null.

Structured Network Activity

AmityCoreClient.observeNetworkActivities() now emits a transport-neutral AmityNetworkActivity record that covers more than HTTP responses. See Logging.
  • Activity types: AmityNetworkActivityType covers API calls, uploads, downloads, media segments, images, MQTT messages, MQTT state changes, and stream state changes.
  • Payloads: request and response details (method, URL, status, headers, and captured bodies, decompressed and size-capped), MQTT topic and payload, or a state transition, plus timing (durationMs, isInFlight).
  • Dropped records: when records are dropped under load, droppedBefore on the next record says how many were lost at that point.

✨ Improvements

  • Added AmityError.UNSAFE_CONTENT (400314), returned when content moderation blocks an image, and AmityError.USER_IS_GLOBAL_MUTED (400313). Both previously resolved to AmityError.UNKNOWN.
  • createChannel() no longer requires a displayName, so a direct conversation can be created without a placeholder name.
  • Sending a message now moves its channel to the top of the channel list right away, instead of waiting for the realtime event.

🐞 Bug Fixes

  • Fixed the “Sexual content or nudity” report reason being sent with the wrong value, so those reports did not match the reason filter in the Console moderation feed.
  • Fixed message edits, deletions, flags, and reactions moving a channel in a channel list sorted by last activity.

🚨 Compatibility Changes

  • observeNetworkActivities() now emits com.amity.socialcloud.sdk.model.core.network.AmityNetworkActivity. The previous com.ekoapp.ekosdk.internal.api.http.AmityNetworkActivity.HTTP type, which wrapped an OkHttp Response, has been removed. Update any code that reads network activity.

🧩 Compatibility

📘 API Reference — 7.29.0

New ReleasesImprovements

🚀 New Features

Module Entitlement Settings

Read which SDK modules your network is entitled to, so you can hide features that your plan does not include.
  • Fetch: AmityCoreClient.getModuleSettings() returns Single<AmityModuleSettings>, with the enforcement mode (AmityModuleEnforcementMode: OFF, SHADOW, ENFORCE), the granted modules, and the catalog of every module and its prerequisites.
  • Read offline: AmityCoreClient.getCachedModuleSettings() returns the last stored settings synchronously, or null when none have been fetched yet (treat this as every module available).
  • Check a module: AmityModuleSettings.availabilityOf(AmityModule) returns AmityModuleAvailability.Available, NotGranted, or PrerequisiteUnavailable (with the unmet prerequisites).
  • Typed refusal: when enforcement is on, a call to a module the network does not own fails with AmityModuleNotEntitledError (AmityError.MODULE_NOT_ENTITLED, 400325), which lists the missing modules.

🐞 Bug Fixes

  • Fixed authenticated calls made immediately after login sometimes failing with “Please login to use SDK”.

🧩 Compatibility

📘 API Reference — 7.28.0

New ReleasesImprovements

🚀 New Features

Comment Approval for Communities

A community can now require review before a new comment is visible. While a comment is pending, only its author, the community’s reviewers, and network admins can see it. It stays out of public comment lists and comment counts until a reviewer approves it. See Comment Review.
  • Turn it on: isCommentReviewEnabled(true) on AmityCommunityCreator.Builder or AmityCommunityUpdate.Builder when you create or update the community. Read it back with AmityCommunity.isCommentReviewEnabled().
  • Approval status: AmityComment.getApprovalStatus() returns AmityCommentApprovalStatus (PENDING, APPROVED, REJECTED).
  • Create without a local copy: .isOptimistic(false) on the comment creator builder skips the local comment, so the comment you get back carries the server’s approval status. The default, true, keeps today’s behavior.
  • Review queue: AmityCommentRepository.getCommentReviewQueue(communityId) returns a builder for the community’s pending comments. Narrow it to one post or a date range with .post(postId), .startDate(), .endDate(), and .timeZone().
  • Approve or decline: AmityCommentRepository.approveComment(commentId) and declineComment(commentId, reason). Declining deletes the comment. The optional reason (at most 250 characters) is kept for the moderation record only.
  • Permission: reviewers need AmityPermission.REVIEW_COMMUNITY_COMMENT.
  • Editing while pending: AmitySocialSettings.isAllowEditCommentWhenReviewingEnabled() tells you whether an author may edit a pending comment.
  • Realtime: an approved comment appears as soon as it is approved, through the comment.approved event. A declined comment arrives as a deletion.

Curated Content

Fetch the posts selected for a topic configured in the Console, and build your own discovery surface around them. A pool is one bounded, ranked result with no pagination, and the SDK keeps the server’s order. See Topic-based Content Discovery.
  • Fetch a pool: AmityCoreClient.newCuratedContentRepository().getPool(topicId, limit) returns Single<AmityCuratedContentPool>. limit must be between 1 and 100.
  • Analytics: AmityCuratedContentTopic.analytics() provides markAsViewed(), markPostAsViewed(postId), and markPostClick(postId).

Pin Message in Live Channels

Pin one message in a live channel so it stays visible above the chat. Pinning a new message replaces the current pin. The server clears the pin when the message is deleted or its author is banned from the channel or globally. See Pin and Unpin Messages.
  • Pin and unpin: AmityMessageRepository.pinMessage(messageId) and unpinMessage(messageId).
  • Read the pin: AmityChannel.getPinnedMessage() returns the current AmityPinnedMessage, or null when nothing is pinned.
  • Permission: AmityPermission.PIN_MESSAGE. Channel moderators, and livestream hosts and co-hosts, have it by default.
  • Realtime: the channel Flowable emits on every pin and unpin, driven by the channel.messagePinned and channel.messageUnpinned events.

✨ Improvements

  • AmityPost.getLocalCommentCount() now takes an optional includePending flag. By default, the count leaves out the current user’s own comments that are still awaiting approval. Pass true to include them.

🐞 Bug Fixes

  • Fixed AmityRoomStatus falling back to IDLE for a room terminated by moderation. A terminated room now surfaces as AmityRoomStatus.TERMINATED.
  • Fixed a member’s channel role change (channel.roleAdded / channel.roleRemoved) not reaching the client until the app was restarted, which could leave a stale pin permission.

🧩 Compatibility

📘 API Reference — 7.27.1

New ReleasesImprovements

🚀 New Features

Configurable Search Fields

Added an opt-in searchBy option to user search (and channel-member search) so you can restrict which fields the keyword is matched against.
  • New enum AmitySearchUserBy (DISPLAY_NAME, PROFILE_HANDLE, USER_ID) in com.amity.socialcloud.sdk.model.core.search.
  • New builder method AmityUserSearch.Builder.searchBy(List<AmitySearchUserBy>).
  • Omitting searchBy keeps the existing default matching, so existing integrations are unaffected.

Video Rotation & Dimensions

Video rotation and dimensions are now exposed, and getVideoUrl no longer hangs.

Live Viewer Count Configuration

Added getLiveViewerCountConfig to AmityCoreClient.

v4 Sessions

loginWithAccessToken now verifies the access token against v4 sessions and persists the caller’s user type from the login response.

✨ Improvements

  • Capped the MQTT v5 session expiry at 1800s.

🧩 Compatibility

📘 API Reference — 7.26.0

New ReleasesImprovements

🚀 New Features

Channel Moderation Permissions

Added the BAN_USER_FROM_CHANNEL and MUTE_USER_INSIDE_CHANNEL permissions for per-channel moderation.

✨ Improvements

  • Cleaned up the channel ban/mute permission set — retired unused names and added missing ones.

🧩 Compatibility

📘 API Reference — 7.25.0

New ReleasesImprovements

🚀 New Features

Event Posts

Added event-post support: an event shared to a community feed is delivered as a post (post dataType event), resolves through EventRepository, and renders alongside regular posts. event.isOriginPublic is exposed for visibility handling.

🐞 Bug Fixes

  • Fixed locally-created chat messages being assigned the wrong segment and missing their channel id.
  • Fixed a failed send incorrectly determining the next message segment.
  • Fixed the sender’s own message not being marked read on some paths.
  • Removed unused RTMP dependencies that broke 16 KB page-size alignment.

🧩 Compatibility

📘 API Reference — 7.24.4

Improvements

🐞 Bug Fixes

  • Improved real-time (MQTT) connection resilience: a transient failure on the first connect no longer stops real-time, and logout / token expiry now stops a client still retrying its first connect.
  • Fixed session handling so a failed token renewal is recoverable and the session stays alive through renewal.
  • Fixed chat-list message previews: previews now persist in step with their channel rows and fall back to the channel’s current row when a snapshot is missing.

🧩 Compatibility

📘 API Reference — 7.24.3

Improvements

🐞 Bug Fixes

  • Fixed channel unread tracking to mark read against the channel id rather than the sub-channel id.
  • Fixed the local read position being lost when membership.readToSegment is stale.
  • Excluded left and deleted channels from the channel unread total.

🧩 Compatibility

📘 API Reference — 7.24.2

New ReleasesImprovements

🚀 New Features

Report User with Reason

Added the ability to report a user with a report type, behavior reason, and comment, plus report/unflag actions on the user list.

Exclude Own Events

Added an excludeOwnEvents parameter to event queries so the current user’s own events can be filtered out.

Event Target Community Avatar

Added the community avatar to an event’s target community.

✨ Improvements

  • Migrated the MQTT client from protocol v3 to v5.
  • Removed the transitive AD_ID permission from the FCM push module.

🧩 Compatibility

📘 API Reference — 7.24.0

New ReleasesImprovements

🚀 New Features

For You Feed

Added the personalized For You feed. Query it with AmitySocialClient.newFeedRepository().getForYouFeed() (a live collection), and the network setting via AmityCoreClient.getForYouFeedSetting(). When the feature is not enabled for the network, the collection surfaces the typed AmityForYouFeedDisabledError.

Bidirectional Block Visibility

Added the reverse direction of the blocking model: getBlockingUsers() (live collection) and getAllBlockingUsers() (one-shot list) return the users who have blocked the current user. Blocking a user when already at the per-network cap now returns the typed MAX_BLOCKED_USERS_REACHED error.Added searchChannels and searchMessages to AmityChannelRepository for searching across channels and messages.

Channel Archiving

Added archiveChannel, unarchiveChannel, and getArchivedChannelIds to AmityChannelRepository, backed by a new local table for reactive archive/unarchive updates.Added a typed shareable-link API using AmitySharableContentType, so links can be generated for a content type without relying on raw pattern keys.

Channel Notification Mode

Added notificationMode support to the channel update API.

✨ Improvements

  • Improved chat message loading and reload performance.

🐞 Bug Fixes

  • Fixed community member permissions not updating.
  • Fixed group member additions not reflecting in the member list.
  • Fixed nested room moderation not being parsed or persisted from the room payload.
  • Fixed queued message jobs never failing while offline — they now fail immediately.

🧩 Compatibility

📘 API Reference — 7.23.0

New ReleasesImprovements

🚀 New Features

invalidateCache for Feed Queries

Added invalidateCache(true) option to AmityFeedRepository.getCommunityFeed() and AmityPostRepository.getPosts() queries. When set, the cache is cleared before the first page fetch so the live collection starts from fresh server data.

Community Tag Filtering

Added tags filter to getCommunities() queries. Pass a list of tags to narrow results to communities matching all specified tags.

Visitor Daily Usage Limit

Added detection for the visitor daily read quota (100 req/day, error code 400323). When a visitor exceeds this limit, the SDK detects the error in the global interceptor and emits an event via AmityCoreClient.getVisitorUsageLimitEvents(): Flowable<AmityVisitorUsageLimitEvent>.

🐞 Bug Fixes

  • Fixed event post local filtering by adding eventId to post objects.
  • Fixed SQLCipher incompatibility with Room 2.8.1 by upgrading SQLCipher from 4.6.1 to 4.9.0.
  • Fixed malformed XML in community and global post list menu resource files.

🧩 Compatibility

📘 API Reference — 7.22.1

Improvements

✨ Improvements

  • Removed unnecessary READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions from SDK manifests for Google Play compliance on Android 13+.

🧩 Compatibility

📘 API Reference — 7.21.0

Improvements

✨ Improvements

  • Added exponential backoff retry mechanism for MQTT topic subscriptions to improve real-time connection stability.

🧩 Compatibility

📘 API Reference — 7.20.0

New ReleasesImprovements

🚀 New Features

Raised Compile and Target SDK to 36

Bump compileSdkVersion and targetSdkVersion to 36 to support the latest Android platform APIs.

🐞 Bug Fixes

  • Fixed an MQTT reconnect loop that prevented the client from properly exiting the reconnection cycle.

🧩 Compatibility

📘 API Reference — 7.19.3

Improvements

🐞 Bug Fixes

  • Fixed event post local filtering by adding eventId to post objects.

🧩 Compatibility

📘 API Reference — 7.19.4

Improvements

🐞 Bug Fixes

  • Optimize insert transaction when resolving reaction update event.

🧩 Compatibility

📘 API Reference — 7.17.5

New Releases

🚀 New Features

Live Thumbnail and Resolution in AmityRoom

Add liveThumbnailUrl, liveResolution, and recordedResolution fields to AmityRoom to expose server-generated thumbnail and stream resolution data.Add link detection support to comment create/update APIs, enabling automatic link parsing in comment text.

Root Comment and Latest Comment ID in Query

Add rootId and latestCommentId fields to the comment query API for improved comment threading and navigation.

Page Size for Get Comments

Add pageSize parameter to getComments API for more granular control over comment pagination.

🐞 Bug Fixes

  • Fixed posts going missing after paging REFRESH.

🧩 Compatibility

📘 API Reference — 7.18.0

New Releases

🚀 New Features

Product Tagging in Posts

Introduce AmityProduct and AmityProductTag models with product search API, enabling users to tag up to 20 products per post via text mentions and per-media tags. Supports creating and updating posts with product tags.

Livestream Product Tagging

Introduce product management APIs for livestream(Room) post — tag, pin, and remove products across all broadcast phases.

🧩 Compatibility

📘 API Reference — 7.17.1

New Releases

🚀 New Features

Get All Blocked Users

Introduce getAllBlockedUsers() on AmityUserRepository — returns the full list of blocked users (up to 100) as a non-paginated, one-shot Single<List<AmityUser>> with a 5-minute TTL cache.

Excluding Roles in Community Member Queries

Add excludingRoles parameter to AmityCommunityMembershipQuery.Builder and AmityCommunityMemberSearch.Builder. Members holding any of the specified roles are excluded from the live collection result.

Time-Bounded Post Pagination

Add untilAt parameter to getPosts, getCommunityFeed, and getUserFeed query builders. When provided, the SDK stops fetching and collecting posts beyond the given datetime boundary.

🧩 Compatibility

📘 API Reference — 7.16.0

New Releases

🚀 New Features

Authentication

Introduce an ability to login with a pre-fetched accessToken.

Comment Count

Introduce a local calculated comment count based on incoming real-time events.

Community Post Query by Tags

Introduce an ability to community posts with matching tags.

Livestream Analytics

Introduce AmityRoomAnalytics for the purpose of tracking watch minute.

🧩 Compatibility

📘 API Reference — 7.15.0

New Releases

🚀 New Features

Livestream Post With Room

Introduce Room service, an upgrade and a replacement forstream.

Event Scheduling

Introduce Event service, enabling event scheduling.

Community Member Query

Introduce lastJoin sorting option.

🧩 Compatibility

📘 API Reference — 7.14.0

New Releases

🚀 New Features

Mixed Attachments Post

  • Support mixed structure post where a post can contains multiple datatypes such as image, video, file, and audio.

Audio Content Support

  • Support audio file upload.
  • Introduce audio dataType for post.

🚨 Compatibility Changes

Support 16 KB page sizes

  • Kotlin version upgrade to 2.2.0
  • Bumped minSDKVersion to 24

🧩 Compatibility

📘 API Reference — 7.11.0

New Releases

🚀 New Features

Public Access

  • Added loginAsVisitor() function, enables user to interact as a visitor.

🧩 Compatibility

📘 API Reference — 7.10.0

New Releases

🚀 New Features

Child stream

  • Support child stream creation where a child stream can be linked to a parent stream.

Poll

  • Added unvotePoll() function, enables user to update poll answer.

🧩 Compatibility

📘 API Reference — 7.9.0

New Releases

🚀 New Features

PII detection

  • Added detected PII data to post, comment, and message.

🧩 Compatibility

📘 API Reference — 7.8.0

New Releases

🚀 New Features

Hashtag

  • Support adding hashtag to a post.
  • Support post search by hashtag.

User feed

  • Support new sources of posts on user feed. feedSources can be selected on user feed query.

Post title

  • Support optional title on post creation.

🧩 Compatibility

📘 API Reference — 7.7.0

New Releases

🚀 New Features

Clip Post

  • Added AmityFileRepository.uploadClip() — upload short video clips.
  • Added AmityPostRepository.createClipPost() — create a post containing a clip.
  • Added dataTypes parameter to getGlobalFeed() for filtering feed content types.

Livestream Chat & Reaction

  • Added createLiveChannel(streamId) — create a Live channel by Stream ID.
  • Added createLiveReaction() — send live reactions during livestreams.

🧩 Compatibility

📘 API Reference — 7.6.0