ユーザーがログインして自分のページを好きにできるphpページを作成しようとしています。ブロックでlogin_urlを使用すると、うまく機能します。
ただし、特にロケールを渡すことができ、適切な言語にローカライズされるため、公式のFacebookログインボタンを使用したいと思います....そして見栄えが良いです!
いくつかの調査を行うと、php のログイン状態が js のログイン状態と同期していないように見えますが、コードの断片しか見たことがありません (そのほとんどは廃止されたバージョンの API を使用しています)。
Facebookのログインボタンを$login_urlと同じようにするためにここで何をする必要があるかについて、誰かが私を正しい方向に向けることができますか?
現在、次の動作を観察しています。
- ページを開くとログインボタンとリンクが表示されます
- ログインボタンをクリックしてログインします
- PHPコードはまだユーザーがログインしていないと考えているため、ログインボタンが表示されます
- ログインリンクをクリックするまで正しくログインできず、リロード時にログイン ボタンが消えます。
現在、ボタンをクリックするとページがリロードされるだけで、ユーザーにログインを求めることさえありません。ユーザーがログインボタンを使用してログインしている場合、ページのphp部分はユーザーがログインしていないと見なします...
<?php
require("facebook/facebook.php");
$locale = "en_US"; // TODO
$connect_facebook_url = "'//connect.facebook.net/" . $locale . "/all.js#xfbml=1&appId=XXXXXXXXXXXXXXXXXXXXXXX'";
$facebook = new Facebook(array(
"appId" => "XXXXXXXXXXXXXX",
"secret" => "XXXXXXXXXXXXXXXXX",
"cookie" => true,
));
$access_token = $facebook->getAccessToken();
// Get User ID
$user_id = $facebook->getUser();
if($user_id)
{
// We have a user ID, so probably a logged in user.
// If not, we'll get an exception, which we handle below.
try
{
$user_profile = $facebook->api('/me','GET');
$likes = $facebook->api(array(
'method' => 'fql.query',
'query' => 'SELECT page_id FROM page_fan WHERE uid = "'
. $user_profile['id']
. '" AND page_id="XXXXXXXXXXXXX"', ));
}
catch(FacebookApiException $e)
{
// If the user is logged out, you can have a
// user ID even though the access token is invalid.
// In this case, we'll get an exception, so we'll
// just ask the user to login again here.
$login_url = $facebook->getLoginUrl();
error_log($e->getType());
error_log($e->getMessage());
}
}
else
{
// No user, print a link for the user to login
$login_url = $facebook->getLoginUrl();
}
if(count($likes) > 0)
{
$likes_result = "User likes this page";
}
else
{
$likes_result = "User doesnt like this page";
}
if($login_url)
{
$login_string = '<a href="' . $login_url . '">' . 'IDST_MENUITEM_SIGN_IN' . '</a>';
}
?>
<html>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<div id="fb-root"></div>
<script>
(function(d, s, id)
{
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src =
<?php echo $connect_facebook_url; ?>
;
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<body bgcolor="#000000">
<div align="center">
<table>
<tbody>
<tr>
<td>
<img src="http://www.myapp.com/wp-content/uploads/2012/05/MyApp-logo.png"/>
</td>
<td style="align:left; vertical-align:middle">
<p style="font-family:segoe ui;color:white;font-size:40px;">MyApp</p>
</td>
</tr>
</tbody></table>
</div>
<p> <p>
<div align="center" style="font-family:segoe ui;color:white;font-size:20px;">
<?php if ($login_string) : ?>
<div class="fb-login-button" size="xlarge" data-width="200"></div>
<?php else: ?>
<div class="fb-like"
data-href="https://www.facebook.com/MyApp"
data-width="200"
data-colorscheme="dark"
data-show-faces="true"
data-send="true">
</div>
<?php endif; ?>
<br>
<p>
<?php echo $likes_result; ?>
</p>
<p>
<?php echo 'Please <a href="' . $login_url . '">login.</a>'; ?>
</p>
</div>
</body>
</html>