Facebook Exige l'étendue de l'autorisation: publish_actions
Je suis dans le processus de développement d'un Concours et de Promotion liées à Facebook app et mon intention est de créer un onglet sur ma page de l'entité qui donnent accès à l'application.
Une fois de leur, les utilisateurs peuvent désigner des entreprises locales pour les prix. Plus tard; une fois les candidatures, les utilisateurs peuvent voter pour un gagnant.
J'ai intégré Open Graph dans mon application, afin que je puisse profiter de Types d'Objets (Organization
), Types d'actions (Nominate
, Vote For
), et des Agrégations (Nominations
). Mon principal objectif est de puis le transfert de ces actions sur l'utilisateur de montage.
J'ai utilisé le recipebox exemple que ma base. J'ai fourni mon code pour démontrer l'authentification et de l'action post tenus de présenter une action de type/type d'objet combinaison.
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
<head prefix="og: http://ogp.me/ns# og_<<app namespace>>: http://ogp.me/ns/apps/<<app namespace>>#">
<meta property="fb:app_id" content="<<app id>>" />
<meta property="og:type" content="<<app namespace>>:organization" />
<meta property="og:title" content="Client 1" />
<meta property="og:image" content="<<client image path>>" />
<meta property="og:description" content="Client 1 description here ... " />
<meta property="og:url" content="<<custom client URL>>">
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
//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));
//Init the SDK upon load
window.fbAsyncInit = function() {
FB.init({
appId : '<<app id>>', //App ID
status : true, //check login status
cookie : true, //enable cookies to allow the server to access the session
xfbml : true //parse XFBML
});
//listen for and handle auth.statusChange events
FB.Event.subscribe('auth.statusChange', function(response) {
if (response.authResponse) {
//user has auth'd your app and is logged into Facebook
FB.api('/me', function(me){
if (me.name) {
document.getElementById('auth-displayname').innerHTML = me.name;
}
})
document.getElementById('auth-loggedout').style.display = 'none';
document.getElementById('auth-loggedin').style.display = 'block';
} else {
//user has not auth'd your app, or is not logged into Facebook
document.getElementById('auth-loggedout').style.display = 'block';
document.getElementById('auth-loggedin').style.display = 'none';
}
});
//respond to clicks on the login and logout links
document.getElementById('auth-loginlink').addEventListener('click', function(){
FB.login();
});
document.getElementById('auth-logoutlink').addEventListener('click', function(){
FB.logout();
});
}
function nominate () {
FB.api('/me/<<app namespace>>:Nominate&organization=<<custom client URL>>', 'post', function(response) {
if (! response || response.error) {
alert('Error occured');
console.log(response);
} else {
alert('Post was successful! Action ID: ' + response.id);
}
});
}
</script>
</head>
<body>
<div id="fb-root"></div>
<div id="auth-status">
<div id="auth-loggedout">
<a href="#" id="auth-loginlink">Login</a>
</div>
<div id="auth-loggedin" style="display:none">
Hi, <span id="auth-displayname"></span>
(<a href="#" id="auth-logoutlink">logout</a>)
</div>
</div>
<h2>Client 1</h2>
<form>
<input type="button" value="Nominate" onclick="nominate()" />
</form>
<fb:activity actions="<<app namespace>>:nominate"></fb:activity>
</body>
</html>
Un utilisateur de test est de rencontrer le message d'erreur suivant:
Requires extended permission: publish_actions
Et je rencontre l'erreur suivante (je suis un Admin pour cette application):
This method must be called with an app access_token
La première erreur est troublant pour moi. Je ne peux pas sélectionner publish_actions
de Apps | <My App> | Permissions | Extended Permissions
. Aussi, les recours que j'ai encounted suggèrent je re-catégoriser mon appli pour Games
(cela ne fonctionne pas) et pour terminer mon Agrégations (je l'ai fait; ne fonctionne toujours pas).
- Comment puis-je surmonter cette erreur?
- Ce que je peux faire pour corriger mon
This method must be called with an app access_token
erreur?
Merci d'avance,
Mike
MODIFIER
Je crois que le access_token
erreur que je rencontre est due au fait que j'ai été le tester/interagir avec l'application directement sur la Page de l'Onglet URL; pas par le biais de Facebook.
Je ne reçois plus les Requires extended permission: publish_actions error
; cependant, mes testeurs et les développeurs sont. Je sais que je rencontre cette erreur parce que les publish_actions autorisation n'est pas demandée lors de la première facebook.com l'invite de connexion.
Si mes Développeurs/Testeurs de déconnexion de Facebook, puis reconnectez-vous avec mon invite:
FB.login(function (response) { }, { scope:'publish_actions'});
Puis cette autorisation et l'application est intégrée dans leur Facebook session.
Ma dernière question est - est-il de facto, la méthode préférée pour demander cette autorisation sans se connecter à Facebook?
FB.login()
, sans scope
paramètre – alors, où voulez-vous que l'autorisation publish_actions
être accordé?OriginalL'auteur mykisscool | 2012-08-23
Vous devez vous connecter pour publier un commentaire.
J'ai corrigé mes erreurs. Merci à ceux qui m'ont fourni des commentaires et à me mettre sur le droit chemin.
Ces erreurs ont été résolus:
Pour commencer, CBroe est droit. Depuis que j'ai besoin d'autorisations étendues
(publish_actions)
j'ai besoin de spécifier ce qui est mon objet d'options d'après la fonction de rappel dansFB.login()
comme suit:Enfin, je n'ai eu aucun succès en utilisant le SDK JavaScript pour publier une action d'un utilisateur timeline à l'aide de
FB.api()
. C'est le code que j'ai était à l'aide de:J'ai négligé d'inclure l'application jeton d'accès. L'application jeton d'accès peut être construit par concaténation de l'identifiant d'application, suivi par un tuyau, d'un suivi par le secret de l'app.
J'ai utilisé le SDK PHP de satisfaire à cette demande que je voulais garder mon api secret un secret. Ici est [plus] du code que j'ai utilisé:
Espérons que cette aide!
OriginalL'auteur mykisscool
Pour la seconde, faire un appel avec votre App Jeton D'Accès comme l'erreur dit; si vous êtes déjà fait et cela ne fonctionne pas, vérifiez que l'application n'est pas "d'origine/de Bureau en mode" dans les paramètres de l'application dans le facebook App tableau de bord. Si elle l'est, l'application jeton d'accès est approuvé et, de l'API fonctionne comme si que vous n'avez pas les fournir.
Pour la première, êtes-vous sûr que les utilisateurs sont octroi publish_actions la permission de votre application? Un appel à
/me/permissions
avec le jeton d'accès utilisateur pour voir les autorisations sont accordées. Notez que la authentifié références /app center de connexion flux est séparé de votre application régulière de débit pour les utilisateurs qui se retrouvent là, autre que via une authentification, d'aiguillage ou le centre d'application, afin de vérifier que vous êtes, y comprispublish_actions
dans lescope
à votre appel à la boîte de Dialogue d'authentification Oauth.OriginalL'auteur Igy