我正在使用一个必须登录并通过WKWebview执行所有用户功能的应用程序。登录时,允许用户在其应用程序帐户旁边使用Facebook帐户。通过Facebook实现登录过程时,我发现了一些情况。在我的登录页面上,有一个Facebook按钮,并且在应用程序中,我们可以通过以下方法检测窗口或弹出请求:
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
}
从这位代表那里,我发现了一些奇怪的行为。从其他本机应用程序,我们将登录URL传递到safari Web浏览器,并在使用safari登录后,浏览器将用户重定向到具有访问令牌的应用程序。但是从wkwebview我发现在safari中登录是成功的,但是没有重定向到应用程序。对于此问题,一些帖子/博客建议在createWebViewWith方法内创建一个新的wkwebview。我做到了,我成功创建了一个临时的webview,并在登录成功后将其关闭。
但是通过wkwebview登录到应用程序后,我有一些帖子,用户可以通过fagebook共享这些帖子。当用户单击那些共享按钮时,也会调用createWebViewWith()方法。但是我希望共享对话框弹出窗口现在是因为我具有弹出链接,并且我已经来自DecisionPolicyFor navigationAction method()。如果我使用共享链接创建另一个Web视图,那么我只会看到Facebook主页。
现在,如果使用UIApplication.shared.open(url ...)使用链接将用户发送到野生动物园,我只会看到一个Facebook按钮。然后,我必须再次单击该按钮,它会在野生动物园中在显示共享拨号/弹出窗口中创建一个新窗口。检查以下屏幕截图:
我的共享链接是我从DecisionPolicyFor navigationAction method()获得的:https://www.facebook.com/plugins/share_button.php?app_id=170873263118451&channel=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect%2Fxd_arbiter%2Fr%2Fd_vbiawPdxB.js%3Fversion%3D44%23cb%3Df207cc91ea15cf%26domain%3Dwww.domain.com.au%26origin%3Dhttps%253A%252F%252Fwww.domain.com.au%252Ff174d245fcc403a%26relation%3Dparent.parent&container_width=0&href=https%3A%2F%2Fwww.domain.com.au%2FFbUtil%2FPromoCodeShare%3Fcode%3DPS39144&locale=en_US&sdk=joey&type=button_count
在createWebViewWith()中,我得到了navigation.request.url为https://m.facebook.com/home.php
我看到一些与此相关的问题/方案:
https://samwize.com/2016/12/06/pitfall-using-wkwebview-for-facebook-login/
https://github.com/dpa99c/cordova-plugin-inappbrowser-popup-bridge/issues/7
问题:为什么即使从网站(从wkwebview)单击“共享”按钮,我也得到此中间共享按钮?我想念什么吗?单击后如何显示此共享对话框/弹出窗口?