2011-05-09 46 views

回答

6

要做到这一点,首先你需要让你的应用程序的访问令牌:

private string GetAppAccessToken() { 

     var fbSettings = FacebookWebContext.Current.Settings; 

     var accessTokenUrl = String.Format("{0}oauth/access_token?client_id={1}&client_secret={2}&grant_type=client_credentials", 
      "https://graph.facebook.com/", fbSettings.AppId, fbSettings.AppSecret); 

     // the response is in the form: access_token=foo 
     var accessTokenKeyValue = HttpHelpers.HttpGetRequest(accessTokenUrl); 
     return accessTokenKeyValue.Split('=')[1]; 
    } 

几件事情需要注意上述方法:

  • 我使用.net的HttpWebRequest而不是Facebook C#SDK抓取应用程序access_token,因为(从版本5.011 RC1开始),SDK会引发SerializationException。看起来SDK似乎期待来自Facebook的JSON响应,但Facebook以下列格式返回访问令牌:access_token = some_value(这不是有效的JSON)。
  • HttpHelpers.HttpGetRequest只是使用.Net的HttpWebRequest。你可以只以及使用Web客户端,但无论你选择,你最终想使这个HTTP请求:

    GET https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials HTTP/1.1 主持人:graph.facebook.com

现在,你有

public string GenerateAppRequest(string fbUserId) { 
    var appAccessToken = GetAppAccessToken(); 
    var client = new FacebookClient(appAccessToken); 
    dynamic parameters = new ExpandoObject(); 
    parameters.message = "Test: Action is required"; 
    parameters.data = "Custom Data Here"; 

    string id = client.Post(String.Format("{0}/apprequests", fbUserId), parameters); 
    return id; 
} 

同样,你可以检索用户的所有应用程序的请求如下: 注意检索应用程序的access_token的方法,你可以按如下(这里我使用Facebook C#SDK)生成的应用程序要求:你有可能我不希望返回“动态”,但为了简单起见,我在此使用它。

public dynamic GetAppRequests(string fbUserId) { 
     var appAccessToken = GetAppAccessToken(); 
     var client = new FacebookClient(appAccessToken); 

     dynamic result = client.Get(String.Format("{0}/apprequests", fbUserId)); 
     return result;  
    } 

我希望这会有所帮助。

+0

访问/ apprequests假定用户已验证/安装您的应用程序,是否正确? – typeoneerror 2011-09-06 16:13:38

+0

我不相信用户必须验证您的应用。根据Facebook的文档,你只需要你的应用程序访问令牌:http://developers.facebook.com/docs/reference/api/user/ – 2011-09-07 13:47:09

+0

不。使用我的应用程序访问令牌进行测试,仍然会得到“参数ID中的所有用户都必须接受TOS” – typeoneerror 2011-09-07 15:49:36