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).

  1. Comment puis-je surmonter cette erreur?
  2. 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?

Je ne peux voir que vous appelez FB.login(), sans scope paramètre – alors, où voulez-vous que l'autorisation publish_actions être accordé?

OriginalL'auteur mykisscool | 2012-08-23