本指南将介绍如何使 Android 应用用户将内容从您的应用分享到 Facebook。用户从您的应用分享时,所分享的内容会显示在其时间线中。用户分享到时间线的内容也可在好友的动态中显示。用户还可将内容从您的应用分享到 Facebook Messenger。
实施分享时,应用不应预填写任何要分享的内容,因为预填写内容会违反开发者政策。
在以下照片示例中,左侧为您应用中的分享对话框,右侧则为 Facebook 应用中最终呈现的帖子。

Android 版分享 SDK 是 Android 版 Facebook SDK 的一个组件。
要在您的项目中使用 Facebook 分享 SDK,请在 Maven 中将其设为依赖项。
在您的项目中,打开 your_app | Gradle Scripts | build.gradle (Project) 并将以下存储库添加到 buildscript { repositories {}} 部分:
mavenCentral()
在您的项目中,打开 your_app | Gradle Scripts | build.gradle (Module: app) 并将以下编译语句添加到 dependencies{} 部分:
compile 'com.facebook.android:facebook-share:latest.release'
构建项目。
正确配置 Facebook 应用编号并将其链接到 Android 应用。
将 ContentProvider 添加至 AndroidManifest.xml 文件,并将 {APP_ID} 设置为您的应用编号:
<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
如果您的应用程序面向 Android 11 或更高版本,请向 AndroidManifest.xml 文件添加以下查询块,以使 Facebook 应用对您的应用可见:
<queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>将 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();要预览 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 分享同时包含照片和视频的内容。请注意以下事项:
使用 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,请创建 ShareDialog 示例,采用您的 onCreate 方法:
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);
}最后调用 SDK 的 callbackManager,其位于您的 onActivityResult 中,以处理回复:
@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。
消息对话框会切换到原生 Android 版 Messenger 应用,并在发布帖子后将控制权交还您的应用。根据您使用的 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();