代码之家  ›  专栏  ›  技术社区  ›  Prody

facebook js api:如何让fb.connect.streampublish使用自动发布

  •  0
  • Prody  · 技术社区  · 16 年前

    我想把东西贴到别人的墙上。

    它可以工作,但我也尝试使用auto_publish特性,这样用户将只得到一个弹出窗口来授予 publish_stream 延期许可。

    所以我设定 streamPublish auto_publish 是的,但我仍然会收到弹出窗口,询问我是否要发布和/或编辑消息。

    我做错什么了?

    下面是我要说的:

    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);
                        }
    
                    });
                }
            });
    
        });
    });
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   RPM1984    16 年前

    遇到这个线程时,我遇到了相同的问题,我解决了这个问题(不必使用另一个apiclient调用)。

    你的回答是对的,因为FB没有正确设置自动发布设置。

    解决办法是打电话给 FB.Connect.forceSessionRefresh 在尝试发布之前。

    我以前的代码:

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

    现在代码:

    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);
                        }});
                    }});
                }}
    

    我使用这个“旧”javascript方法的唯一原因是,graph api当前存在一个错误,您无法发布操作链接。

    我不知道他们在facebook有什么样的开发人员,因为我遇到的问题是不光彩的(这是图形api不允许操作链接,“”而不是导致“应用服务器错误”的空值等)。

    希望这能帮到别人。

        2
  •  1
  •   Damian Galarza    16 年前

    这个问题源于您作为false传递的最后一个参数。这是auto_publish bool,因此即使使用此设置授予的权限为false,也会提示用户是否要发布它。

    // Set auto publish to true
    FB.Connect.streamPublish("none", attachment, actionLinks, fId, "none", null, true);
    
        3
  •  0
  •   Prody    16 年前

    我仍然不确定这为什么不能按预期工作,但我已经检查了fb js代码,它无法在它的userinfo对象中正确设置用户自动发布设置。

    所以我打电话来解决这个问题 stream.publish 通过:

    FB.Facebook.apiClient.callMethod("stream.publish", c, new FB.ImmediateSequencer(function(n,m){
    
    推荐文章