本指南将介绍如何使 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();