我已将 Facebook 与我的应用程序集成以发布内容。它一直工作到应用程序的 1.2 版,但现在我在登录后收到安全警告,如下所示。
关于这个安全警告的奇怪之处在于,它可以在我的一个 Facebook 帐户上正常工作,而没有像以前那样发出任何警告,但是我在另一个帐户中收到了这个警告。我附上了这个问题的屏幕截图:
禁用安全浏览是不值得的,因为我们不能让所有用户都禁用安全浏览。
我确实已经解决了。在这里查看我的答案。逃离 Facebook 安全警告
在网上花了很长时间搜索这个问题。最后我得到了关于它的答案。
登录 Facebook 帐户> 进入隐私设置> 点击页面左侧的安全标签 > 然后禁用安全浏览
现在重置您的模拟器,然后运行应用程序并再次登录它肯定会工作
简短的回答是,如果您使用自己的 redirect_uri 而不是标准的 facebook ,则可以解决问题。当访问令牌返回时,标准的 www.facebook.com/connect/login_success.html 页面有一个计时器,它可能会在您的应用程序检索访问令牌之前更改 URL。
此问题可能与 Internet 延迟有关。我们有两个客户报告了这个问题,一个在缅甸,一个在英国。其他任何人都没有问题。假设您是这样授权的:
https://www.facebook.com/v2.10/dialog/oauth?client_id=999999999999999&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=user_photos,user_events&display=popup
对于默认的 redirect_uri ( https://www.facebook.com/connect/login_success.html ),facebook 在 URL 的参数中返回 access_token,但该页面的 html 正文包含两个计时器:
Success <br/>
<b id="warning" style="display: none; color:red">
SECURITY WARNING: Please treat the URL above as you would your password and do not share it with anyone.
See the <a href="http://l.facebook.com/l.php?u=xxxxxxx" target="_blank" data-lynx-mode="hover">Facebook Help Center</a> for more information.
</b>
<script type="text/javascript">
document.domain = 'facebook.com';
if (window == top) {
setTimeout(function () { document.getElementById("warning").style.display = "block"; }, 2000);
}
setTimeout(function () { if (window.history.replaceState) { window.history.replaceState({}, "", "\/connect\/blank.html#_=_"); } }, 2000);
</script>
当任一计时器触发时,它将更改删除 access_token 的 URL。因此,只要您在它改变之前抓住它,一切都会奏效。在我们的例子中,我们在 Windows 下使用嵌入式浏览器控件并监控导航链接。只要代码可以在此超时发生之前接收到包含 access_token 的导航事件,那么一切正常。我们永远无法确定互联网连接的延迟以及用户计算机速度慢的某种组合是如何导致此问题的,但这解决了它。
在您的 Facebook 应用程序的 Facebook 登录设置中,将您自己的 URI 添加到有效 OAuth 重定向 URI 列表中。如果您重定向到自己的 html 页面,则可以避免 facebook 超时。