Подтвердить что ты не робот

Facebook FB.login работает в Safari, но не в мобильном Safari

Следующая функция FB.Login отлично работает на настольных компьютерах Chrome, FF и Safari. Но в мобильном Safari (протестированном на iPhone 4S) он зависает и не возвращается к обратному сообщению FB.login. Я также вижу это на консоли, когда я использую Safari и устанавливаю User Agent в "Safari iOS 4.3.3 - iPhone".

Это потому, что мобильный Safari блокирует всплывающие окна? (FB.login запускает всплывающее диалоговое окно).

Как это исправить? Спасибо.

function Login(returnLink) {
        FB.login(function(response) {
                    if(response.status === 'connected') {
                        console.log('User is now FB logged in.');
                        // now log them into my site
                        encodedReturnLink = encodeURIComponent(returnLink);
                        window.location = location.protocol + '//' + location.host + "/login?returnUrl=" + encodedReturnLink;
                    }
                    else {
                        console.log('User did not fully authorize after clicking FB login button.');
                    }
                },
                {scope : 'email, publish_actions, publish_stream'}
        );
}
4b9b3361

Ответ 1

Я пытался запустить FB.Login автоматически при загрузке страницы внутри window.fbAsyncInit, и он не работал в Safari в iOS. Оказывается, Safari блокирует всплывающее окно, вызванное вызовом FB.Login. Safari и Chrome на рабочем столе отлично работали (разрешено всплывающее окно).

Я нашел, что единственный способ работать - это инициировать вызов FB.Login в ответ на взаимодействие пользователя (например, Tap или Click). Это сработало для меня:

HTML

<a href="#" id="fbLogin">Login with Facebook</a>

JavaScript (jQuery)

$('#fbLogin').click(function(){
    FB.login(function(response){
        // Do something...
    });
});

Протестировано в Safari (iOS 8.0).

Ответ 2

Это определенно не вопрос блокировки всплывающих окон. Хотя я видел сценарий, в котором логин работает при вызове напрямую, но не в результате обратного вызова ajax.

Ответ 3

Дважды проверьте URL мобильного сайта в настройках вашего приложения Facebook.