Для этого сначала нужно получить токен доступа вашего приложения:
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 ожидает ответ JSON от Facebook, но Facebook возвращает токен доступа в виде: access_token = some_value (который не является допустимым JSON).
HttpHelpers.HttpGetRequest просто использует .NetHttpWebRequest.Вы также можете использовать WebClient, но что бы вы ни выбрали, вы в конечном итоге захотите сделать этот 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
Теперь, когда у вас есть метод для извлечения приложения access_token, вы можете сгенерировать запрос приложения следующим образом (здесь я использую Facebook C # SDK):
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;
}
Аналогично, вы можетеполучить все пользовательские запросы приложений следующим образом: Примечание. Возможно, вы не хотите возвращать «динамический», но я использовал его здесь для простоты.
public dynamic GetAppRequests(string fbUserId) {
var appAccessToken = GetAppAccessToken();
var client = new FacebookClient(appAccessToken);
dynamic result = client.Get(String.Format("{0}/apprequests", fbUserId));
return result;
}
Надеюсь, это поможет.