Swift, WKWebView에서 JavaScript Event Catch

2016. 8. 18. 17:23개발/iOS

제목을 저렇게 밖에 쓸 수 없겠다. 어렵다. 

무튼,


상황

AppStore에 어플을 올리는데 리젝 당했다!! 3.2.2 조항이 문제였다. 

(가이드 라인) App Store Review Guideline 

얘기인즉슨, 펀딩을 하든 기부를 하든 그런 행위가 있는 어플은 Safari 링크나 SMS등과 같은 방법으로 어플 밖에서 이루어져야 한다. 이다.

어플을 업데이트 할 수록 점차 까다로워지는 느낌이다.

실제로 최근에 리젝을 당하는 횟수가 점차 많아지고 있다.


Xcode 7.3, iOS 9.3




Script에서의 무언가가... iOS로 전달만 해주면 된다... 그것만 찾아봤다.

그리고 역시 stackoverflow.com이 최고인 것을 다시금 깨달았다.


참조를 한 문서는 다음 3개이다.





내가 구현한 방법은 다음과 같다.

일단 급하게 기본적인 것만 구현했는데 생각보다 복잡하다. 

급하게 배끼느라... 여긴 여유 있을때 찬찬히 뜯어봐야겠다.


- ViewController에 WKScriptMessageHandler를 extends 한다.


- loadView() 에 다음과 같이 추가한다.


let contentController = WKUserContentController()

contentController.addScriptMessageHandler(self, name: "callbackHandler")

        

var config = WKWebViewConfiguration()

config.userContentController = contentController

        

//self.webView = WKWebView()

self.webView = WKWebView(frame: CGRectZero, configuration: config)


- 다음 함수를 추가한다.


func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) {

        if (message.name == "callbackHandler") {

            print("JavaScript is sending a message \(message.body)")

            

            if (message.body as! String == "donation") {

              //todo...

            }

        }

}


- 홈페이지 원하는 위치에 script에 추가한다.


webkit.messageHandlers.callbackHandler.postMessage('donation');