๐กย Hybrid App์ ์ํ Web-Native JavaScript Bridge ๊ตฌ์ถ
- Next.js ๊ธฐ๋ฐ ์น๋ทฐ(WebView) ํ๊ฒฝ์์ ๋ค์ดํฐ๋ธ ์ฑ(iOS/Android)์ย ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ JavaScript Bridge๋ฅผ ์ค๊ณ ๋ฐ ๊ตฌํํ์ฌ, ์น๊ณผ ๋ค์ดํฐ๋ธ ๊ฐ์ ๊ธฐ์ ์ ์ ์ฝ์ ๊ทน๋ณตํ๊ณ ํ์ฅ์ฑ๊ณผ ์์ ์ฑ์ ๊ฐ์ถ ํต์ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถ
๐ ์ฃผ์ ์ญํ ๋ฐ ์ฑ๊ณผ
- ์น-๋ค์ดํฐ๋ธ ์๋ฐฉํฅ ํต์ ๋ธ๋ฆฟ์ง ์ค๊ณ ๋ฐ ๊ฐ๋ฐ
- iOS(webkit.messageHandlers)์ Android(JavascriptInterface)์ ์๋ก ๋ค๋ฅธ ๊ตฌํย ๋ฐฉ์์ ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ํตํฉํ๊ณ ์ถ์ํํ์ฌ, ํ๋ซํผ์ ๋
๋ฆฝ์ ์ธ ๋จ์ผ API๋ฅผ ์ ๊ณต
- ์น ๊ฐ๋ฐ์๊ฐ ๋ค์ดํฐ๋ธ ์ง์ ์์ด๋ ๊ฒฐ์ , ์๋ฆผ, ADID ์กฐํ ๋ฑ ํต์ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ๋ฐ ๊ฒฝํ(DX)์ย ๊ฐ์
- createMessageย ํฉํ ๋ฆฌ ํจ์๋ฅผ ํตํด ์๋ก์ด ๋ธ๋ฆฟ์ง ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๋ฐ์ํ๋ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ต์ํ
- ๋น์ฆ๋์ค ํต์ฌ ๊ธฐ๋ฅ ์ฐ๋ ๋ฐ ์๋น์ค ํ์ฅ
- ๊ฐ๋ฐํย ๋ธ๋ฆฟ์ง๋ฅผ ํตํดย ๊ฒฐ์ ,ย ๋ก์ปฌ ํธ์ ์๋ฆผ,ย ์ธ๋ถ ๋ธ๋ผ์ฐ์ ์ฐ๋ย ๋ฑ ํต์ฌ ๊ธฐ๋ฅ์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํ
- ํ์ด๋ธ๋ฆฌ๋ ์ฑ์ ๊ธฐ๋ฅ์ ํ๊ณ๋ฅผย ๊ทน๋ณตํ๊ณ , ์ฌ์ฉ์ ๊ฒฝํ ๋ฐ ์๋น์ค ํ์ฅ์ฑ์ ์ง์ ์ ์ผ๋ก ๊ธฐ์ฌ
๐ ๏ธย ์ํคํ
์ฒ
์ ์ ํด๋์ค (Static Class) ๊ธฐ๋ฐ AppBridge ์์ฑ
- AppBridge๋ ๋ชจ๋ ์์ฑ๊ณผ ๋ฉ์๋๊ฐย static์ผ๋ก ์ ์ธ. ์ด๋ย new AppBridge()์ฒ๋ผ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์ ์์ดย AppBridge.closeWindow()์ ๊ฐ์ด ํด๋์ค ์ด๋ฆ์ ํตํด ์ง์ ๊ธฐ๋ฅ์ ํธ์ถํ๋ย ์ฑ๊ธํค(Singleton)๊ณผ ์ ์ฌํ ์ ํธ๋ฆฌํฐ ๋ชจ๋๋กย ๋์
๋ด๋ถ ๋ก์ง ์บก์ํ (privateย ๋ฉค๋ฒ)
- ๋ด๋ถ ์ํ์ ๋ณต์กํ ๋ก์ง์ ์บก์ํ, ์ธ๋ถ์์์ ์ง์ ์ ๊ทผ ๋ฐฉ์งํ๊ณ ์ค์ ๊ณต๊ฐ๋๋ ๋ฉ์๋๋ ๋ค์ดํฐ๋ธ์ ์ ๋ฌํด์ผํ๋ ํ์ฝ๋ postMessage ์ ๋งค์นญ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ.