[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 Name | Parameters | callbackReturn | 액션 설명 |
---|---|---|---|
close | - | - | 웹뷰 종료 |
newWindow | url: string; | - | 새로운 웹뷰를 호출 |
moveToSell | ticker: string; | - | 종목 매도페이지로 이동 |
moveToBuy | ticker: string; | - | 종목 매수페이지로 이동 |
moveToStock | ticker: string; | - | 종목 상세페이로 이동 |
share | title?: string; text?: string; url: string; | - | 공유하기 액션 |