Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上未调用SendBird ChannelHandler onMessageReceived_Java_Android_Kotlin_Sendbird_Android Messaging - Fatal编程技术网

Java Android上未调用SendBird ChannelHandler onMessageReceived

Java Android上未调用SendBird ChannelHandler onMessageReceived,java,android,kotlin,sendbird,android-messaging,Java,Android,Kotlin,Sendbird,Android Messaging,我刚开始在Android上使用SendBird。我想进行1合1聊天,所以我将用户连接到SendBird,设置处理程序,创建频道并发送消息,但是onMessageReceived不起作用。请参阅下面的代码: var handler = object : SendBird.ConnectHandler{ override fun onConnected(p0: User?, p1: SendBirdException?) { SendBird.addChann

我刚开始在Android上使用SendBird。我想进行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}")
                        }
                    })



                }
            })

SendBird Android和iOS SDK用于移动设备上的客户端代码。每个客户端只能建立一个用户连接,而不是客户端移动应用上的多个用户连接

我建议在两个单独的设备/模拟器上进行测试,以模拟应用程序中的两个用户消息传递。代码应该有一个处理程序,为调用onMessageReceived(p0:BaseChannel?,p1:BaseMessage?)的当前Android用户添加ChannelHandler。您的应用程序可以有一个用户列表,其中用户111111可以选择用户2222222并向该用户发送消息。选择时,应用程序将为用户111111(当前用户)和用户2222222(所选用户)创建不同的组频道。然后,用户111111可以在该信道中发送消息

有关代码示例,请在此处免费下载我们的Android聊天示例:

我们希望了解更多关于您的用例的信息,并帮助您实现这一目标。请通过电子邮件获得进一步支持,并在主题行中引用“StackOverflow”


--Janna,解决方案工程师@SendBird

非常感谢您的回答。如果user1向user2发送消息,但user2未连接,请告诉我们该如何处理。您当前是否使用FCM支持推送通知?当user2未连接时,您可以发送推送以提示用户返回应用程序。下面是我们关于Android推送通知的指南,了解更多详细信息:谢谢你,简娜,我刚刚给支持团队写了一封电子邮件。不幸的是,我不能在这里复制它。其主要思想是建立一个1对1的聊天模式,这样用户就可以针对不同的话题进行单独的聊天,例如,我和你可以聊工作,也可以聊体育,等等。。我尝试了这个解决方案:将distinct设置为false,将topic设置为customType,并缓存url。所以每次我需要一个聊天实例时,我都会检查我是否与user1、user2和topic1聊天,如果是,我会通过url获得聊天,如果不是,我会创建一个新实例,然后再次存储url。有没有更好的解决办法?我错过了smth吗?@JannaMcLaughlin我正在Xamarin android应用程序中实现SendBird,一切都很好,但我在展示上次看到的东西时面临问题,由于我正在获取作为MessagingChannel聊天对象的联系人列表,并且MessagingChannel对象中没有“最后一次看到”和“联机”属性,因此我已启动聊天的用户的联机状态。请帮帮我。