J'essaie d'accéder aux scores via l'API Facebook pour obtenir une liste des scores de mes amis. Lorsque j'essaie d'accéder à /[facebook id]/scores
, le message d'erreur suivant s'affiche, même avec mon jeton d'accès à l'application:
FacebookApiException [0]: un jeton d'accès utilisateur est requis pour demander cette ressource. ~ APPPATH/classes/basefacebook.php [1039]
Comment obtenir un jeton d'accès utilisateur?
Mise à jour: Après avoir lu http://developers.facebook.com/docs/reference/api/permissions/ , j'ai confirmé que le jeton d'accès à l'application et le jeton d'accès à l'utilisateur sont deux jetons d'accès différents. La question demeure, comment puis-je obtenir un jeton d'accès utilisateur?
Je vois que vous utilisez le php-sdk. Vous avez donc besoin que votre ami accède à votre application avec un script du type exemple :
<?php
/**
* Copyright 2011 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.Apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
require '../src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => '191149314281714',
'secret' => '73b67bf1c825fa47efae70a46c18906b',
));
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
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;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope'=>'offline_access'));
}
// This call will always work since we are fetching public data.
$naitik = $facebook->api('/naitik');
?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>php-sdk</title>
<style>
body {
font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
}
h1 a {
text-decoration: none;
color: #3b5998;
}
h1 a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<h1>php-sdk</h1>
<?php if ($user): ?>
<a href="<?php echo $logoutUrl; ?>">Logout</a>
<?php else: ?>
<div>
Login using OAuth 2.0 handled by the PHP SDK:
<a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
</div>
<?php endif ?>
<h3>PHP Session</h3>
<pre><?php print_r($_SESSION); ?></pre>
<?php if ($user): ?>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $user; ?>/picture">
<h3>Your User Object (/me)</h3>
<pre><?php print_r($user_profile); ?></pre>
<?php else: ?>
<strong><em>You are not Connected.</em></strong>
<?php endif ?>
<h3>Public profile of Naitik</h3>
<img src="https://graph.facebook.com/naitik/picture">
<?php echo $naitik['name']; ?>
</body>
</html>
Ensuite, vous devez:
offline_access
access_token
renvoyé$facebook->api('friend_id/scores?access_token=$stored_access_token');
Veuillez vous référer aux documentations montrant les flux d'authentification pour Facebook.
http://developers.facebook.com/docs/authentication/
C’est le meilleur endroit pour commencer à comprendre comment cela fonctionne.
Access_token ne doit pas être confondu avec le code secret de votre application, qui est utilisé pour autoriser une connexion au nom de votre application enregistrée.
Dans Flex, vous pouvez utiliser:
FacebookDesktop.getSession().accessToken;
J'appelle cette fonction:
FB.getLoginStatus(onFacebookInitialLoginStatus);
Ce qui appelle la fonction ci-dessous et obtient le paramètre accesss_token de la réponse.
function onFacebookInitialLoginStatus(response) {
if (response.status == "connected" && response.session) {
var access_token = response.session.access_token;
var url = 'https://graph.facebook.com/me/likes?access_token=' + access_token;
}
else {
facebookLogin();
}
}
Abonnez-vous à cet événement:
FB.Event.subscribe('auth.authResponseChange', function(response) {
puis vérifiez response.status