2011-07-31 2 views
2

UIWebView를 사용하여 페이스 북 코드를 실행합니다. 문제는 페이스 북에서 WebView가 인증되지 않아 로그인이 필요하다는 것입니다.iOS WebView에서 Facebook의 Like 버튼 추가

내 사용자는 이미 Safari를 사용하는 기본 API를 사용하여 페이스 북에 로그인되어 있습니다.

액세스 토큰을 사용하여 백그라운드에서 웹보기의 사용자를 인증하면 "비슷한"메시지가 표시 될 때 사용자가 이미 인증 되었습니까?

아래 HTML 코드를 한 번로드하고 로그인을 수행하십시오. 세션 정보가 저장되고 버튼이 정상적으로 작동합니다. 페이 스북 쿠키를 정리하고 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> 

감사합니다.

답변

2

이것이 옵션인지 여부는 잘 모르겠지만 웹 콘텐츠에 세션 매개 변수를 전달할 수있는 경우 웹 콘텐츠에서 JavaScript SDK를 초기화하는 데 사용할 수 있습니다.

<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> 
+0

감사합니다.하지만이 방법은 효과가없는 것 같습니다. 페이스 북 쿠키를 정리하고 세션 값을 사용하려고합니다. FB.login을 호출하면 로그인 양식이 표시됩니다. API를 활성화하려고하면 "access_token"오류가 반환되지 않습니다. 다른 생각? 유효한 세션에 어떻게 연결합니까? – Totach

+0

세션에 유효한 액세스 토큰이 있어야합니다. 어떻게 세션 매개 변수를 생성합니까? – jBit

+0

현재 브라우저에서 테스트 중입니다. FB.init을 호출 한 다음 FB.login (오프라인 액세스 파마를 사용)을 호출합니다. access_token과 세션 키를 출력합니다. 쿠키를 정리하고 세션 키를 FB.init 세션 속성으로 설정합니다. 나는 login을 호출하지 않고 API에 접근하려고 노력한다. 그것은 실패합니다. 위에서 언급 한 것처럼 세션 속성에 access_token 값을 설정하려고했는데 실패했습니다. – Totach