#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»