Explanation
오늘은 지난 시간에 이어서 웹뷰와 네이티브간 통신을 할 수 있는 자바스크립트 인터페이스를 만들어볼게요.
지난 코드에 이어서 작성하니, 혹시 헷갈리시면 지난 글을 참고해주세요!
지난글: (/fe-개발자를-위한-안드로이드-후려치기-1-웹뷰-만들기/)
작성된 코드는 https://github.com/falsy/blog-post-example/tree/master/android-for-frontend/javascript-interface 에서 확인하실 수 있습니다!
1. 자바스크립트 인터페이스 클래스 만들기
간단하게, 웹뷰 액티비티에 인터페이스 클래스를 추가하고 웹뷰에 연결해줄게요.
// java/com.example.frontend/WebActivity
package com.example.frontend
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.webkit.JavascriptInterface
import android.webkit.WebView
import android.widget.Toast
class WebAppInterface(private val activity: AppCompatActivity) {
@JavascriptInterface
fun showToast(toast: String) {
Toast.makeText(activity, toast, Toast.LENGTH_SHORT).show()
}
}
class WebActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_web)
val myWebView: WebView = findViewById(R.id.webView1)
myWebView.settings.javaScriptEnabled = true
myWebView.addJavascriptInterface(WebAppInterface(this), "Android")
myWebView.loadUrl("http://10.0.2.2:8080")
}
}
이제 웹뷰에서 window.Android 객체에서 위 등록된 인터페이스를 호출할 수 있답니다!
2. 웹뷰 컨텐츠 코드 수정하기
// src/index.jsx
import React from "react"
const App = () => {
const handleClickToast = () => {
if(window.Android) {
window.Android.showToast('show toast')
}
}
return (
<>
<button onClick={handleClickToast}>Show Toast</button>
</>
)
}
export default App
위에 선언한대로 "window.Android.showToast('show toast')"를 웹에서 호출을 하면 안드로이드 네이티브의 토스트가 호출이 되겠죠?
6. 실행

끝
사실 처음 생각은 자바스크립트 인터페이스로 새로운 웹뷰 액티비티를 호출하는 인터페이스까지 만드는 거 였는데, 오늘은 일요일이고.. 게임도 조금 하고 싶고 해서.. 오늘은 여기까지하고..
다음에 다음 글로 찾아오겠습니다. 슝~
:)



