Facebook Javascript SDK - Fb.login 在浏览器内置的 Facebook 上不起作用
Posted
技术标签:
【中文标题】Facebook Javascript SDK - Fb.login 在浏览器内置的 Facebook 上不起作用【英文标题】:Facebook Javascript SDK - Fb.login not working on Facebook built in browser 【发布时间】:2019-11-19 17:13:43 【问题描述】:我注意到 Facebook FB.Login 功能或 Facebook 登录按钮不再适用于在 android 上使用 Facebook 的应用内浏览器打开的页面。 (当用户单击 Facebook 应用程序内的 URL 时,它会在内置浏览器的应用程序上打开)。在 Messenger 上它工作正常。
我不知道这个错误是什么时候开始的。我甚至使用 FB.login 功能以及 Facebook 登录按钮 (https://developers.facebook.com/docs/facebook-login/web/login-button) 进行了测试。得到了他们两个相同的结果。它只是刷新页面。
示例代码:
<script>
function LoggedFb()
//This is just a sample code. This code when executed from a URL opened from Facebook's Browser ( When user clicks on a url on the Facebook App ), won't run. From Chrome or other browser works fine.
alert("got in here");
</script>
<div class="fb-login-button" data- data-size="large" data-button-type="continue_with" data-auto-logout-link="false" data-onlogin="LoggedFb" data-use-continue-as="false" data-scope=""></div>
</html>
上面的示例,例如在 Chrome 上运行时,将正常工作并调用 LoggedFb 函数。当使用此代码的页面从 Facebook 内置浏览器运行时,它只会刷新。
我也尝试过实现 FB.Login 功能,但它也不起作用。
我什至填写了错误报告 (https://developers.facebook.com/support/bugs/456215991739392/) 但他们说这不是错误。
从这开始,我看到很多网站的登录按钮都损坏了。其他人遇到这种情况,或有解决方案吗?
谢谢。
【问题讨论】:
如果实施manual login flow 产生更成功的结果,您可以尝试。 (您可以使用纯客户端,查看response_type
参数的说明。)
但即便如此,这只会给你一个令牌——我担心它可能不会导致 JS SDK 在这种情况下识别登录用户。在这种情况下,您仍然可以通过手动显式提供令牌作为参数来进行自己的 API 调用(我认为它没有从外部设置默认访问令牌的方法) - 但其他依赖于内部识别登录用户的东西可能仍然无法正常工作。
@valter 有什么解决办法吗?我也面临同样的问题。
嗨@sagar43。唯一的解决方案是使用 php 实现手动登录流程。 Facebook 应用程序被窃听。从几天前开始,分享也停止在 android 上运行。
【参考方案1】:
每当访问来自 Facebook 移动浏览器时。单击 FB.login 没有任何作用,因为它已经假定您已登录。您需要做的是使用当前登录帐户的 accessToken 和 userID 来使用 FB 的 API 获取您需要的详细信息。
这里是 javascript 的代码示例:
signInWithFB(): void
FB.getLoginStatus((response: any) =>
if (response.status !== 'connected')
return FB.login((response: any) =>
this.handleResponse(response)
,
scope: 'public_profile,email',
enable_profile_selector: true,
auth_type: 'rerequest',
return_scopes: true
);
else
this.handleResponse(response)
);
handleResponse(response)
FB.api(`/me?fields=email,picture,first_name,last_name`,
(response: any) =>
this._loginService.socialLogin(
email: response.email ? response.email : '',
profilePicture:
'url': response.picture.data.url,
'key': ''
,
fullName: `$response.firstName $response.lastName`,
socialId: response.id,
...FACEBOOK_LOGIN
).
subscribe(res =>
)
)
【讨论】:
以上是关于Facebook Javascript SDK - Fb.login 在浏览器内置的 Facebook 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
html Facebook Javascript SDK演示
html 异步加载Facebook JavaScript SDK
Facebook javascript SDK 分享图片问题
Facebook 登录:如何将 JavaScript 与 PHP SDK 结合起来?