Я пытаюсь разрешить пользователям, которые связали свою учетную запись Facebook, публиковать сообщения на своей стене одним нажатием кнопки, как , подробно описано в их документах .В частности, я не хочу использовать методы .dialog, предоставляемые в библиотеке Facebook для Android , поскольку я хочу, чтобы процесс публикации был максимально плавным.
Конкретный вызов выглядит следующим образом:это в симуляторе клиента HTTP:
HTTP POST
https://graph.facebook.com/me/feed
Тип содержимого: application / x-www-form-urlencoded
access_token = ... & link = http://mylink.com/id/1326&name=WhatКак вы думаете? & description = Описание ссылки
Этот вызов успешно выполняется в клиенте HTTP на OS X.
Первоначально я пытался использовать функцию .dialog библиотеки Facebook для Android с помощью "stream.publish"."действие, но при этом появляется нежелательное диалоговое окно.
Далее я попытался использовать функцию Facebook для Android .request с параметром" POST ", но эта функция предполагает, что тело является байтовым массивом и в нескольких случаях происходит сбой.места в библиотеке.
Теперь я пытаюсь использовать стек Apache HTTP, включенный в Android.В частности, мой код выглядит следующим образом:
String url = "https://graph.facebook.com/me/feed";
ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>(4);
pairs.add(new BasicNameValuePair("access_token", App.facebook.getAccessToken()));
pairs.add(new BasicNameValuePair("link", "http://mylink.com/id/"+id));
pairs.add(new BasicNameValuePair("name", question));
pairs.add(new BasicNameValuePair("description", description));
InputStream inputStream = null;
HttpResponse response = null;
HttpClient client = null;
try {
final HttpPost post = new HttpPost(url);
final UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs);
post.setEntity(entity);
client = new DefaultHttpClient();
response = client.execute(post);
} catch (IOException e) {
// code to handle exceptions
}
// close streams, etc.
Проблема в том, что ответ от Facebook постоянно следующий:
{"error":{"type":"OAuthException","message":"Invalid OAuth access token."}}
Я знаю, что токен доступа OAuth не является недействительным.Когда я вставляю тот же токен доступа OAuth в HTTP-клиент, он работает как чемпион.Кажется, что создание параметров объекта HttpPost каким-то образом искажает сложный токен доступа OAuth.У кого-нибудь есть предложения, как поступить?