Как вернуться в веб-приложение iPhone после входа в Facebook Connect? - PullRequest
2 голосов
/ 22 декабря 2011

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

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

("#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 на всю страницу), логин будет работать отлично.

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

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

1 Ответ

1 голос
/ 14 сентября 2012

Не уверен, поможет ли это вам, но я обнаружил, что добавление исправления ссылки 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");
    });
}

См. Также iPhone Safari Web App открывает ссылки в новом окне

...