在 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 参考文档

截至 2017 年 4 月 18 日,图谱 API 版本 2.9 及更高版本不再支持下列参数。对于版本 2.8 及更低版本,这些参数将继续有效,直到 2017 年 7 月 17 日。

  • contentTitle,表示链接中的内容的标题
  • imageURL,将在帖子中显示的缩略图的网址
  • 内容的 contentDescription,通常为 2-4 个句子

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

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

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

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

照片

用户可以使用分享对话框或自定义界面,通过您的应用将照片分享到 Facebook。

  • 照片大小必须小于 12MB
  • 用户需要安装版本 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。

视频大小必须小于 12MB。

ShareVideoContent 模型构建视频的分享内容。如需了解完整的属性列表,请参阅 ShareVideoContent 参考文档

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

多媒体

借助分享对话框,用户可以从您的应用向 Facebook 分享同时包含照片和视频的内容。请注意以下事项:

  • 用户需要安装版本 71 或以上的原生 Android 版 Facebook 应用。
  • 照片大小必须小于 12MB。
  • 视频大小必须小于 12MB。
  • 用户每次可以分享最多包含 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 的专属界面。

按钮

Facebook 为 Android 提供用于触发分享的原生按钮。


在 4.28.0 版 Android 版 Facebook SDK 发布后,Android 版“赞”按钮将停用。相关支持将持续到 2018 年 2 月 5 日。

“赞”按钮

“赞”按钮是用户与好友分享内容的快捷途径。轻触“赞”按钮即可为应用中的内容点“赞”,并将内容分享到 Facebook。“赞”按钮可用于赞 Facebook 主页或任何开放图谱对象,并且可通过网址或编号引用。要添加“赞”按钮,请将下列代码片段添加到您的视图:

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

在 4.28.0 版 Facebook SDK 发布后,“发送”按钮将停用。相关支持将持续到 2018 年 2 月 5 日。

“发送”按钮

用户可以使用“发送”按钮,以私密方式向好友和使用 Facebook Messenger 的联系人发送照片、视频和链接。“发送”按钮将调用消息对话框。要向视图添加“发送”按钮,请将下列代码片段添加到视图:

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

分享对话框

分享对话框会切换到原生 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 帖子时,会打开您的应用,甚至可以链接到应用内的特定内容。

自定义界面

如果想要使用专属分享界面,您需要:

以下是通过专属界面将链接发布到 Facebook 时使用的代码:

ShareApi.share(content, null);

分享开放图谱动态

借助开放图谱动态,用户可通过强类型 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();