Отправка в фид Facebook из приложения Android - PullRequest
0 голосов
/ 16 сентября 2010

Я пытаюсь разрешить пользователям, которые связали свою учетную запись 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.У кого-нибудь есть предложения, как поступить?

1 Ответ

0 голосов
/ 17 сентября 2010

Очевидно, что access_token Facebook уже закодирован URLE.Итак, эта строка:

final UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs);

дважды кодирует токен, что делает его недействительным.

Решение состоит в том, чтобы декодировать токен перед его добавлением.
Например:

pairs.add(new BasicNameValuePair("access_token", URLDecoder.decode(App.facebook.getAccessToken(), "UTF-8"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...