Разрыв потока FB.login для iOS WebApp

Я делаю iOS Webapp (т.е. HTML-страницу, которая работает в автономном режиме - ни один из хрофов Safari - если закладка страницы добавлена ​​на рабочий экран).

У меня есть кнопка, в которой onclick вызывает FB.login(). Когда в автономном режиме webapp перенаправляется на страницу входа в facebook (как и ожидалось), однако впоследствии я застрял на белом экране (меня не просят пройти аутентификацию, поскольку у меня уже есть, но я полагаю, что экран аутентификации произойти до белого экрана) и не возвращаться в webapp.

Тот же поток в приложении Safari работает так, как ожидалось. При нажатии на логин вызывается FB.login(), в котором открывается новая страница, на которой вас попросят войти в Facebook, после входа в систему и аутентификации приложения эта страница закрывается, и вы возвращаетесь на исходную страницу.

Кажется, что в автономном режиме возникает проблема с "второй страницей" при закрытии входа в FB и перенаправлении обратно в приложение (это не так). И поток сломан.

Есть ли какое-нибудь обходное решение для этого?

Спасибо,
-Esa

Ответ 1

Вы можете попробовать обходной путь ниже. Это сработало для меня. В мобильном устройстве он перенаправляет URL-адрес аутентификации на стороне клиента.

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;
}

Ответ 2

Я использовал следующее, чтобы определить, находится ли я в режиме домашнего экрана и что делать правильно:

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}
  );
}