Skip to content

Releases: sendbird/sendbird-chat-sdk-android

v4.15.0

07 Feb 07:18
08848ea
Compare
Choose a tag to compare

Features

  • Supports new SendbirdChat KTX

v4.14.2

31 Jan 06:38
29e9209
Compare
Choose a tag to compare

Improvements

  • Fixed a bug where NotificationCollectionHandler.onMessagesUpdated() is called indefinitely in some cases

v4.14.1

17 Jan 10:16
2208c54
Compare
Choose a tag to compare

Improvements

  • Fix intermittent ConcurrentModificationException in MessageCollection

v4.14.0

20 Dec 04:34
d4c03d2
Compare
Choose a tag to compare

Features

  • Three new features related to Generative AI have been added: Form type, Suggested replies and Feedback.
    • Form type: A form type message is a message that contains a form. A form is a set of questions that a user can answer to collect data from users.
      1. How to determine if a message is a form type message:
        val BaseMessage.isFormTypeMessage: Boolean
            get() = this.forms.isNotEmpty()
      2. How to save the answer in the SDK when the user enters input:
        editText.addTextChangedListener(
            object : TextWatcher {
                ...
                override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
                    formField.temporaryAnswer = Answer(formField.key, s.toString())
                }
            }
        )
      3. Submits a form
        // submits form
        message.submitForm(form) { e ->
            if (e != null) {
                // handle error
            }
        }
        
        // The submitted form is updated through a message update event.
        SendbirdChat.addChannelHandler(
            "IDENTIFIER",
            object : GroupChannelHandler() {
            ...
                override fun onMessageUpdated(channel: BaseChannel, message: BaseMessage) {
                    message.forms.find { it.formKey == "TARGET_FORM_KEY" }?.isSubmitted // should be true
                    // update message UI to submitted form
                }
            }
        )
    • Suggested replies: Suggested reply is a set of items that a user can click quickly to send a message. Suggested replies is contained in a last message.
      SendbirdChat.addChannelHandler(
          "IDENTIFIER",
          object : GroupChannelHandler() {
              ...
              override fun onChannelChanged(channel: BaseChannel) {
                  if (channel is GroupChannel) {
                      val suggestedReplies = channel.lastMessage?.suggestedReplies
                      if (!suggestedReplies.isNullOrEmpty()) {
                          // draw suggested replies for the channel's last message
                      }
                  }
              }
          }
      )
    • Feedback: Feedback is a feature that allows users to provide their satisfaction or dissatisfaction with the bot's responses.
      1. How to draw feedback UI
        val feedback = message.myFeedback
        when (message.myFeedbackStatus) {
            FeedbackStatus.NOT_APPLICABLE -> {
                // this message is not applicable for feedback
                // Make thumbs-up/down UI invisible or disable here
                // `feedback` should be null
            }
        
            FeedbackStatus.NO_FEEDBACK -> {
                // The feedback is not submitted yet but user can submit feedback
                // Make thumbs-up/down UI visible or enable without being selected
                // `feedback` should be null
            }
            FeedbackStatus.SUBMITTED -> {
                // The feedback is submitted
                // Make thumbs-up/down UI visible or enable as selected
                // `feedback` should not be null
            }
        }
      2. How to submit / update / delete feedback
        // submit feedback
        message.submitFeedback(FeedbackRating.Good) { feedback, e ->
            when {
                feedback != null -> {
                    // update feedback UI
                }
                e != null -> {
                    // handle error
                }
            }
        }
        
        // update feedback
        message.updateFeedback(FeedbackRating.Good, "Very good response") { feedback, e ->
            when {
                feedback != null -> {
                    // update feedback UI
                }
                e != null -> {
                    // handle error
                }
            }
        }
        
        // delete feedback
        message.deleteFeedback { e ->
            // handle error
        }
  • Introduced BaseMessage.extras to enable developers to include their own data in BaseMessage and carry it seamlessly.
  • Added logCustom(String, List<BaseMessage>) in FeedChannel.

Improvements

  • Fix the bug where the internal network status flag is incorrect when an app starts from offline mode.

v4.13.0

25 Oct 06:11
5da6d07
Compare
Choose a tag to compare

Features

  • Added new read-only attribute messageReviewInfo in UserMessage

    class UserMessage {
        // exist only if the message is in review or it has been approved
        val messageReviewInfo: MessageReviewInfo?
    }
    
    class MessageReviewInfo {
        val status: MessageReviewStatus
        val originalMessageInfo: OriginalMessageInfo? // (exist only if the status is approved)
    }
    
    enum class MessageReviewStatus {
        IN_REVIEW, APPROVED
    }
    
    class OriginalMessageInfo {
        val createdAt: Long
        val messageId: Long
    }
  • Added new read-only attribute notificationMessageStatus in BaseMessage

  • Added markAsRead(List<BaseMessage>, CompletionHandler?) in FeedChannel

  • Added logImpression(List<BaseMessage>) in FeedChannel

    class BaseMessage {
        // This value represents the status value for the Notification message. The value `NONE` is returned for messages that are not Notification messages.
        val notificationMessageStatus: NotificationMessageStatus
    }
    
    enum class NotificationMessageStatus(val value: String) {
        NONE, SENT, READ
    }
    

Improvements

  • Mitigated an ANR issue by lazy creation of properties within SendbirdChat.init()

v4.12.3

06 Oct 09:55
8edb459
Compare
Choose a tag to compare

Improvements

  • Reduced delay in GroupChannelCollection.loadMore() when there's lots of channels

v4.12.2

25 Sep 09:42
5bdbf2e
Compare
Choose a tag to compare

Features

  • Added GroupChannel.getDeliveryStatus(Boolean): Map<String, DeliveryStatus> to get delivery status of all members.
  • Added BaseMessage.submitForm(String, Map<String, String>, CompletionHandler?), which allows you to submit form messages sent by the bot. Please note that form messages are delivered via BaseMessage.extendedMessages when all settings are properly configured on the server.

Improvements

  • Fixed occasional NoSuchElementException when accessing GroupChannel.members.

v4.12.1

13 Sep 08:15
55b1711
Compare
Choose a tag to compare

Improvements

  • Improved stability.

v4.12.0

04 Sep 11:19
1024ea1
Compare
Choose a tag to compare

Features

You can get the categories of a set FeedChannel and the channel's properties from the Dashboard.

  • Added isCategoryFilterEnabled, isTemplateLabelEnabled, and notificationCategories in FeedChannel
var isCategoryFilterEnabled: Boolean
var isTemplateLabelEnabled: Boolean
var notificationCategories: List<NotificationCategory>

You can obtain the data that you set when you send Notification to the template that you created in the dashboard.

  • Added notificationData in BaseMessage
val notificationData: NotificationData?

v4.11.1

29 Aug 06:19
7d384d7
Compare
Choose a tag to compare

Improvements

  • Added enableAutoResend in InitParams.LocalCacheConfig to control auto-resending feature when local cache is enabled
  • Added isBot in Sender
  • Added file, url getters in UploadableFileInfo
  • Mitigated an ANR issue and a failure of initialization by reducing access to SharedPreferences in the main thread