Публикация материалов в Android

В этом руководстве мы расскажем о том, как интегрировать в приложение Android функцию публикации материалов на Facebook. Материалы, которыми люди делятся через ваше приложение, появляются в их Хронике, а также могут отображаться в Ленте новостей их друзей.

Также материалами из приложения можно делиться в Facebook Messenger.

Предварительные требования

Прежде чем делиться на Facebook материалами из приложения, нужно добавить ссылку или скачать Facebook Sharing SDK для Android.

Sharing SDK для Android — это компонент Facebook SDK для Android. Чтобы использовать Facebook Sharing SDK в проекте, сделайте его зависимостью в Maven или скачайте. Выберите нужный способ с помощью кнопки ниже.

Ссылка на SDK с Maven

  1. В своем проекте откройте your_app | Gradle Scripts | build.gradle (Project) и добавьте следующий репозиторий в раздел buildscript { repositories {}}, чтобы скачать SDK с Maven Central Repository:
    mavenCentral() 
  2. В своем проекте откройте your_app | Gradle Scripts | build.gradle (Module: app) и добавьте следующее заявление в раздел dependencies{}, чтобы скомпилировать новейшую версию SDK:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. Создайте проект.

Скачать SDK

Чтобы скачать SDK, нажмите следующую кнопку.

Загрузка SDK

При использовании Facebook Sharing SDK события в приложения автоматически регистрируются и собираются для Facebook Analytics, только если вы не выключите автоматическую регистрацию событий. Подробнее о том, какая информация собирается и как выключить автоматическую регистрацию событий, см. в разделе, посвященном автоматической регистрации событий в приложении.

Дальнейшие требования

Кроме того, следуйте инструкциям ниже:

Подробные сведения об этих требованиях см. в разделе Начало работы с Android SDK.

Также потребуется добавить ContentProvider в файл AndroidManifest.xml, где {APP_ID} — это ID вашего приложения:

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

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

Моделирование материалов

В Facebook SDK версий 4.0 и выше предусмотрены новые модели публикации материалов. Для каждого типа материалов, которыми хотят поделиться люди, предусмотрен свой класс, который вы можете использовать. После моделирования материалов добавьте в приложение интерфейс публикации.

Когда люди публикуют на Facebook ссылки из вашего приложения, в публикацию добавляется contentURL с соответствующей ссылкой. Создайте публикуемые материалы для ссылок с помощью модели ShareLinkContent. Список всех атрибутов см. в справке по ShareLinkContent.

С 18 апреля 2017 г. API Graph версии 2.9 и выше не поддерживает следующие параметры. Версии 2.8 и ниже будут поддерживать эти параметры до 17 июля 2017 г.

  • contentTitle — заголовок материалов в ссылке;
  • imageURL — URL миниатюры, которая будет отображаться в публикации;
  • contentDescription — описание материалов (обычно 2-4 предложения).

Пример кода для запуска публикации материалов:

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

Чтобы предварительно просмотреть публикуемую ссылку на App Store или Google Play, введите ее URL в отладчике.

Если ваша публикация содержит ссылку на приложение в Google Play или App Store, описание и изображение в публикации будут игнорироваться. Вместо этого мы загрузим название и изображение приложения из магазина (если изображения в магазине нет, его не будет и в публикации).

Фото

Люди могут делиться на Facebook фото из вашего приложения. Для этого можно использовать диалог «Поделиться» или индивидуально настроенный интерфейс.

  • Размер фото не должен превышать 12 МБ.
  • Кроме того, на устройстве должно быть установлено нативное приложение Facebook для Android (версии 7.0 или более поздней).

Создайте публикуемые материалы для фото с помощью модели SharePhotoContent. Список всех атрибутов см. в справке по SharePhotoContent.

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

Видео

Люди могут делиться на Facebook видео из вашего приложения. Для этого можно использовать диалог «Поделиться» или индивидуально настраиваемый интерфейс.

Размер видео не должен превышать 12 МБ.

Создайте публикуемые для видео материалы с помощью модели ShareVideoContent. Список всех атрибутов см. в справке по ShareVideoContent.

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

Мультимедийные материалы

Люди могут делиться мультимедийными материалами, содержащими фото и видео, из вашего приложения на Facebook с помощью диалога «Поделиться». Имейте в виду:

  • У человека должно быть установлено нативное приложение Facebook для Android версии 71 или более поздней.
  • Размер фото не должен превышать 12 МБ.
  • Размер видео не должен превышать 12 МБ.
  • Одновременно можно публиковать максимум 6 видео и фото.

Создайте мультимедийные материалы для публикации с помощью модели ShareMediaContent. Список всех атрибутов см. в справке по ShareMediaContent.

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

Добавление интерфейсов для публикации материалов

После создания модели для материалов можно либо запустить интерфейс Facebook для публикации материалов, либо создать собственный интерфейс, который вызывает API Graph.

Кнопки

Для запуска публикации материалов можно воспользоваться нативными кнопками Facebook для Android.


