ABOUT ME

안뇽?

Today
Yesterday
Total
  • Javascript) 웹 과 각 네이티브(Android,iOS) 통신하기(Bridge)
    Programing Language/JavaScript 2021. 10. 19. 16:49
    728x90
    반응형

    Javascript

    var isMobile = {
      Android: function () {
        return navigator.userAgent.match(/Chrome/) == null ? false : true;
      },
      iOS: function () {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i) == null ? false : true;
      },
      any: function () {
        return (isMobile.Android() || isMobile.iOS());
      }
    };
    
    try{
        if(isMobile.any()) {
          if(isMobile.Android()) {
            window.fcmRegister.getUserEmail(user_info.user_email);
          } else if (isMobile.iOS()) {
            window.webkit.messageHandlers.fcmRegister.postMessage(user_info.user_email);
          }
        }
    } catch (e){
       console.log(e)
    }

     

    Android(Kotlin)

    lateinit var mainWebview: WebView
    mainWebview.addJavascriptInterface(WebBridge(this), "fcmRegister")
    
    
    class WebBridge(private val mContext: Context) {
      
      @JavascriptInterface
      fun getUserEmail(user_email: String) {
    	  Log.d("WebBridge", "getUserEmail: $user_email ")
      }
    }

     

    iOS(Swift) 
    (webview의 구체적인 크기 설정은 pure code로 진행하여 하단 박스에 넣지 않았습니다.)

    var webview : WKWebView?
    
    let userContentController: WKUserContentController = WKUserContentController()
    let preferences = WKPreferences()
    
    preferences.javaScriptCanOpenWindowsAutomatically = true
    userContentController.add(self, name: "fcmRegister")
    
    config.userContentController = userContentController
    config.preferences = preferences
    webview.uiDelegate = self
    webview.navigationDelegate = self
    webview = WKWebView(frame: CGRect.zero, configuration: self.config)
    
    //MARK: - webDelegate 모음
    extension ViewController : WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler, UIScrollViewDelegate
    {
        func userContentController(_ userContentController: WKUserContentController,didReceive message: WKScriptMessage) {
          if message.name == "fcmRegister"{
    			print("\(message.body)")
          }
    
    	}
    
    }

     

    도움 되셨다면 하단의 광고 클릭부탁드리겠습니다.

    728x90
    반응형
Designed by Tistory.