Android
[Android,Java] APP과 WEB 통신하기 (JavascriptInterface)
밤토리세상
2023. 6. 15. 10:09
하이브리드 앱을 만들면서 앱과 웹 사이에 정보교류가 필요하게된다
웹에서 앱을 호출하여 네이티브적인 요소를 동작시키거나
반대로 앱에서 웹을 호출하여 웹에서의 동작 또는 데이터를 넘겨주거나 할때 말이다
우선 웹에서 앱을 호출하게 될때를 알아보자
안드로이드에서는 JavascriptInterface 를 사용하여 웹에서 앱을 호출하여 스크립트를 사용하듯이 앱을 동작시킬수있다
webView.addJavascriptInterface(new AndroidBridge(), "HybridApi");
.
.
.
private class AndroidBridge {
public AndroidBridge() {
// TODO Auto-generated constructor stub
}
}
우선 webView 에 addJavascriptInterface 를 이용하여 브릿지를 연결해준다
물론 해당 클래스도 만들어서 말이다
HybridApi 는 웹에서 호출할때 사용되는 이름이니 편한대로 만들면된다
private class AndroidBridge {
public AndroidBridge() {
// TODO Auto-generated constructor stub
}
@JavascriptInterface
public void setId(String id) {
// 웹으로부터 전달받은 String 값 id
}
}
이제 브릿지 클래스 안에 웹으로부터 호출되는 값을 받아볼차례다
위와같이 JavascriptInterface로 선언된 메소드 하나를 만든다
웹에서 스크립트로 setId("아이디") 를 호출하게 되면 앱의 해당 메소드로 값이 전달되어 동작하게 된다
웹에서는 아래와 같이 호출해주면 된다
window.HybridApi.setId('아이디입니다');
스크립트로 window 에서 아까 앱에서 만든 브릿지명 HybridApi 밑에 인터페이스 메소드 setId 를 호출했다.
그러면 앱에서 setId(String id) 로 "아이디입니다" 의 값이 들어오게되며 이를 네이티브에서 사용하면된다.
이제 반대로 앱에서 뭔가를 처리하거나 웹에서의 동작이 필요할때는 간단하다
해당 페이지의 스크립트를 그냥 호출하면된다
webView.loadUrl("javascript:setToken('" + firebase_token + "')");
webView에 loadUrl 로 스크립트를 직접 호출해서 해당값을 넘겨주거나 원하는 스크립트를 실행하면된다