2014-10-31 2 views
0

Около 0,3% пользователей не могут получить свой идентификатор FB с помощью JS API. В некоторых случаях я получил это раньше для этих пользователей. Что может быть причиной этого и любых идей о том, как его исправить?Иногда не удается получить идентификатор FB с помощью API JS

Насколько я знаю, большинство этих пользователей были в Windows и использовали firefox.

Мой код:

window.fbAsyncInit = function() { 
    FB.init({ 
     appId : "xxxx", 
     status : true, 
     cookie : true, 
     xfbml : true, 
     oauth : true 
    }); 
    FB.Canvas.setSize({width:$("#mainbody").outerWidth(),height:$("#mainbody").outerHeight()}); 
    FB.getLoginStatus(function (response) { 
     if(response.authResponse){ 
      if(response.authResponse.userID){ 
       fbId = response.authResponse.userID; 
       $("#hiddenFbId").val(fbId); 
       setSession(); 
      } 
     } 
     if (response.status === 'connected') { 
      FB.api(
       "/me?locale=et_EE", 
       function (response) { 
       if (response && !response.error) { 
        fbName = response['name']; 
        fbId = response['id']; 
        $("#hiddenFbId").val(fbId); 
        fbEmail = response['email']; 
        setSession(); 
       } 
      }); 
     } else { 
      FB.login(function (response) { 
       if (response.authResponse) { 
        if(response.authResponse.userID){ 
         fbId = response.authResponse.userID; 
         $("#hiddenFbId").val(fbId); 
         setSession(); 
        } 
        FB.api(
         "/me?locale=et_EE", 
         function (response) { 
         if (response && !response.error) { 
          fbName = response['name']; 
          fbId = response['id']; 
          $("#hiddenFbId").val(fbId); 
          fbEmail = response['email']; 
          setSession(); 
         } 
        }); 
       } else { 
        fbDenied = true; 
       } 
      }, { 
       scope : 'public_profile,email,user_likes' 
      }); 
     } 
    }); 
} 

ответ

0

Никогда не называйте FB.login в асинхронном обратном вызове функции FB.getLoginStatus (!). Некоторые браузеры блокируют всплывающее окно входа в систему, если вы это делаете, вам всегда нужно вызывать FB.login при взаимодействии с пользователем, а вызов его при загрузке страницы - это плохая идея. Не заставляйте пользователя авторизовать ваше приложение прямо, когда они входят в ваше приложение, и прежде чем они узнают, что такое ваше приложение.

  • FB.getLoginStatus при загрузке страницы, чтобы обновить жетона пользователя и проверить, если пользователь авторизован
  • FB.login на кнопку мыши

Это также легче, что способ удалить некоторые излишние кода и переместите вызов FB.api на функцию.

Это может быть или не решить вашу проблему, но это определенно важно и источник ошибок.

+0

FB.login не должен быть проблемой, потому что приложение находится на вкладке страницы FB и не может быть доступно, если вы не вошли в систему. Я по-прежнему пытаюсь переместить логин, чтобы щелкнуть. –

+0

Это не так, и это не имеет значения - поскольку вкладки страниц могут быть доступны, когда они не вошли в систему. FB.login должен ВСЕГДА быть вызван при взаимодействии с пользователем. – luschn

Смежные вопросы