1

PHP SDK 3.2.0 で Facebook アプリを作成していますが、問題が発生しました。API 呼び出しを行っているときに、ユーザーの名前を取得しようとしても何も起こりません。私は github.com の例を使用していますが、探しているものをまだ達成できません。

require 'src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxx',
  'secret' => 'xxx',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
} 
4

2 に答える 2

1

認証された紹介は廃止され、2013年2月に削除されます。

そうは言っても、ユーザーログインにはFB.loginを使用することをお勧めします。

https://developers.facebook.com/docs/reference/javascript/FB.login/

Javascript SDKを使用したくない場合は、PHPSDKを使用する簡単な方法もあります。

https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

すべてがドキュメントでよく説明されています。あと数行のコードです。

于 2012-11-11T17:51:47.200 に答える
1

まず、アクティブなアクセス トークンがあるかどうかを確認する必要があります。そうでない場合は、Facebook ログイン ボタンを表示する必要があります。

<?php
$userId = $facebook -> getUser();

 if ($userId) { 
  $userInfo = $facebook->api('/' . $userId); ?>
  Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>   
<?php } ?>

コードによると、次のようになります。

<?php
require 'src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxx',
  'secret' => 'xxx',
));
?>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xxx', // App ID
      channelUrl : 'http://YOURDOMAIN.com/channel.php', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location.reload();
      //alert(me.name);
    });
    }
</script>


<?php
$userId = $facebook -> getUser();

if ($userId) { 
  $userInfo = $facebook->api('/' . $userId); ?>
  Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>   
<?php } ?>

    <script>
        // Load the SDK Asynchronously
        ( function(d) {
                var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
                if (d.getElementById(id)) {
                    return;
                }
                js = d.createElement('script');
                js.id = id;
                js.async = true;
                js.src = "//connect.facebook.net/en_US/all.js";
                ref.parentNode.insertBefore(js, ref);
            }(document));
    </script>

サーバーには、次の内容の channel.php ファイルが必要です。

<?php
$cache_expire = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: max-age=".$cache_expire);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
?>
<script src="//connect.facebook.net/en_US/all.js"></script>
于 2012-11-11T16:08:06.470 に答える