如何解决SENDBIRD KOTLIN 消息
我在 Android 上使用 SENDBIRD SDK 来使用平台频道在 Flutter 中实现聊天。
我已经设法实现了连接、创建通道和发送消息,但是当我从另一台设备发送消息时,它没有在 onMessageReceived() 方法中运行。在创建频道并输入频道后,我将以下代码放在一个 onCall 方法中以从 Dart 运行。
var channelUrl: String? = call.argument("urlChannel")
GroupChannel.getChannel(channelUrl,GroupChannelGetHandler { groupChannel,err ->
if (err != null) {
result.error("420","$err",null)
} else{
this.groupChannel = groupChannel
val jsonConvertData: String? = Gson().toJson(groupChannel)
println(jsonConvertData)
result.success(jsonConvertData)
}
})
SendBird.addChannelHandler(
CHANNEL_HANDLER_ID,object : ChannelHandler() {
override fun onMessageReceived(
baseChannel: BaseChannel,baseMessage: BaseMessage
){
println("$baseMessage")
}
}
})
我的目标是打印到控制台已收到的消息,但现在我只从 SENDBIRD 的内部套接字获取消息。如图所示。
我得出的结论是 onMessageRecived 没有被执行,我的问题是是否有任何方法可以访问套接字带给我的数据。
更新
package com.example.send_bird
import android.content.Context
import android.content.Intent
import android.os.AsyncTask
import android.util.Log
import android.widget.Toast
import androidx.annotation.NonNull
import com.google.gson.Gson
import com.sendbird.android.*
import com.sendbird.android.BaseChannel.SendUserMessageHandler
import com.sendbird.android.GroupChannel.GroupChannelGetHandler
import com.sendbird.android.SendBird.ChannelHandler
import io.Flutter.app.FlutterActivity
import io.Flutter.embedding.engine.plugins.FlutterPlugin
import io.Flutter.plugin.common.MethodCall
import io.Flutter.plugin.common.MethodChannel
import io.Flutter.plugin.common.MethodChannel.MethodCallHandler
import io.Flutter.plugin.common.MethodChannel.Result
import java.util.*
/** SendBirdplugin */
class SendBirdplugin: FlutterActivity(),FlutterPlugin,MethodCallHandler {
/// The MethodChannel that will the communication between Flutter and native Android
///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity
private lateinit var channel : MethodChannel
private lateinit var groupChannel: GroupChannel
private val CHANNEL = "ec.tipti/sendbird"
private lateinit var context: Context
private val CHANNEL_HANDLER_ID = "CHANNEL_HANDLER_GROUP_CHANNEL_CHAT"
override fun onAttachedToEngine(@NonNull FlutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(FlutterPluginBinding.binaryMessenger,CHANNEL)
channel.setMethodCallHandler(this)
context = FlutterPluginBinding.applicationContext
}
override fun onMethodCall(@NonNull call: MethodCall,@NonNull result: Result) {
when (call.method) {
//**Init SendBird
"initSendBird" -> {
try {
var appId: String? = call.argument("appId")
var response: Boolean = SendBird.init(appId,context);
result.success(response)
} catch (err: Error) {
println("THIS ERR $err")
result.error("404",err.message,err.stackTrace)
}
}
//Connect to sendbirdserver
"connectToSendBirdServer" -> {
// The userID below should be unique to your Sendbird application.
var userID: String? = call.argument("userId")
try {
SendBird.connect(userID) { user,err ->
if (err != null) {
result.error(err.code.toString(),"${err.message}","${err.stackTrace}")
} else {
val jsonConvertData: String? = Gson().toJson(user)
result.success(jsonConvertData)
}
}
} catch (err: Error) {
result.error("404","${err.stackTrace}")
}
}
"getListChannel" -> {
val channelList = GroupChannel.createMyGroupChannelListQuery()
channelList.limit = 100
channelList.next { list,e ->
if (e != null) {
Log.e("TAG",e.message)
}
val jsonConvertData: String? = Gson().toJson(list)
result.success(jsonConvertData)
}
}
"createPrivateChannel" -> {
val users: List<String>? = call.argument("users")
val params = GroupChannelParams()
val operatorId = ArrayList<String>()
operatorId.add(SendBird.getCurrentUser().userId)
params.addUserIds(users)
params.setoperatorUserIds(operatorId)
GroupChannel.createChannel(params) { groupChannel,err ->
if (err != null) {
println("FAIL TO CREATE CHANEL")
result.error("420",null)
} else {
val jsonConvertData: String? = Gson().toJson(groupChannel)
result.success(jsonConvertData)
}
}
}
"enterChannel" -> {
var channelUrl: String? = call.argument("urlChannel")
GroupChannel.getChannel(channelUrl,err ->
if (err != null) {
result.error("420",null)
} else {
this.groupChannel = groupChannel
val jsonConvertData: String? = Gson().toJson(groupChannel)
println(jsonConvertData)
result.success(jsonConvertData)
}
})
SendBird.addChannelHandler(
CHANNEL_HANDLER_ID,object : ChannelHandler() {
override fun onMessageReceived(
baseChannel: BaseChannel?,baseMessage: BaseMessage?
) {
println("Message")
if (!baseChannel?.url.equals("sendbird_group_channel_84227333_d808b92bbf2107ef8b9eb97012bb73126aefd462")) {
println("MESSAGE!!!!!!!!!!!!!!!")
}
}
})
}
"startHandler" -> {
println("START HANDLER")
val value = ListenMessage()
val intent = Intent(context,ListenMessage::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
// context.startService(intent)
}
"sendMessagetochannel" -> {
var msj: String? = call.argument("message")
println(msj)
val params = UserMessageParams()
.setMessage(msj.toString())
groupChannel.sendUserMessage(params,SendUserMessageHandler { userMessage,null)
}
println(userMessage)
})
}
"pauseChannelHandler" -> {
var channelHandlerID: String? = call.argument("channelHandlerId")
SendBird.removeChannelHandler(CHANNEL_HANDLER_ID)
}
"getPreviusMessage" -> {
val prevIoUsMessageListQuery = groupChannel.createPrevIoUsMessageListQuery()
prevIoUsMessageListQuery.load(
20,true,object : PrevIoUsMessageListQuery.MessageListQueryResult {
override fun onResult(
messages: MutableList<BaseMessage>?,e: SendBirdException?
) {
if (e != null) {
Log.e("Error",e.message)
}
val jsonConvertData: String? = Gson().toJson(messages)
result.success(jsonConvertData)
}
})
}
else -> {
result.notImplemented()
}
}
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
}
我一直在努力解决这个问题,并在开始一项新活动时设法听到了 onMessage。 我的问题是现在有没有办法在不需要向我显示屏幕的情况下开始活动? 这是我第二个活动的代码。
package com.example.send_bird
import com.sendbird.android.BaseChannel
import com.sendbird.android.BaseMessage
import com.sendbird.android.SendBird
import io.Flutter.app.FlutterActivity
class ListenMessage: FlutterActivity() {
private val CHANNEL_HANDLER_ID = "CHANNEL_HANDLER_GROUP_CHANNEL_CHAT"
override fun onResume() {
super.onResume()
println("ENTER TO LISTEN MESSAGE")
SendBird.addChannelHandler(
CHANNEL_HANDLER_ID,object : SendBird.ChannelHandler() {
override fun onMessageReceived(
baseChannel: BaseChannel,baseMessage: BaseMessage
){
println("$baseMessage")
}
})
}
}
我试过使用Services()和Async(),但第一次听不到onMessage()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。