通过网络应用程序登录FB后的空白屏幕?

Posted

技术标签:

【中文标题】通过网络应用程序登录FB后的空白屏幕?【英文标题】:blank white screen after FB login via web app? 【发布时间】:2011-11-05 11:13:36 【问题描述】:

我已尝试按照以下位置的 FB 移动网站“入门指南”进行操作: https://developers.facebook.com/docs/guides/mobile/web/ 对于我在 iPhone 上全屏打开的网络应用程序。

但是当我尝试使用打开的 fb 登录页面登录时,单击“登录”按钮后出现空白屏幕。虽然用户已登录.. 我知道这一点,因为如果我关闭并重新打开我的网络应用程序,我会检查登录状态并尝试获取一些用户信息,它工作正常......

当我在桌面的 chrome 或 iphone 的 safari 中尝试相同的网络应用程序时,登录过程正常...它仅在全屏网络应用程序中中断。

有什么想法吗?我只是遵循 FB 的示例代码:-(

谢谢。

【问题讨论】:

我遇到了同样的问题。如果我发现任何东西,我会告诉你,请做同样的事情:) 【参考方案1】:

您需要做的就是将“display:'touch'”和redirect_uri参数添加到登录中:

FB.login(function(response) 
   if (response.authResponse) 
     console.log('Welcome!  Fetching your information.... ');
     FB.api('/me', function(response) 
      console.log('Good to see you, ' + response.name + '.');
       FB.logout(function(response) 
         console.log('Logged out.');
       );
     );
   else 
    console.log('User cancelled login or did not fully authorize.');
  
, scope: 'email,publish_stream' , redirect_uri: 'YOUR_REDIRECT_URL' , display : 'touch');

【讨论】:

【参考方案2】:

我在这篇文章中找到了更好的答案:FB.login broken flow for ios WebApp

var permissions = 'email,publish_stream,manage_pages,read_stream';
var permissionUrl = "https://m.facebook.com/dialog/oauth?client_id=" + m_appId + "&response_type=code&redirect_uri=" + encodeURIComponent(m_appUrl) + "&scope=" + permissions;
window.location = permissionUrl;

Mark 的上述回答不再适用了……Facebook 往往会像这样破坏事情。使用 window.location 显示登录页面就可以了。

我的应用在我登录后需要刷新,所以效果很好。因此,如果您不想刷新,可能需要重新考虑您的流程。

【讨论】:

【参考方案3】:

我找到了解决此问题的方法...似乎有一个未记录的“redirect_uri”属性我可以在 login() 方法中使用,例如

login(scope:'email', redirect_uri:'where_to_go_when_login_ends')

它是为 fb 桌面 SDK 记录的,所以我试了一下,它有点工作。当我说“有点”时,我的意思是在网络移动设备上看起来还可以,但是如果您尝试在桌面浏览器中运行它,登录弹出窗口将重定向到登录弹出窗口中的给定 URL - 而不是在其父窗口中.

我希望这足够好并且不会造成任何副作用,我真的说不出来。但由于缺乏其他选项,我将在此期间使用它:^)

【讨论】:

sagimann 我非常爱你!它很hacky,并且可以解决,但现在可以使用!!!!非常感谢您发现/发布这个错误,这让我很生气! 所以这意味着我不应该使用登录回调来处理响应。由于页面重新加载,它总是会转到 FB.getLoginStatus?我现在正在尝试这样做,但没有成功,FB.getLoginStatus 永远不会触发它的回调。 这个库让我想哭 终于弄明白了,FB.getLoginStatus 出于某种原因真的很脆弱。再次感谢! 还需要一种方法来确定 Web 应用程序是在桌面还是移动设备上运行,以便您知道何时使用 redirect_uri。向谷歌询问.. detectmobilebrowsers.com【参考方案4】:

这可能是 facebooks API 中的错误。我认为他们没有在 iPhone 网络应用程序模式下测试过他们的 API。可以在此处关注问题: https://developers.facebook.com/bugs/317323871621290

【讨论】:

以上是关于通过网络应用程序登录FB后的空白屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

Instagram WebView 阻止 FB 登录

使用Ionic登录fb的Rails API

Android Facebook 应用程序在 fb webview 中打开链接,我无法登录自己的网络应用程序

获得权限后的 Facebook 登录让 Safari 空白页面打开,而不是在 iOS 10 和 iOS 11 中重定向到我的应用

Facebook 登录问题 - iOS 应用程序的新用户无法通过 FB 连接登录

安装了 FB 应用程序的 SwiftUI 自定义 Facebook 登录