Использование Facebook Requests 2.0 с C # SDK - PullRequest
6 голосов
/ 09 мая 2011

Я пытаюсь обновить поле количества закладок с помощью SDK, но пока не добился успеха.

Может кто-нибудь сказать мне, какие классы мне нужно создать, чтобы сделать что-то похожее на следующую ссылку:

http://developers.facebook.com/blog/post/464

Примечание:

Ссылка демонстрирует, как установить количество закладок и удалить его.Я хотел бы иметь возможность сделать то же самое с SDK, любая помощь будет признательна.

1 Ответ

6 голосов
/ 09 мая 2011

Для этого сначала нужно получить токен доступа вашего приложения:

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

Надеюсь, это поможет.

...