Использование Facebook Requests 2.0 с C # SDK

#facebook #facebook-c#-sdk

#Facebook #facebook-c #-sdk

Вопрос:

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

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

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

Примечание:

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

Ответ №1:

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

     private string GetAppAccessToken() {

        var fbSettings = FacebookWebContext.Current.Settings;

        var accessTokenUrl = String.Format("{0}oauth/access_token?client_id={1}amp;client_secret={2}amp;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 просто использует HttpWebRequest от .Net. С тем же успехом вы можете использовать WebClient, но что бы вы ни выбрали, в конечном итоге вы захотите выполнить этот http-запрос:

    ПОЛУЧИТЬ https://graph.facebook.com/oauth/access_token ?client_id=YOUR_APP_IDamp;client_secret=YOUR_APP_SECRETamp;grant_type=client_credentials HTTP /1.1 Хост: graph.facebook.com

Теперь, когда у вас есть метод для извлечения app access_token, вы можете сгенерировать app request следующим образом (здесь я использую 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;
}
  

Аналогичным образом, вы можете получить все запросы пользовательского приложения следующим образом:
Примечание: вы, вероятно, не хотите возвращать «dynamic», но я использовал его здесь для простоты.

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

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

Я надеюсь, что это поможет.

Комментарии:

1. доступ к / apprequests предполагает, что пользователь аутентифицировал / установил ваше приложение, правильно?

2. Я не верю, что пользователь должен аутентифицировать ваше приложение. Согласно документации Facebook, вам нужен только ваш токен доступа к приложению: developers.facebook.com/docs/reference/api/user

3. Нет. Протестировано с моим токеном доступа к приложению и по-прежнему выдает «Все пользователи в param ids должны были принять TOS»