當您的應用程序作爲漸進式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的目的不是嗎? –