Android - Как загрузить фото с SD карты на стену Facebook

Я использую Facebook Android SDK.

Цель

Создать несколько постов в ленте новостей зарегистрированного в Facebook пользователя, которые будут содержать фото с Android-устройства (его SD-карты) и какой-нибудь комментарий. Результат должен быть таким же, как при использовании функции добавления фото/видео непосредственно в Facebook. В итоге все должно выглядеть примерно так:

Желаемый результат Facebook

Goal

Проблема

Я не могу это сделать.

Я просмотрел множество аналогичных постов на Stack Overflow, но ответа там пока нет.

Что я пытался реализовать до сих пор

Подход 1: фотографии с SD-карты 2 альбом Facebook

Как

Загружаю фотографии с мобильного телефона (его SD-карты) в альбом, который создается для моего приложения при первой загрузке фотографии с него. В этом случае при построении объекта params я использую ключ picture и в качестве его значения помещаю байт картинки. Я использую me/photos в request(...) вызове объекта Facebook (или AsyncFacebookRunner). **

Проблема

Не все загруженные изображения отображаются на моей стене. Вместо этого появляется что-то вроде x фотографий были добавлены в альбом xxx.

Фрагмент кода такой (для одной фотографии)

Bundle params = new Bundle();
params.putString("message", "Uploaded on " + now());
params.putByteArray("picture", bytes); //bytes contains photo bytes, no problem here
asyncRunner.request("me/photos", params, "POST", new PostPhotoRequestListener(), null);

Результат Facebook

Photos to album

Подход 2: Фотографии из Интернета 2 facebook news feed

Как

Отображать фотографии, хранящиеся где-то в Интернете, в постах на моей стене. В этом случае при построении объекта params я использую ключ link и задаю в качестве его значения url картинки. Я использую me/feed в вызове request(...).

Проблема

Это приводит к странному результату, но это не то, что я хочу.

Фрагмент кода такой (для одной фотографии)

Bundle params = new Bundle();
params.putString("message", "Uploaded on " + now());
params.putString("link", "http://i1114.photobucket.com/albums/k538/tom_rada/bota2.jpg");
asyncRunner.request("me/feed", params, "POST", new PostPhotoRequestListener(), null);

Результат Facebook

Linked photos

Подход 3: смесь подхода 1 и 2

Как

Я пытаюсь использовать ключ picture и установить photo bytes в качестве значения (как в 1.), и вызвать запрос с me/feed (как в 2.),

Проблема

. ),

Проблема

Сообщение создается, как я хотел бы, но фото не включено

Сниппет кода такой (для одной фотографии)

Bundle params = new Bundle();
params.putString("message", "Uploaded on " + now());
params.putByteArray("picture", bytes); //bytes contains photo bytes, no problem here
asyncRunner.request("me/feed", params, "POST", new PostPhotoRequestListener(), null);

Результат Facebook

Almost there

Итак, есть идеи, как я могу достичь своей цели?

EDIT - WORKAROUND FOUND

Похоже, что единственный способ создать новые посты с фотографиями на стене пользователя - это добавить фотографии и соответствующие комментарии в альбом Wall photos пользователя.

Как - фрагмент кода

Осторожно: Вызов facebook.request должен быть заменен на асинхронный вызов, чтобы операция не блокировала поток UI !!!

String wallAlbumID = null;
String response = facebook.request("me/albums");
JSONObject json = Util.parseJson(response);
JSONArray albums = json.getJSONArray("data");
for (int i =0; i < albums.length(); i++) {
    JSONObject album = albums.getJSONObject(i);
    if (album.getString("type").equalsIgnoreCase("wall")) {
        wallAlbumID = album.getString("id");
        Log.d("JSON", wallAlbumID);
        break;
    }
}

... и затем

if (wallAlbumID != null) {
    Bundle params = new Bundle();
    params.putString("message", "Uploaded on " + now());
    params.putByteArray("source", bytes);
    asyncRunner.request(wallAlbumID+"/photos", params, "POST", new PostPhotoRequestListener(), null);
}

12
задан Adaline Simonian 13 August 2017 в 09:16
поделиться