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

После интеграции входа через Facebook, публикации на Facebook или Facebook Gaming определенные события в приложении будут автоматически регистрироваться и собираться для Events Manager, если только вы не отключите эту функцию. Мы рекомендуем разработчикам приложений, использующих вход через Facebook, публикацию на Facebook или Facebook Gaming, разобраться, как работает эта функция. Подробнее о том, какая информация собирается и как отключить автоматическую регистрацию событий в приложении, см. в разделе Автоматическая регистрация событий в приложении.

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

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

На этих фотографиях слева показан пример окна публикации в вашем приложении, а справа — итоговая публикация в приложении Facebook.

Начальные действия по настройке публикации

Sharing SDK для Android — это компонент Facebook SDK для Android.

Чтобы использовать Facebook Sharing SDK в проекте, сделайте его зависимостью в Maven.

  1. Откройте в своем проекте your_app | Gradle Scripts | build.gradle (Project) и добавьте в раздел buildscript { repositories {}} следующий репозиторий:

    mavenCentral() 
    
  2. Откройте в своем проекте your_app | Gradle Scripts | build.gradle (Module: app) и добавьте в раздел dependencies{} следующее выражение:

    compile 'com.facebook.android:facebook-share:latest.release'
    
  3. Скомпилируйте проект.

  4. Получите правильно сконфигурированный ID приложения Facebook и свяжите его со своим приложением Android.

  5. Сгенерируйте хэш ключа для разработки Android и добавьте его на страницу Примеры приложений в настройках разработчика. Дополнительные сведения см. в разделах Создание хэша ключа для разработки и Запуск примеров приложений.

  6. Добавьте элемент ContentProvider в файл AndroidManifest.xml и установите в качестве {APP_ID} ID приложения:

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. Если ваше приложение предназначено для Android 11 или более поздних версий, добавьте следующий блок запросов в файл AndroidManifest.xml, чтобы сделать приложение Facebook видимым для своего приложения:

    <queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
  8. Добавьте элемент Facebook Activity в свой проект и включите его в файл AndroidManifest.xml.

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

В 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 версии 71 или более поздней.
  • Одновременно можно опубликовать не более 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);
}

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

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

Если вы используете действия или фрагменты AndroidX, не нужно переопределять onActivityResult.

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

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

MessageDialog.show(activityOrFragment, content);

Хэштеги

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

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

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

Дополнительные материалы

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

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

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

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