2012-05-02 27 views
10

Następująca funkcja FB.Login działa dobrze w komputerach typu Chrome, FF i Safari. Jednak w mobilnym Safari (testowanym na iPhone 4S) zawiesza się i nie wraca do wywołania zwrotnego FB.login. Widzę to również na konsoli, gdy używam Safari i ustawę User Agent na "Safari iOS 4.3.3 - iPhone".Facebook FB.login działa w Safari, ale nie na urządzeniach mobilnych Safari

Czy to dlatego, że mobilne Safari blokuje pop-upy? (FB.login uruchamia wyskakujące okno dialogowe).

Jak to naprawić? Dzięki.

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'} 
     ); 
} 
+0

Czy dzwonisz po tym bezpośrednio po interakcji użytkownika (kliknij/dotknij/prześlij) lub z opóźnionego kodu? –

+1

Występuje ten sam problem. Czy znalazłeś rozwiązanie tego problemu? – Jaffer

Odpowiedz

0

To zdecydowanie nie jest kwestia blokowania wyskakujących okienek. Chociaż widziałem scenariusz, w którym logowanie działa po wywołaniu bezpośrednio, ale nie w wyniku wywołania ajaxowego.

+0

cóż, ale to rzeczywiście kwestia blokowania wyskakujących okienek, ponieważ jest ona oczywiście blokowana, gdy jest wywoływana jako wywołanie zwrotne, a nie kiedy jest wywoływana bezpośrednio? – gapvision

0

Podwójne sprawdzenie adresu URL witryny mobilnej w ustawieniach aplikacji na Facebooku.

6

Próbowałem automatycznie uruchomić FB.Login przy ładowaniu strony wewnątrz window.fbAsyncInit i nie działało w Safari na iOS. Okazuje się, że Safari blokowało okno wyskakujące wywołane wywołaniem FB.Login. Safari i Chrome na pulpicie działało dobrze (dozwolone popup).

Znalazłem jedyny sposób na obejście tego problemu, aby wywołać wywołanie FB.Login w odpowiedzi na interakcję użytkownika (np. Dotknij lub Kliknij). Ten pracował dla mnie:

HTML

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

JavaScript (jQuery)

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

Testowane na Safari (iOS 8.0).

+0

+1 za podanie prawidłowego rozwiązania. Usunąłem ból głowy. Wielkie dzięki. – neeraj

+1

Safari wydaje się dość wrażliwy na blokowanie wyskakujących okienek. Jeśli w ogóle opóźnisz (nawet oczekując niewielkiej kwoty na inne wywołania zwrotne), wydaje się, że blokuje ten blok. – justrhysism

+0

@wireblue jest to nadal jedyny sposób na wyzwolenie logowania w aktualnych wersjach? – gapvision

Powiązane problemy