2

Nick Baker(webtechnick)のCakePHP / Facebookプラグインを使用しています。これは素晴らしく、うまく機能しますが、答えに近づくことすらできないような質問があります。

共有ボタンの使用をバイパスして、アクションを介して直接共有するにはどうすればよいですか?

たとえば、自分のサイトから投稿を作成すると、その投稿は必要に応じてDBに追加されます。また、アクションを通じて、ログインしているユーザーのTwitterアカウントにも投稿が送信されます。このアクションでFBアカウントとの共有を処理するにはどうすればよいですか(接続はすでに確立されています)。私は誰もが明らかにアクションで直接$this->Facebook-> share()を試してみると思う最初のことを試しましたが、役に立たなかった...

どんな考えや解決策も大いに役立つでしょう...

回答後の更新

ヘルプspooneyのためのThx。あなたは私が言えることから100%スポットであるため、私はあなたの答えに投票しました。JSSDKを読み込んでいます。

    function init($options = null, $reload = true) {
        if (empty($options)) {
            $options = array();
        }
        if ($appId = FacebookInfo::getConfig('appId')) {
            $session = json_encode($this->Session->read('FB.Session'));
            if ($reload) {
                $callback = "FB.Event.subscribe('auth.login',function(){window.location.reload()});";
            } else {
                $callback = "if(typeof(facebookReady)=='function'){facebookReady()}";
            }
            $callback .= "FB.Event.subscribe('auth.logout',function() {window.location = '/bastards/users/logout'});";
            $init = '<div id="fb-root"></div>';
            $init .= $this->Html->scriptBlock(
<<<JS
window.fbAsyncInit = function() {
    FB.init({
        appId : '{$appId}',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml : true, // parse XFBML
        oauth : true // use Oauth
    });
    {$callback}
};
(function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/{$this->locale}/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());
JS
            , $options);
            return $init;
        } else {
            return "<span class='error'>No Facebook configuration detected. Please add the facebook configuration file to your config folder.</span>";
        }
    }

ユーザー情報を取得して、それらすべてを処理することに問題はありません。私は自分のサイトからFBへの投稿を完了しましたが、それはFB.uiを使用したリンクを介したものでした...

    <a href="#" onClick="publishStory();" class="sendFeed"><br><font style="color:#FFF; text-decoration:none;padding-left:27px;">post to wall</font></a><br>
<script>
function publishStory() {
  FB.ui({
    method: 'feed',
    name: 'message name',
    caption: 'message caption ',
    description: 'description goes here',
    link: 'the url current page',
    picture: 'if you want to add an image'
  }, 
  function(response) {
    console.log('publishStory response: ', response);
  });
  return false;
}
</script>

上記のコードを...に置き換えてみました

    <a href="#" onClick="publishStory();" class="sendFeed"><br><font style="color:#FFF; text-decoration:none;padding-left:27px;">post to wall</font></a><br>
<script>
function publishStory() {
  var body = 'Reading JS SDK documentation';
FB.api('/me/feed', 'post', { message: body }, function(response) {
  if (!response || response.error) {
    alert('Error occured');
  } else {
    alert('Post ID: ' + response.id);
  }
});
}
</script>

しかし、それは毎回エラーになります。

また、ユーザーのFBウォールへの投稿は、実際にはサイトの説教からのものではなく、ユーザー自身のウォールへの投稿であり、基本的に「ladala.comに投稿しました。でチェックしてください。」

だから今、私は投稿を送信するアクションを通してFB.uiを実行する方法を理解する必要がある時点にいます。

4

1 に答える 1

1

私たちの会話に基づいて、私は答えにもっと完全な説明を入れるだけだと思いました。

JavaScriptSDKを使用して共有呼び出しを起動できます。

まず、 https://developers.facebook.com/docs/reference/javascript/の「読み込み」セクションで説明されているようにJavaScriptSDKを読み込む必要があります。

ページに読み込まれると、確認する2つの呼び出しはFB.getLoginStatusとFB.apiです。FB.getLoginStatusは、ユーザーがFacebookにログインしているかどうか、およびユーザーがアプリケーションを承認したかどうかを通知する応答を返します。このリンクでは、getLoginStatusの機能について説明しますが、要するに、response.connectedを確認する必要があります(必要に応じて、別の呼び出しを行ってユーザーのアクセス許可を確認する必要があります)。

ユーザーがログインしてアプリを承認した場合は、FB.apiを使用してAPI呼び出しを試みることができます。これを行うことを覚えておいてください。おそらく、ユーザーがpublish_stream権限を許可している必要があります。

コードは次のようになります。

//Do FB initialization
FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    FB.api('/me/feed', 'post', { message: body }, function(response) {
      if (!response || response.error) {
        //Post was successful
      }
    });
  }
});

これは、任意の方法でトリガーできます。ページの読み込み時、クリック時、その他のイベントの完了時など。

これは、これを実装する1つの方法にすぎないことに注意してください。また、FBアプリケーションと何かを共有しようとしていて、それが機能しない場合は、そのために必要なすべての権限があることを確認する必要があります。

于 2012-05-04T18:57:54.687 に答える