FB.login破坏了iOS WebApp的流程

时间:2012-06-25 21:32:51

标签: ios web-applications facebook-javascript-sdk

我正在创建一个iOS Webapp(即一个以独立模式运行的HTML页面 - 没有Safari浏览器 - 当页面的书签添加到主屏幕时)。

我有一个onclick调用FB.login()的按钮。当处于独立模式时,webapp会重定向到facebook登录页面(正如预期的那样),但之后,我被卡在白色屏幕上(我没有被要求进行身份验证,因为我已经有了,但我想,验证屏幕会发生在白色屏幕之前)并且不会被放回到webapp中。

Safari应用程序中的相同流程按预期工作。单击登录会调用FB.login(),这将打开一个新页面,要求您登录Facebook,一旦您登录并验证应用程序,该页面将关闭,您将被放回原始页面。

似乎在独立模式下,“第二页”出现问题,FB登录关闭并重定向回应用程序(它没有)。流动就被打破了。

是否有任何解决方法?

谢谢,
-esa

2 个答案:

答案 0 :(得分:9)

您可以尝试以下解决方法。它对我有用。在移动设备中,它会重定向到客户端身份验证网址。

var isMobile = false;
try {
    isMobile = (window.location.href == top.location.href && window.location.href.indexOf("/mobile/") != -1);
} catch (e) {}
if (!isMobile) {
    FB.login();
} else {
    var permissionUrl = "https://m.facebook.com/dialog/oauth?client_id=" + appId + "&response_type=code&redirect_uri=" + redirectPage + "&scope=" + permissions;
    window.location = permissionUrl;
    return;
}

答案 1 :(得分:8)

我使用以下内容来检测我是否处于主屏幕模式并相应地做正确的事情:

if ("standalone" in navigator && navigator.standalone) {
  var permissionUrl = "https://m.facebook.com/dialog/oauth?client_id=" + appId + "&response_type=code&redirect_uri=" + window.location + "&scope=" + app_permissions;
  window.location = permissionUrl;
} else {
  FB.login(
    function(response) {
      ...
    },
    {scope: app_permissions}
  );
}