Как вернуться в веб-приложение для iPhone после входа в систему с помощью Facebook Connect?

У меня есть мобильный веб-сайт, созданный с использованием jQuery Mobile. Я часто запускаю его в полноэкранном режиме/режиме мобильного веб-приложения на своем iPhone (я добавил веб-приложение на домашний экран iPhone).

На одной из страниц пользователю необходимо авторизоваться в Facebook с помощью Facebook Connect JavaScript API. Если пользователь еще не вошел в систему, это можно сделать, нажав кнопку входа. Обработчик события для этой кнопки выглядит так:

("#fbLogin").click(function () {
      FB.login(handleStatusChange(response), 
      { scope: "publish_stream", 
        connect_display: "touch" });
});

В приведенном выше коде я вставил несколько разрывов строк для лучшей читабельности, но значения такие же, как в примере. Функция обратного вызова (handleStatusChange) обрабатывает ответ на запрос входа в систему.

Когда я нажимаю эту кнопку, в окне моего веб-приложения открывается страница входа в Facebook. Если я еще не принял приложение Facebook, я также должен предоставить ему разрешения. Все это работает нормально. Но после того, как я дал разрешения / вошел в систему, я остался висеть на совершенно пустом экране.

Я также попробовал другой подход к входу в систему, поместив его в обработчик события кнопки входа:

window.location = "https://www.facebook.com/login.php
?api_key=MY_API_KEY
&cancel_url=http%3A%2F%2Fwww.mywebsiteurl.com%3A8081
&fbconnect=1
&next=http%3A%2F%2Fwww.mywebsiteurl.com%3A8081
&return_session=1
&session_version=3
&v=1.0
&req_perms=publish_stream
&connect_display=touch";

Опять же, разрывы строк были вставлены для лучшей читабельности. При использовании это всего лишь одна длинная строка.

URL-адрес, используемый в параметрах cancel_url и next, — это тот, который я зарегистрировал в приложении Facebook. Если я попытаюсь использовать другой URL-адрес (например, http://www.google.com), я получу сообщение об ошибке, поэтому это кажется правильным. Как видите, я использую другой порт на своем сервере разработки (порт 8081). Может ли это быть проблемой?

Результат аналогичен предыдущему примеру. Я получаю страницы входа/разрешений, но после того, как все сделано, у меня остается пустой экран. Я попробовал это после прочитав этот пост на старом форуме разработчиков Facebook.

Если я, с другой стороны, попытаюсь запустить это в Safari (а не как полностраничное веб-приложение для iPhone), вход в систему будет работать отлично.

Есть ли что-нибудь еще, что я могу попробовать? У кого-нибудь есть вход в Facebook Connect через JavaScript API, работающий в полноэкранном режиме/режиме веб-приложения на iPhone?

Заранее спасибо!


comment
Если вы попытаетесь запустить собственный демонстрационный сайт Facebook для мобильного Интернета (facebookmobileweb.com/hackbook) в полноэкранном режиме /режим веб-приложения (добавьте его на главный экран), вы увидите ту же проблему.   -  person tkahn    schedule 22.12.2011
comment
Сегодня я получил сообщение от Facebook, в котором они подтверждают, что это ошибка и что она передана команде разработчиков. Если у кого-то есть обходной путь, который работает, я весь внимание. В противном случае нам просто придется подождать, пока мы не получим дополнительную информацию от команды разработчиков Facebook.   -  person tkahn    schedule 23.12.2011
comment
Об ошибке Ткана сообщается здесь developers.facebook.com/bugs/317323871621290   -  person Johan B    schedule 27.12.2011


Ответы (1)


Не уверен, поможет ли это вам, но я обнаружил, что добавление исправления ссылки iOS Safari также позволило войти в Facebook для работы в моем полноэкранном веб-приложении без открытия страницы в «обычном» Safari:

// Make links work in iOS fullscreen web app
function disableSafariLinks() {
    $("a").click(function (event) {
        event.preventDefault();
        window.location = $(this).attr("href");
    });
}

См. также Веб-приложение Safari для iPhone открывает ссылки в новом окне

person Tom Söderlund    schedule 14.09.2012