私はスタンドアロン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());
}
_
通信のためにWebSockets(socket.io)を使用する必要があります。ソケットサーバーとして機能する個別のNodeJSインスタンスを保管し、Android]からSocket Serverに送信し、Socket ServerからFlutter Webアプリにエミットします。
受信または送信メッセージのためにSocketioまたはFirebase Cloud Messaging Serviceから使用できます。