2011-07-31 17 views
2

私はUIWebViewを使ってFacebookのコードを実行します。問題は、WebViewがフェイスブックで認証されず、ログインが必要であるということです。iOS WebViewでFacebookのLikeボタンを追加

私のユーザーは、既にSafariを使用しているネイティブAPIを使用してFacebookにログインしています。

アクセストークンを使用して、バックグラウンドでWebビューのユーザを認証すると、「好き」と表示されたときにユーザはすでに認証されていますか?

以下の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> 

ありがとうございます。

答えて

2

これはオプションかどうかわかりませんが、セッションパラメータをWebコンテンツに渡すことができれば、それを使ってWebコンテンツ内の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

ありがとうございますが、これはうまくいかないようです。私はfacebookのクッキーをきれいにして、セッション値を使用しようとします。 FB.loginを呼び出すと、ログインフォームが表示されます。 APIをアクティブにしようとすると、「access_token」エラーは返されません。他のアイデア?あなたはどのように有効なセッションに接続しますか? – Totach

+0

セッションに有効なアクセストークンが含まれている必要があります。どのようにセッションパラメータを生成していますか? – jBit

+0

私は現在、ブラウザでテストしています。私はFB.initを呼び出してからFB.login(オフラインアクセスパーマを使用)を呼び出します。私はaccess_tokenとセッションキーを出力します。私はクッキーをきれいにし、セッションキーをFB.initセッション属性に設定します。私はログインしてAPIにアクセスしようとしません。それは失敗する。上記のように、セッション属性にaccess_tokenの値を設定しようとしましたが、失敗します。 – Totach

関連する問題