当您的应用程序作为渐进式Web应用程序安装时,Facebook登录弹出窗口和父窗口(您的应用程序)无法在桌面环境中进行通信。
您在其他情况下也会遇到此问题,例如,当你的应用程序的URL是从其他应用程序(Instagram,Facebook Messenger等)启动的时候,我记不清哪些特定的场景或设备与此相关,但有几个。
您可以按照另一个答案的建议来实现基于服务器的流。您也可以在客户端实施自定义重定向流程。
如何创建Facebook的SDK文档中描述的自定义重定向流,“手动构建一个登录流程”下:
https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow
的想法如下:
你指挥你的用户访问Facebook登录对话框(而不是由FB.login()
启动的弹出窗口),例如当他们点击一个按钮:
https://www.facebook.com/v2.11/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&response_type=token
&state={state-param}
如果用户成功授予您的应用程序所需的权限,他/她重新回到您的应用程序(该位置由{redirect-url}
确定):
{redirect-uri}?code=<facebook-code>&state={state}#_=_
然后你的应用程序需要确定登录是否成功。有两种方法可以做到这一点:
A)读取当前URL的查询字符串(见code=<code>
部分 - 这可以用来检索有关用户其他信息,也可以发送到后台服务器)。
B)使用Facebook SDK不检索如果您已经使用SDK和FB.login(yourCallback)
使用FB.getLoginStatus(yourCallback)
登录状态,您可以添加到yourCallback
FB.getLoginStatus
为好。您也可以支持弹出流程和重定向流程,具体取决于用户的设备。
我建议通过我在上面发布的文档条目阅读更多信息和选项。
这有什么更新?我正在处理同样的问题 –
@ GabrielC.Troia nope,我必须保持浏览器模式的应用程序。我认为它是一个交叉来源的东西,铬是封锁它。所以试图做一个自定义的登录流程。 –
谢谢。保持它在浏览器模式中违背了成为PWA的目的不是吗? –