2016-08-09 4 views
2

私はiOSアプリで作業しています。ライブフィードを取得するには、アプリをsockJSサーバーに接続する必要があります。 iOS用のsockJSクライアントがありますか?前もって感謝します。次を使用してSockJSに接続に成功しましたiOSアプリをswockを使ってsockJsサーバーに接続

答えて

2

:)

  1. 場所のUIWebViewと隠しにその可視性を設定します。
  2. WebviewでSockJSクライアントを使用します。
  3. UIWebViewDelegateを使用します。
  4. JS関数はネイティブのスウィフトコードから1回だけ呼び出す必要があります。

のViewController:

func initWebView(){ 
    webView = UIWebView() 
    webView.frame = CGRectMake(0, self.view.frame.height-120, self.view.frame.width, 58) 
    if let url = NSBundle.mainBundle().URLForResource("template", withExtension: "html", subdirectory: "web") { 
     let requestURL = NSURLRequest(URL: url) 
     //print("request\(requestURL)") 
     webView!.delegate = self 
     webView!.loadRequest(requestURL) 
    } 
} 

func webViewDidFinishLoad(webView: UIWebView) { 
    print("WebView Loaded") 
    if self.webViewLoaded == false { 
     webView.stringByEvaluatingJavaScriptFromString("connectToSocket('\(self.serverUrl)','\(self.accessKey)')"); 
     //print("Sock return: \(htmlTitle)") 
    } 
    self.webViewLoaded = true 
} 

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    if request.URL!.scheme == "sockjs" { 
     dispatch_async(dispatch_get_main_queue(), { 
      let urlComponents = NSURLComponents(string: (request.URL?.absoluteString)!) 
      let queryItems = urlComponents?.queryItems 
      let param1 = queryItems?.filter({$0.name == "msg"}).first 
      let temp = String(param1!.value!) 
      if let data = temp.dataUsingEncoding(NSUTF8StringEncoding) { 
       let json = JSON(data: data) 
       //print("Live Data: \(json)") 
       self.updateMarkerInfo(json) 
      } 
     }) 
     return false 
    } 

    return true 
} 

template.html:template.htmlで

コピーsockjsコードは、次のように追加します。

<script type="text/javascript"> 
var sock; 
    function connectToSocket(url, accessKey){ 
     //alert("connectTosocket called!"); 
     this.sock = new SockJS(url); 

     sock.onopen = function() { 
      //alert("open"); 
      sock.send(JSON.stringify({ 
       key: accessKey 
      })); 
     }; 

     sock.onclose = function() { 
      sock.close(); 
      alert("close"); 
     }; 

     sock.onmessage = function(e) { 
      result = e.data.replace(/,\s*$/, ''); 
      window.location = 'sockjs://data?msg='+ result 
      //alert(result); 
     }; 

     sock.onerror = function(e) { 
      alert("error" + e); 
     }; 
    } 

    function closeConnection() { 
     try { 
      this.sock.close(); 
      }catch(err) { 

     } 
     } 

    function sendMessage(message){ 
     sock.send(message); 
    } 


</script> 

は、Info.plistの

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 
+0

に次のように追加することを忘れないでください。これは私のためにうまく働いた:) – Ashutosh

+0

あなたはWebViewの中SockJSクライアントとはどういう意味ですかましたか? 2番目の点を説明してください。 – Murali

+0

SockJSクライアントでhtmlファイルを作成し、webviewでそれを使用してください。 –

関連する問題