Привет всем!

Facebook  прекращает поддержку Graph API v2.1 30 октября 2016 года, а это значит, что некоторые проекты, которые работают на этих механизмах, требуется переписать.

Несмотря на то, что лично я часто ругаю Facebook за крайне запутанный способ ведения документации (и вообще все, там абсолютно все запутано!), он предоставляет довольный мощный инструмент для всего, который порой, правда выглядит как наведения пушки на воробья.

В одном из проектов мне пришлось переписать полностью класс по работе с Facebook — начиная от авторизации (как мы помним, класс по работе с сессиями Session канул в лету), заканчивая шарингом историй. И если с первым пунктом никаких проблем особенно не возникло (достаточно просто следовать документации и у вас все получится), то со вторым пришлось немного повозиться.

Все дело в том, что теперь для этого есть большущий инструмент, чтобы ваши друзья не смущались компьютерному языку «Ваш друг поделился с вами новостью», а читали вполне нормальный «Ваш друг только что прочитал новость».

Об этом и поговорим.

Кстати, в документации фейсбука описано как создать типовой пост (посмотрел фильм, послушал песню). А вот с кастомными вещами только общие черты. А мне нужно именно кастом. Так что начинаем плясать.

Пляски начинаются с консоли приложения. Нам нужна вкладка Open graph.

Создадим сначала объект. Объект в понятии open graph — это то, действие над чем пользователь произвел — книга, новость, кот.

У каждого объекта есть куча свойств, их список вы получите сразу после того, как нажмете кнопку Save. Посмотрите внимательно, возможно, стандартных свойств вам хватит (type и title обязательны). В случае с котом, мы можем указать его имя и сделать этот элемент обязательным при шаринге новости.

Далее перейдем к действию (кстати в русской документации фейсбука я видел обозначение «глагол», а объект — «существительное»). Как в случае с объектом, указываем действие и нажимаем кнопку save. У действия тоже есть список свойств (как бы дико это ни звучало), но нам надо обратить внимание на то, что мы действие производим над созданным объектом cat. Поэтому в самом низу нажимаем на Add property и добавляем свойство «кот».

Почти готово. Осталось добавить Story.

Увидели большой список падежей? Это то, что ваши друзья в итоге будут видеть, так что нужно постараться, чтоб все было похоже на реальный язык. А можно и не стараться, как ни крути, но автоматического перевода и подстановки слов в нашей виртуальной реальности хватает.

Все, с настройками в консоле приложения мы разобрались, теперь начинаем хардкодить. Хотя выглядит все довольно просто, но пришлось потыкаться некоторое время, чтобы разобраться что и куда вводить.

Обратите особое внимание на константы SHARE_OBJECT_TYPE и ACTION_OBJECT,  у меня получился не самый хороший пример. Давайте уточним какие данные надо подставлять (это очень важно).

NAMESPACE

Dashboard — Settings — Namespace

SHARE_OBJECT_TYPE

Откройте ваш объект в консоле, промотайте до самого низа, до Advanced Options. В поле Open Graph type вы найдете нужное значение.

SHARE_ACTION_TYPE

Аналогично, как для SHARE_OBJECT_TYPE, только для вашего действия нужно повторить то же самое.

ACTION_OBJECT

На той же странице настроек вашего действия, вам нужно найти созданный объект и его название как раз и будет тем, что нужно.

Вот собственно и все. При вызове метода updateStatus, откроется диалоговое окно фейсбука, в котором будут находиться ваши тексты (переданные в метод), фотография, если есть. Помимо этого, пользователь может добавить свой текст в статус (если речь идет о коте, то это конечно «нам это очень понравилось»).

P.S. Ссылка на рабочий пример github — https://github.com/sashatinkoff/Facebook-share-story

P.P.S. Если увидели ошибку “ Error publishing message” при отправке поста, то причина этому заключается в следующем — необходимо заапрувить добавленное действие на фейсбуке.