9

古い (2.x) SDK では、offline_access を持つユーザーをログに記録するためにこれを使用しました。

$session = array
(
    'uid' => $userdata['fb_uid'],
    'sig' => $userdata['fb_sig'],
    'access_token' => $userdata['fb_access_token']
);

$facebook->setSession($session);

新しい SDK では、この関数はもう存在しません。次を使用してログインする必要があると思います:

setPersistentData($key, $value)

しかし、この機能は保護されており、「コード」が何であるかわかりませんか? ユーザーのログインにこれ​​が必要ですか? そして、「シグ」はどうなっているのですか?これはもう必要ありませんか?

ドキュメントは本当に役に立たないので、誰かがすでにこれを理解していることを願っています!

4

3 に答える 3

21

Facebook PHP SDK v3(githubを参照)を使用すると、非常に簡単です。権限を持つ人をログに記録するにoffline_accessは、ログインURLを生成するときにその人に依頼します。これがその方法です。

オフラインアクセストークンを取得する

まず、ユーザーがログインしているかどうかを確認します。

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    // The access token we have is not valid
    $user = null;
  }
}

offline_accessそうでない場合は、許可を求める「Facebookでログイン」URLを生成します。

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}

次に、テンプレートにリンクを表示します。

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>

次に、オフラインアクセストークンを取得して保存できます。入手するには、次の電話番号に電話してください。

$facebook->getAccessToken()

オフラインアクセストークンを使用する

ユーザーがログインしていないときにオフラインアクセストークンを使用するには:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");

そして今、あなたはこのユーザーのためにAPI呼び出しをすることができます:

$user_profile = $facebook->api('/me');

お役に立てば幸いです。

于 2011-05-28T02:14:30.273 に答える
0

クエンティンの答えはかなりいいですが、不完全だと思います。それはうまく機能しますが、たとえばgetUser()、userId (getUser()返されている) がキャッシュされているため、その間は機能していません。

すべてのキャッシュをクリアして永続的に保存する新しいメソッドを作成しました。

public function setPersistentAccessToken($access_token) {
  $this->setAccessToken($access_token);
  $this->user = $this->getUserFromAccessToken();
  $this->setPersistentData('user_id', $this->user);
  $this->setPersistentData('access_token', $access_token);
  return $this;
}
于 2012-02-20T20:24:45.447 に答える
0

PHP SDK 2.0 (だと思います) では、次のように使用します。

$data = $facebook->api( '/me', 'GET', array( 'access_token' => $userdata['fb_access_token'] ) );

これは、自分でセッションを設定するよりもクリーンなアプローチのように見えるため、新しいもので機能するはずです。試してみませんか?

于 2011-05-26T18:31:58.627 に答える