SendBird ChannelHandler onMessageReceived не вызывается на Android

Я только начал использовать SendBird на Android. Я хочу сделать чат 1-в-1, поэтому я подключил пользователей к SendBird, установил обработчик, создал канал и отправил сообщение, однако onMessageReceived не работает. Смотрите код ниже:

var handler = object : SendBird.ConnectHandler{
        override fun onConnected(p0: User?, p1: SendBirdException?) {
            SendBird.addChannelHandler(UNIQUE_HANDLER_ID, object : SendBird.ChannelHandler() {
                override fun onMessageReceived(p0: BaseChannel?, p1: BaseMessage?) {
                    Log.d(TAG, "addChannelHandler  - onMessageReceived - messageId ${p1?.messageId}")
                    Log.d(TAG, "addChannelHandler  - onMessageReceived - channelUrl ${p1?.channelUrl}")

                    if (p1 is UserMessage) {
                        Log.d(TAG, "addChannelHandler  - onMessageReceived - messageId ${p1?.message}")
                    }
                }
            })
        }
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        SendBird.connect("222222", handler)
        SendBird.connect("111111", object : SendBird.ConnectHandler {
            override fun onConnected(p0: User?, p1: SendBirdException?) {
                Log.d(TAG, " SendBird.connect - userID -  " + p0?.userId)

                var list = mutableListOf("111111", "222222")

                var   params = GroupChannelParams()
                params.setDistinct(true)
                        .addUserIds(list)

                GroupChannel.createChannel(params, object : GroupChannel.GroupChannelCreateHandler {
                    override fun onResult(p0: GroupChannel?, p1: SendBirdException?) {

                          groupChannel?.sendUserMessage("Hello", object : BaseChannel.SendUserMessageHandler {
                        override fun onSent(p0: UserMessage?, p1: SendBirdException?) {
                            Log.d(TAG, "sendUserMessage - onSent - ${p0?.message}")
                        }
                    })



                }
            })

1 ответ

Решение

SDK SendBird для Android и iOS предназначены для клиентского кода на мобильных устройствах. Для каждого клиента должно быть установлено только одно пользовательское соединение, а не несколько пользовательских соединений в мобильном приложении на стороне клиента.

Я рекомендую тестировать на двух отдельных устройствах / эмуляторах, чтобы имитировать обмен сообщениями двух пользователей в вашем приложении. В коде должен быть один обработчик, который добавляет ChannelHandler для текущего пользователя Android, который вызывает onMessageReceived(p0: BaseChannel?, p1: BaseMessage?). Ваше приложение может иметь список пользователей, где пользователь 111111 может выбрать пользователя 222222 и отправить сообщение этому пользователю. При выборе приложение будет создавать отдельный групповой канал для пользователя 111111 (текущий пользователь) и пользователя 222222 (выбранный пользователь). Затем пользователь 111111 может отправить сообщение по этому каналу.

Для примера кода, пожалуйста, загрузите наш образец чата Android здесь: https://github.com/smilefam/Sendbird-Android

Мы хотели бы узнать больше о вашем сценарии использования и помочь вам в этом. Пожалуйста, напишите http://support@sendbird.com/ для дальнейшей поддержки и укажите "Stackru" в строке темы.

- Жанна, инженер по решениям @ SendBird

Другие вопросы по тегам