2015-10-07 19 views
13

Sto cercando di incorporare Facebook Comments Plugin nella mia app nativa.Accedi a Facebook Commenti iOS (swift) non risponde

La casella Commenti di Facebook è stata presentata correttamente.

enter image description here

ma quando premo "Login a Facebook per Post", non succede nulla. Sto cercando di catturare l'evento con questa funzione: func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) ma non funziona.

Ecco il mio codice:

import UIKit 
import WebKit 

class FacebookCommentsViewController: UIViewController, WKScriptMessageHandler{ 


    var webView: WKWebView! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     // WKWebView 
     let contentController = WKUserContentController(); 
     contentController.addScriptMessageHandler(self,name: "callbackHandler") 

     let configuration = WKWebViewConfiguration() 
     configuration.userContentController = contentController 

     webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: configuration) 
     webView.scrollView.bounces = false 
     self.view.addSubview(webView) 

     let facebookCommentsURL = "<!DOCTYPE html><html> <head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> </head> <body> <div id=\"fb-root\"></div><script>(function(d, s, id){var js, fjs=d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js=d.createElement(s); js.id=id; js.src=\"http://connect.facebook.net/en_US/all.js#xfbml=1&appId=527957123932456&status=0\"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script> <div class=\"fb-comments\" data-href=\url-to-my-item data-width=\"470\" data-num-posts=\"5\"></div></body></html>" 

     webView.loadHTMLString(facebookCommentsURL, baseURL: NSURL(string:"my base url")) 
    } 

    func userContentController(userContentController: WKUserContentController,didReceiveScriptMessage message: WKScriptMessage) 
    { 
     print(message.name) 
    } 
} 

Che cosa sto facendo di sbagliato?

+0

Si sta utilizzando Cocoapods? –

+0

No. Solo il plugin - https://developers.facebook.com/docs/plugins/comments – Luda

+0

Stai usando sdk di Facebook per il login.? –

risposta

3

Sorgente!

Ho sostituito WKWebView con UIWebView e tutto ha funzionato!

Quando accesso era successo WebView aggiornamento:

func webViewDidFinishLoad(webView: UIWebView) 
    { 
     let currentURL : NSString = (webView.request?.URL!.absoluteString)! 
     if (currentURL.containsString("/login_success")) 
     { 
      self.reloadFacebookComments() 
     } 

     self.updateFramesAccordingToWebViewcontentSize() 
    } 
0

Il tuo JS è malformato? Il generatore di codice generato questo per me:

<div id="fb-root"></div> 
 
<script> 
 
    (function(d, s, id) { 
 
    var js, fjs = d.getElementsByTagName(s)[0]; 
 
    if (d.getElementById(id)) return; 
 
    js = d.createElement(s); 
 
    js.id = id; 
 
    js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5"; 
 
    fjs.parentNode.insertBefore(js, fjs); 
 
    }(document, 'script', 'facebook-jssdk')); 
 
</script>

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta name=\ "viewport\" content=\ "width=device-width, initial-scale=1.0\"> 
 
</head> 
 

 
<body> 
 
    <div id=\ "fb-root\"></div> 
 
    <script> 
 
    (function(d, s, id) { 
 
     var js, fjs = d.getElementsByTagName(s)[0]; 
 
     if (d.getElementById(id)) return; 
 
     js = d.createElement(s); 
 
     js.id = id; 
 
     js.src = \"http://connect.facebook.net/en_US/all.js#xfbml=1&appId=527957123932456&status=0\"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk')); 
 
    </script> 
 
    <div class=\ "fb-comments\" data-href=\url-to-my-item data-width=\ "470\" data-num-posts=\ "5\"></div> 
 
</body> 
 

 
</html>

Da quello che posso dire che sembra che sia?

modifica: oh, forse no. Le altre parti della stringa sono prese fuori dal contesto.

+0

Se hai una nuova domanda, per favore chiedi facendo clic sul pulsante [Chiedi domanda] (http://stackoverflow.com/questions/ask). Includere un collegamento a questa domanda se aiuta a fornire il contesto. – Nullify

+0

@ 200OK Immagino tu sia confuso.È un tipo di risposta per questa domanda. –

+0

sì, è quello che ho in facebookCommentsURL. Non capisco davvero la tua risposta – Luda

0

Non v'è alcun bisogno di cambiare visualizzazioni. Il problema principale è che lo script di facebook sta tentando di aprire questa pagina in una nuova pagina (_blank), quindi lo script non funziona in webview. Per evitare questo problema in WKWebView è necessario avere l'implementazione di WKUIDelegate nel controller ed è necessario aggiungere _webView.UIDelegate = self questo codice nel metodo viewDidLoad.

Poi chiamare questo metodo delegato per evitare questo problema:

in Objective C

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures 
{ 

    if (!navigationAction.targetFrame.isMainFrame) { 

    [webView loadRequest:navigationAction.request]; 
    } 

    return nil; 
} 

in Swift

optional func webView(_ webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, 
    forNavigationAction navigationAction: WKNavigationAction, 
     windowFeatures windowFeatures: WKWindowFeatures) -> WKWebView?{ 
    if navigationAction.targetFrame.isMainFrame == nil { 
     webView.loadRequest(navigationAction.request) 
    } 

    return nil 
}