Добавление кнопки «Нравится» Facebook в iOS WebView - PullRequest
2 голосов
/ 31 июля 2011

Я использую UIWebView для запуска кода facebook.Проблема в том, что WebView не аутентифицирован в Facebook, поэтому требуется вход в систему.

Мой пользователь уже вошел в Facebook, используя собственный API (который использует Safari).

Как я могуаутентифицировать пользователя в веб-представлении в фоновом режиме, используя маркер доступа, чтобы при отображении «лайка» пользователь уже аутентифицировался?

Загрузите HTML-код, указанный ниже, один раз и выполните вход в систему.Информация о сеансе сохраняется, и кнопка «Мне нравится» будет работать нормально.Очистите куки-файлы Facebook и перезагрузите HTML.Сессия загружается из localStorage, но требуется повторный вход в систему.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
    <script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>  
</head>
<body onload="onload()">
    Hello Facebook, can you hear me?

    <div id="fb-root" >     
        <fb:like href='http://www.stackoverflow.com' send='true' layout='button_count' width='220' show_faces='true' font='arial' ref='dropalert'></fb:like>        
    </div>

    <script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
    <script type="text/javascript">
        function onload() {         
            var session = null;
            var sessionStr = localStorage.getItem("session");
            if (sessionStr){
                session = JSON.parse(sessionStr);
                alert("stored session " + sessionStr);
            }
            else {
                alert("session not stored");
            }
            FB.init({
                appId   : <your-app-id>,
                session : session,        
                cookie  : true,                     
                xfbml   : true              
            });

            FB.getLoginStatus(function(response) {
                alert("getLoginStatus");                
                if (response.status == "connected") {
                    alert("Logged in");
                    parseFBML();
                } 
                else {
                    // no user session available, someone you dont know
                    alert("NOT Logged in");
                    login();
                }               
            });
        }

        function login() {
            alert("login starting");
            // Login to facebook to get an access-token
            FB.login(function (response) {  
                if (response.session) {
                    var sessionStr = JSON.stringify(response.session)
                    alert("session: \n\n" + sessionStr + "\n\n\n\n");
                    localStorage.setItem("session", sessionStr);                    
                } 
                else {
                    alert("Login failed");
                }
            }, {scope:'publish_stream,offline_access'});
        }    

        function parseFBML() {
            FB.XFBML.parse(document.getElementById('fb-root'));
        }       
    </script>
</body>
</html>

Спасибо.

1 Ответ

2 голосов
/ 31 июля 2011

Я не знаю, подходит ли вам этот вариант, но, если вы можете передать параметр сеанса в свой веб-контент, вы можете использовать его для инициализации SDK JavaScript в вашем веб-контенте.

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId  : <my-app-id>,
    session : { "uid":"<users facebook id>", "access_token":"<valid access token>", "expires": <expires value>, "sig":"<valid signature>"},
    cookie : true, 
    xfbml  : true
  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...