如何解决Flutter:如何从外部应用程序接收消息传递?
我有一个独立的Android应用程序。然后,我在Flutter
中开发了较小的Web应用程序,并将其导出到Web服务器。它作为Android Kotlin中该独立应用程序的一部分加载到WebView
中。
Android支持后消息传递,我可以通过渠道将数据直接发送到WebView
。我的问题是如何在Flutter Dart代码中(在我的Web应用程序内部)收听这些消息?
这是我在Kotlin Android应用中使用的代码:
private var port: WebMessagePort? = null
@TargetApi(Build.VERSION_CODES.M)
private fun initPostMessagePort(){
val channelsAvailable = webView.createWebMessageChannel()
port = channelsAvailable.firstOrNull()
port?.apply {
setWebMessageCallback(object : WebMessageCallback() {
override fun onMessage(port: WebMessagePort,message: WebMessage) {
//TODO do something with message
}
})
}?:kotlin.run {
App.log("Port initialization failed - channels not available")
}
}
@TargetApi(Build.VERSION_CODES.M)
private fun sendMessageToPort(message: String){
port?.let { p->
webView.postWebMessage(WebMessage(message,arrayOf(p)),Uri.EMPTY)
}?:kotlin.run {
App.log("Port not initialized")
}
}
因此,有我的Flutter Web App启动代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await di.init();
//listen to message from mobile app,then run code below
runApp(MyApp());
bloc.dispatch(GetUserProfile());
}
解决方法
使用 dart:html 库,我们可以在flutter web
应用与其主机android WebView
之间建立通信通道:
import 'dart:html' as html;
//...
html.window.onMessage.listen((event) {
// do something with received data
myController.text = event.data;
// return a response
event.ports[0].postMessage("response data");
});
Android端对应的Kotlin代码:
val webView = findViewById<WebView>(R.id.webview)
val (receiver,sender) = webView.createWebMessageChannel()
receiver.setWebMessageCallback(object : WebMessagePort.WebMessageCallback() {
override fun onMessage(port: WebMessagePort,message: WebMessage) {
Log.i("example","Received ${message.data}")
}
})
val message = WebMessage("Original message",arrayOf(sender))
webView.postWebMessage(message,Uri.EMPTY)
,
不确定100%是否会有所帮助,请尝试Interactive Webview。 使用didReceiveMessage.listen()方法,您应该能够侦听发送到本机Web视图的消息。
,您应该使用WebSockets(socket.io)进行相互通信。保留一个单独的nodejs实例作为您的套接字服务器,从android向套接字服务器发送套接字请求,然后将其从套接字服务器发送到您的Flutter Web应用
请参阅-https://pub.dev/packages/adhara_socket_io
,您可以使用来自socketIO或firebase的云消息传递服务来接收或发送消息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。