В Facebook SDK для Android версии 4.28.0 упразднена кнопка «Нравится» для Android. Она будет поддерживаться до 5 февраля 2018 г.

Кнопка «Нравится»

Кнопка «Нравится» — это быстрый и удобный способ поделиться материалами с друзьями. Она позволяет одним нажатием отметить материалы приложения как понравившиеся и поделиться ими на Facebook. С ее помощью можно отметить Страницу Facebook или любой объект Open Graph как понравившиеся. Для ссылки на кнопку используется URL или ID. Чтобы добавить кнопку «Нравится», добавьте в представление следующий фрагмент кода:

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

Кнопка «Поделиться»

Кнопка «Поделиться» служит для вызова диалога «Поделиться». Чтобы добавить кнопку «Поделиться», добавьте в представление следующий фрагмент кода:

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

В Facebook SDK версии 4.28.0 упразднена кнопка «Отправить». Она будет поддерживаться до 5 февраля 2018 г.

Кнопка «Отправить»

С помощью этой кнопки можно делиться фото, видео и ссылками с друзьями и контактами в личных сообщениях Facebook Messenger. Кнопка «Отправить» служит для вызова диалога сообщения. Чтобы добавить кнопку «Отправить», добавьте в представление следующий фрагмент кода:

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

Диалог «Поделиться»

Этот диалог служит для переключения в нативное приложение Facebook для Android. После публикации он возвращает управление вашему приложению. В зависимости от используемого вами SDK для возврата в приложение может быть необходимо коснуться стрелки назад. Если на устройстве не установлено приложение Facebook, диалог автоматически переключается на веб-диалог, который используется в качестве альтернативы.

ShareDialog.show(activityOrFragment, content);

Например, чтобы показать диалог ShareDialog для ссылки в вашем действии, создайте в методе onCreate экземпляр ShareDialog:

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });
    }

Затем отобразите диалог ShareDialog:

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

Наконец, в callbackManager вызовите onActivityResult из имеющегося SDK для обработки отклика:

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

Диалог сообщения

Этот диалог служит для переключения в нативное приложение Messenger для Android. После публикации он возвращает управление вашему приложению. В зависимости от используемого вами SDK для возврата в приложение может быть необходимо коснуться стрелки назад.

MessageDialog.show(activityOrFragment, content);

Дополнительные функции

При использовании диалога «Поделиться» Facebook вы можете применять дополнительные функции, которые недоступны, если вы делитесь материалами с помощью API.

Хэштеги

Для фото, ссылки или видео, которыми вы делитесь, можно указать один хэштег. Он также будет отображаться в диалоге «Поделиться». Перед публикацией люди, если пожелают, смогут удалить его.

Ниже показано, как добавить хэштег к ссылке.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

Публикация цитаты

Вы можете позволить людям самостоятельно выделять текст, который будет отображаться как цитата со ссылкой. Или же вы можете сами выбрать цитату, например врез в статье, который будет отображаться вместе со ссылкой. В любом случае цитата появляется в своем собственном поле отдельно от комментариев пользователя.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

См. также

Встроенные альтернативные диалоги для публикации материалов

В предыдущих версиях SDK для Android, прежде чем открыть диалог «Поделиться», приложение должно было проверить, установлено ли на устройстве нативное приложение Facebook. Если нет, вам нужно было добавить соответствующий код для вызова альтернативной версии диалога.

Теперь же SDK автоматически проверяет наличие на устройстве нативного приложения Facebook. Если оно отсутствует, SDK переключает людей в браузер по умолчанию и открывает диалоговое окно. Если человек хочет поделиться новостью Open Graph, SDK открывает веб-диалог «Поделиться».

С помощью App Links можно создавать обратные ссылки на ваше приложение из публикаций на Facebook, которыми поделились из него. Когда человек нажимает публикацию в Facebook, которой поделились из вашего приложения, открывается это приложение. Можно даже создать ссылку на определенные материалы в приложении.

Индивидуально настроенный интерфейс

Если вы решили использовать собственный интерфейс для публикации материалов, потребуется выполнить следующее:

  • Создайте индивидуально настраиваемый интерфейс для публикации на эндпойнт API Graph /me/feed
  • Интегрируйте в свое приложение «Вход через Facebook»
  • Запросите разрешение publish_actions для людей, которые входят в ваше приложение

Вот код для публикации ссылки на Facebook из собственного интерфейса:

ShareApi.share(content, null);

Публикация новостей Open Graph

Новости Open Graph позволяют людям делиться структурированными материалами с помощью строго типизированного API, включающего действия и объекты Open Graph. В таких публикациях имеются обратные ссылки на ваше приложение или на его страницу в магазине приложений.

Подробнее о настройке новостей Open Graph см. здесь.

Создайте публикуемые для действий Open Graph материалы с помощью модели ShareOpenGraphContent. Список всех атрибутов см. в справке по ShareOpenGraphContent.

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();