安卓Facebook应用内浏览器无法登录Facebook。

6

很长一段时间以来,我在我的网站上使用Facebook登录Javascript SDK,但最近它在Android Facebook应用内置浏览器中停止工作。当我点击登录按钮时,它重新加载完整页面以进入授权页面,然后回来却什么也没有得到。

即使使用FB.login函数和Facebook登录按钮(https://developers.facebook.com/docs/facebook-login/web/login-button),Facebook也提供了相同的示例代码也有同样的问题。两者都得到了相同的结果。它只是刷新了页面。

示例代码:

<script>

function LoggedFb(){
      FB.login(function (response) {
                FB.api(`/me?fields=id,email&access_token=${response.authResponse.accessToken}`, function 
                (userResponse) {
                    alert(userResponse.email);
                });
            }, { scope: 'email' })
}

</script>

代码在除了安卓Facebook内置浏览器以外的所有平台上都可以正常运行。
谢谢。

我遇到了完全相同的问题,但只有在Android 9设备上出现。你能确认一下吗?你已经找到解决方案了吗? - A. I.
目前为止,@A.I.还没有解决这个问题,因此我已经通过Facebook实现了手动登录。 - sagar43
1
谢谢。由于Facebook给出的样本也存在同样的问题,我认为这应该是应用内Facebook浏览器的一个bug。我最近向Facebook报告了这个问题。如果你找到解决办法,请在这里分享。我也会这样做。谢谢。 - A. I.
是的,这是由于Facebook Android应用程序的最近更新造成的,由于刷新令牌请求页面。 - sagar43
1个回答

5

对我来说,这是一个不断循环的过程:登录、刷新并再次尝试,但从未登录成功。

通过使用FB.getLoginStatus而非仅使用FB.login,我已经成功解决了这个问题。

如果用户已经通过Facebook登录了,它就会直接通过,否则会有一次刷新,然后登录就会成功。

若有人能够修复此问题,使得根本不需要刷新,我将不胜感激。

示例代码:

function signIn() {
  FB.getLoginStatus((response: any) => {
    if (response.status !== 'connected') {
      return FB.login((response: any) => {
        handleFbResponse(response);
      }, {
        scope: 'public_profile,email',
        enable_profile_selector: true,
        auth_type: 'rerequest',
        return_scopes: true
      });
    } else {
      handleFbResponse(response);
    }
  });
}

function handleFbResponse(response) { ... }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接