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 로 스크립트를 직접 호출해서 해당값을 넘겨주거나 원하는 스크립트를 실행하면된다