作为应用程序而不是用户发布到应用程序墙

时间:2011-02-19 20:59:40

标签: facebook-c#-sdk

我使用facebook c#sdk创建了一个 asp.net mvc 3 facebook应用程序。

我正在尝试发布到我的应用程序墙,它可以工作,但帖子是以这种格式创建的:

[我的帐户名称]通过[我的申请]

因此,该帖子会显示在 [我的应用程序] +其他组中。

我希望帖子显示为由应用程序制作,而不是由我制作,因此帖子会显示在只是[我的应用程序] 组中。

我一直在寻找这个问题的答案,而且每个人都说,你必须获得应用程序的访问令牌,但没有人说如何做到这一点。

请有人提供如何做的示例代码???


我尝试了两种方式(三种方式),但三种方式都给了我以下错误:

当前查看器204182346262383(EntID:204182346262383)无法看到由ID 204182346262383支持的实体(类EntApplication)。

这是我的代码:

    private void Publish(string message, string caption, string description, string name, string picture, string link)
    {
        var args = new Dictionary<string, object>();
        args["message"] = message;
        args["caption"] = caption;
        args["description"] = description;
        args["name"] = name;
        args["picture"] = picture;
        args["link"] = link;

        string path = AppId + "/feed";
        var fbApp = new FacebookClient(GetAppAccessToken());
        fbApp.Post(path, args);
    }

    private string GetAppAccessToken()
    {
        var fb = new FacebookOAuthClient { ClientId = AppId, ClientSecret = SecretKey };
        dynamic result = fb.GetApplicationAccessToken();
        var appAccessToken = result.access_token;
        return appAccessToken.ToString();
    }

我非常感谢这方面的帮助,我已经坚持了很多天。我总是走到尽头。

2 个答案:

答案 0 :(得分:3)

您需要使用Facebook应用程序访问令牌发出请求。

var fb = new FacebookClient("{app_access_token}");
dynamic result = fb.Post("/{app_id}/feed", new Dictionary<string, object> { { "message", "hello" } });

有两种方法可以使用应用程序令牌。

  1. 使用FacebookOAuthClient :(此方法使用OAuth2标准获取应用程序访问令牌,这是获取应用程序访问令牌的首选方式。但是向facebook服务器发出请求。)

    var fb = new FacebookOAuthClient { ClientId = "{app_id}", ClientSecret = "{app_secret}" };
    dynamic result = fb.GetApplicationAccessToken();
    var appAccessToken = result.access_token;
    
  2. 手动创建应用程序令牌:

    var appAccessToken = "{app_id}|{app_secret}";
    
  3. 将{app_id}和{app_secret}替换为适当的值。

答案 1 :(得分:0)

正如 prabir 建议您需要使用经过身份验证的Facebook客户端作为应用程序而不是连接用户。

这是使用版本5.03 beta的短代码snipet:

var fbApp = new FacebookClient(FacebookContext.Current);
dynamic result = fbApp.Post("/"+FacebookContext.Current.AppId+"/feed", new Dictionary<string, object> { { "message", "Hello World" } });