커스텀 Bridge
나만의 네이티브 Bridge 모듈을 만들어 보세요.
개요
기본 제공 Bridge(window.unveilyBridge)로 해결되지 않는 고유한 네이티브 기능이 필요한 경우, 직접 작성한 네이티브 Bridge를 추가할 수 있습니다. MainActivity(Android)와 앱 진입 코드는 고객이 직접 수정하는 영역이므로, 여기에 자신만의 인터페이스를 등록하면 됩니다.
고급 · 플랫폼별 확장
이것은 Kotlin/Swift 코드를 직접 작성하는 고급 확장입니다. 기본 제공 글루(window.unveilyBridge)에는 임의의 액션을 실행하는 제네릭 .call() 디스패처가 없습니다. 대신 여러분이 만든 네이티브 객체를 WebView에 주입하고, 웹에서는 그 객체를 직접 호출합니다.
Android와 iOS 모두 커스텀 Bridge를 지원합니다. 플랫폼마다 등록 방식이 다릅니다.
Android — @JavascriptInterface 등록
여러분의 브릿지 클래스를 만들고 MainActivity에서 WebView에 주입합니다.
// app/src/main/java/.../bridge/MyNativeBridge.kt
class MyNativeBridge(private val context: Context) {
// JavaScript에서 window.MyNativeBridge.myAction(...) 으로 호출
@JavascriptInterface
fun myAction(paramsJson: String): String {
val params = JSONObject(paramsJson)
val input = params.optString("input")
val result = doNativeWork(input) // 네이티브 처리
return JSONObject().apply {
put("success", true)
put("result", result)
}.toString()
}
}// MainActivity.kt — WebView 설정 부분에서 주입
webView.addJavascriptInterface(MyNativeBridge(this), "MyNativeBridge")웹에서는 주입된 객체를 직접 호출합니다. @JavascriptInterface 메서드는 동기적으로 문자열을 반환하므로, 결과 JSON은 직접 파싱합니다.
// 웹 → 여러분이 주입한 네이티브 객체 직접 호출
const raw = window.MyNativeBridge.myAction(JSON.stringify({ input: "hello" }));
const result = JSON.parse(raw);
console.log(result.result);iOS — WKScriptMessageHandler 등록
iOS에서는 WKUserContentController에 메시지 핸들러를 등록합니다.
// WebView 구성 시 핸들러 등록
let controller = webView.configuration.userContentController
controller.add(self, name: "myAction")
// 메시지 수신
func userContentController(_ controller: WKUserContentController,
didReceive message: WKScriptMessage) {
guard message.name == "myAction",
let body = message.body as? [String: Any] else { return }
let input = body["input"] as? String ?? ""
let result = doNativeWork(input)
// 결과는 별도의 콜백(evaluateJavaScript 등)으로 웹에 전달
webView.evaluateJavaScript("window.onMyActionResult({ result: '\(result)' })")
}// 웹 → iOS 메시지 핸들러 (postMessage는 비동기 — 결과는 콜백으로 수신)
window.webkit.messageHandlers.myAction.postMessage({ input: "hello" });
window.onMyActionResult = function (result) {
console.log(result.result);
};유지보수 팁
커스텀 Bridge는 고객 코드 영역에 있으므로, Unveily SDK 업데이트로 덮어써지지 않습니다. 다만 기본 제공 Bridge로 가능한 기능은 최대한 window.unveilyBridge를 활용하고, 커스텀은 꼭 필요한 경우로 최소화하세요.