SendbirdChat SDK markAsRead limit 초과 이슈

SendbirdChat SDK markAsRead limit 초과 이슈

Message Collection

collection = MessageCollection(
          channel: channel,
          params: MessageListParams()..reverse = true,
          handler: MyMessageCollectionHandler(this),
        )..initialize();

MyMessageCollectionHandler (MessageCollectionHandler)

class MyMessageCollectionHandler extends MessageCollectionHandler {
  final GroupChannelPageState _state;

  MyMessageCollectionHandler(this._state);

  @override
  void onMessagesAdded(MessageContext context, GroupChannel channel, List<BaseMessage> messages) async {
    _state._refresh();
  }

  @override
  void onMessagesUpdated(MessageContext context, GroupChannel channel, List<BaseMessage> messages) {
    _state._refresh();
  }

  @override
  void onMessagesDeleted(MessageContext context, GroupChannel channel, List<BaseMessage> messages) {
    _state._refresh();
  }

  @override
  void onChannelUpdated(GroupChannelContext context, GroupChannel channel) {}

  @override
  void onChannelDeleted(GroupChannelContext context, String deletedChannelUrl) {
    Get.back();
  }

  @override
  void onHugeGapDetected() {
    _state._disposeMessageCollection();
    _state._initializeMessageCollection();
  }
}

_refresh

  void _refresh({bool markAsRead = true}) async {
    try {
      if (markAsRead) {
        SendbirdChat.markAsRead(channelUrls: [channelUrl]);
      }
    } catch (e) {
      debugPrint(e.toString());
    }
}

sendMessage

sendMessage(String messageBody) async {
    String details = channelType == "normal"
        ? jsonEncode({
            "alarmType": "chat",
            "channelUrl": channelUrl,
            "senderImage": myProfileUrl,
          })
        : jsonEncode({
            "alarmType": "chat",
            "channelUrl": channelUrl,
            "senderImage": myProfileUrl,
            "calringId": calringId,
          });
    final params = UserMessageCreateParams(message: messageBody)
      ..customType = channelType
      ..pushNotificationDeliveryOption = PushNotificationDeliveryOption.normal
      ..data = details;
    thisChannel!.sendUserMessage(params);
  }

코드는 이렇게 되어있는데

  1. 메시지창에 들어올때 (initialize)
  2. 메시지를 보낼때

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MarkAsReadRateLimitExceededException(800160)
에러가 뜨면서
보내는 사람에게는 동일한 메시지가 2개씩 보여집니다.

메시지 수신할 때에는 문제가 없습니다.

markAsRead를 주석처리 후 메시지 발신 할때에는 문제가 없습니다.

어느쪽에서 문제가 생긴걸까요?

답변 기다리겠습니다.
감사합니다.


// If problem, please fill out the below. If question, please delete.
[SDK Version]
sendbird_chat_sdk: ^4.2.10

혹시 답변을 안해주시는건가요?
일주일이 넘어도 답변이 없으셔서 서비스가 너무 지연되고 있는데…

Hello @calring,

답변이 늦어진 점 사과드립니다. 귀하의 로컬 상태가 어떻게 업데이트되는지 이해하는 것이 좋을 것 같습니다. Flutter는 UIKit이 없기 때문에 화면에 렌더링되는 것은 귀하의 책임입니다.

혹시 어떤 값에 기반하여 메시지를 로컬 상태에 두 번 추가하는 경우가 있는지요? 로컬 상태를 초기화하고 메시지 목록을 새로 고침해도 메시지가 여전히 중복되는지 확인해보시겠어요?