본문으로 건너뛰기

[STEP5] 위젯 상호 연동하기

위젯-앱으로 이어지는 경험을 자연스럽게 하고, 자사 서비스 목표 달성을 위한 연동을 위해 모바일 앱과 연동한 위젯 웹뷰 내에서는 정해진 액션에 "JS 인터페이스" 호출하여 앱과 연계할 수 있습니다.
위젯 내에서 참조할 자바스크립트 인터페이스 이름은 [WaikerInterface] 입니다.

JS인터페이스 연동 예시

webView.addJavascriptInterface(WebAppInterface(this), "WaikerInterface")

class WebAppInterface(private val context: Context) {
@JavascriptInterface
fun close() {
// 현재 해당 메소드를 호출한 인앱 웹뷰가 닫히는 로직
}
fun newWindow(url: String) {
// 전달받은 url 로 새로운 인앱 웹뷰를 여는 로직
}
//아래 리스트에 있는 로직들 중 필요한 것들은 구현
}
webView.configuration.userContentController.add(self, name: "WaikerInterface")
extension ViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKScriptMessage, didReceive message: WKScriptMessage) {
if message.name == "WaikerInterface" {
if let body = message.body as? [String: Any] {
if let method = body["method"] as? String {
switch method {
case "close":
// 현재 해당 메소드를 호출한 인앱 웹뷰가 닫히는 로직
break
case "newWindow":
if let url = body["url"] as? String {
// 전달받은 url로 새로운 인앱 웹뷰를 여는 로직
}
break
//아래 리스트에 있는 로직들 중 필요한 것들은 구현
default:
break
}
}
}
}
}
}

JS인터페이스 목록

Function NameParameterscallbackReturn액션 설명
close--웹뷰 종료
newWindowurl: string;-새로운 웹뷰를 호출
moveToSellticker: string;-종목 매도페이지로 이동
moveToBuyticker: string;-종목 매수페이지로 이동
moveToStockticker: string;-종목 상세페이로 이동
sharetitle?: string; text?: string; url: string;-공유하기 액션