在 Android 平台分享

本指南详细介绍如何通过 Android 应用将内容分享到 Facebook。用户通过您的应用分享时,相关内容会在其时间线上显示,并且可能在其好友的动态消息中显示。

用户还可通过您的应用将内容分享到 Facebook Messenger。

前提条件

您需要关联或下载 Android 版 Facebook 分享 SDK 才能通过应用将内容分享到 Facebook。

Android 版 Facebook 分享 SDK是 Android 版 Facebook SDK 的一个组件。要在您的项目中使用 Facebook 分享 SDK,请使其成为 Maven 中的一个依赖项,或者下载它。利用以下按钮选择您的首选方法。

将 SDK 与 Maven 关联

  1. 在您的项目中,打开 your_app | Gradle Scripts | build.gradle (Project) 并添加以下存储库到 buildscript { repositories {}} 部分,以便从Maven 中央存储库下载 SDK:
    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 分享 SDK 时,如果未禁用事件自动记录功能,应用事件将被自动记录和收集,用于 Facebook 分析。关于哪些信息会被收集以及如何禁用事件自动记录的详细信息,请参阅应用事件自动记录

更多前提条件

此外,您还需要执行以下操作:

如需详细了解这些要求,请参阅 Android 新手入门

您还需要在 AndroidManifest.xml 中设置 ContentProvider,其中 {APP_ID} 是您的应用编号:

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

实施分享时,应用不应预填写任何分享内容,否则将违反 Facebook 开放平台政策,请参阅 Facebook 开放平台政策第 2.3 条

内容建模

Facebook SDK 4.0+ 版本提供用于分享内容的新模型。用户想要分享的每种内容类型都有一个可用于表示该内容类型的类。对内容建模后,将分享界面添加到应用。

用户通过您的应用将链接分享到 Facebook 时,系统会同时包含所分享的链接和 contentURL。按 ShareLinkContent 模型构建链接的分享内容。如需了解完整的属性列表,请参阅 ShareLinkContent 参考文档

以下是如何触发分享的示例:

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

要预览转至 Google Play 或 App Store 的链接分享,请在分享调试器中输入您的网址。

如果您的应用分享包含 Google Play 或 App Store 中任何应用的链接,则该分享中包含的描述和图片将被忽略。相反,我们将直接从应用商店中为该应用获取标题和图片(如果没有图片可获取,则该分享将不包含图片)。

照片

用户可以使用分享对话框,通过您的应用将照片分享到 Facebook。若要分享,用户需要安装版本 7.0 或更高版本的原生 Android 版 Facebook 应用。

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 分享同时包含照片和视频的内容。请注意以下事项:

  • 用户需要安装版本 71 或以上的原生 Android 版 Facebook 应用。
  • 用户每次可以分享最多包含 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);

分享对话框

分享对话框会切换到原生 Android 版 Facebook 应用,并在发布帖子后将控制权交还您的应用。根据您使用的 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 中调用 SDK 的 callbackManager,处理响应:

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

消息对话框

消息对话框会切换到原生 Android 版 Messenger 应用,并在发布帖子后将控制权交还您的应用。根据您使用的 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();

进阶主题

内置分享回退

在旧版本的 Android 版 SDK 中,您的应用必须先检查设备是否安装了原生 Facebook 应用,然后才可打开分享对话框。若未安装 Facebook 应用,则您必须自行提供代码,才能调用回退对话框。

现在,SDK 将自动检查设备上是否安装了原生 Facebook 应用。如果未安装,SDK 会将用户切换到默认浏览器并打开动态发布对话框。如果用户想要分享开放图谱动态,SDK 会打开网页分享对话框

借助应用链接,您可以从应用发布的 Facebook 帖子链接回应用。当用户点击从应用发布的 Facebook 帖子时,会打开您的应用,甚至可以链接到应用内的特定内容。

分享开放图谱动态

借助开放图谱动态,用户可通过强类型 API 分享内容丰富的结构化内容,该 API 由开放图谱操作和对象定义。这些帖子会链接回您的应用或应用的 App Store 页面。

如需详细了解如何配置开放图谱动态,请参阅 Android 平台中的开放图谱动态

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();