web-dev-qa-db-ja.com

Flutter:外装からのメッセージ通信を受け取る方法は?

私はスタンドアロンAndroidアプリ。それから私はFlutterで小さいWebアプリを開発し、それをWebサーバーにエクスポートしました。それはその一部としてWebView内部にロードされます。 Android用Kotlinのスタンドアロンアプリ。

AndroidはPostMessagingをサポートし、データをWebViewからチャンネルに直接送信できます。私の質問は、Flutter Dartコードでこれらのメッセージを聴く方法です(私のWebアプリの中)?

これはkotlin Android App:)で使用されているコードです。

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アプリの起動コードがあります。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await di.init();

  //listen to message from mobile app, then run code below
  runApp(MyApp());
  bloc.dispatch(GetUserProfile());
}
 _
10
martin1337

通信のためにWebSockets(socket.io)を使用する必要があります。ソケットサーバーとして機能する個別のNodeJSインスタンスを保管し、Android]からSocket Serverに送信し、Socket ServerからFlutter Webアプリにエミットします。

参照 - https://pub.dev/packages/adhara_socket_io

1
abhijat_saxena

受信または送信メッセージのためにSocketioまたはFirebase Cloud Messaging Serviceから使用できます。

0
hosein moradi