Публикация материалов в 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.

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

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

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

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

Фото

С помощью диалога "Поделиться" люди могут публиковать на Facebook фото из вашего приложения. Чтобы поделиться контентом, нужно установить нативное приложение 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 видео из вашего приложения.

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

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

Мультимедийный контент

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

  • У человека должно быть установлено нативное приложение Facebook для Android версии 7.1 или более поздней.
  • Одновременно можно публиковать максимум 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.

Кнопки

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


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

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

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

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

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

Публикация новостей 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();