2010-03-12 5 views
0

J'essaie de publier des choses sur le mur de quelqu'un.Facebook API JS: Comment obtenir FB.Connect.streamPublish pour utiliser auto_publish

Cela fonctionne, mais j'essaie également d'utiliser la fonction auto_publish pour que l'utilisateur ne reçoive qu'une seule fenêtre accordant l'autorisation étendue publish_stream.

J'ai donc défini la auto_publishstreamPublish sur true, mais la fenêtre contextuelle me demande si je souhaite publier et/ou modifier le message.

Qu'est-ce que je fais mal?

Voici ce que je suis en cours d'exécution:

FB.ensureInit(function() { 
    FB.Facebook.get_sessionState().waitUntilReady(function() { 
     FB.Connect.showPermissionDialog("publish_stream", function(perms) { 
      if (perms == "publish_stream") { 
       FB.Facebook.apiClient.friends_get(null, function(result) { 
        var markup = ""; 

        var targets = result; 
        targets = [testFriendsIDForTesting]; 

        var attachment = { 
         name: "Blablabla", 
         href: window.location.href, 
         description: "description", 
         caption: "caption" 
        }; 

        var actionLinks = [{ 
         text: "View", 
         href: window.location.href 
        }]; 

        var num_targets = targets.length; 
        for (var i=0; i<num_targets; i++) { 
         var fId = targets[i]; 
         FB.Connect.streamPublish("none", attachment, actionLinks, fId, "none", null, true); 
        } 

       }); 
      } 
     }); 

    }); 
}); 

Répondre

1

suis tombé sur ce fil comme im ayant le même problème, que je résolus (sans avoir à utiliser l'autre appel apiClient).

Vous avez raison dans votre réponse ci-dessus, dans la mesure où les FB ne définissent pas correctement les paramètres autoPublish.

La solution de contournement consiste à appeler FB.Connect.forceSessionRefresh avant d'essayer de publier.

Mon code avant:

function fbPublish() {{ 
       FB.ensureInit(function() {{ 
         FB.Connect.streamPublish('{0}', {1}, {2}, null, 'Anything else you would like to add?', fbPublishCallback, true, null); 
        }}); 
      }} 

par code:

function fbPublish() {{ 
       FB.ensureInit(function() {{ 
        FB.Connect.forceSessionRefresh(function() {{ 
         FB.Connect.streamPublish('{0}', {1}, {2}, null, 'Anything else you would like to add?', fbPublishCallback, true, null); 
        }}); 
       }}); 
      }} 

La seule raison im en utilisant cette "vieille" méthode JavaScript est parce qu'il ya un bug en cours avec l'API graphique où vous ne pouvez pas poster des liens d'action. Je n'ai aucune idée de quel genre de développeurs ils ont sur Facebook, parce que les problèmes que j'ai rencontrés ont été honteux (ceci, Graph API ne permettant pas les liens d'action, '' au lieu de null causant "Erreur Serveur d'Application", etc).

J'espère que cela aidera quelqu'un d'autre.

0

Je ne sais toujours pas pourquoi cela ne fonctionne pas comme prévu, mais j'ai vérifié le code FB JS et il est ne pas mettre mes paramètres utilisateur de autoPublish correctement dans son objet userInfo.

J'ai travaillé autour en appelant stream.publish via:

FB.Facebook.apiClient.callMethod("stream.publish", c, new FB.ImmediateSequencer(function(n,m){ 
1

Le problème vient du dernier paramètre de votre passage comme faux. Ceci est le booléen auto_publish, donc même avec les autorisations accordées avec cet ensemble à false, il demandera à l'utilisateur s'il veut le publier ou non.

// Set auto publish to true 
FB.Connect.streamPublish("none", attachment, actionLinks, fId, "none", null, true); 
+0

Désolé, mais cette pâte a été faite après que j'ai énormément compressé le code et j'ai oublié le bool à la mauvaise valeur lorsque j'ai collé. Avoir un upvote tho. – Prody

Questions connexes