在 Android 平台分享

您集成 Facebook 登录、Facebook 分享或 Facebook Gaming 之后,如果未禁用应用事件自动记录功能,系统将为事件管理工具自动记录和收集特定的应用事件。建议所有使用 Facebook 登录、Facebook 分享或 Facebook Gaming 的应用开发者都了解上述自动功能的运作方式。如要详细了解系统会收集哪些信息以及如何禁用应用事件自动记录功能,请参阅应用事件自动记录

本指南将介绍如何使 Android 应用用户将内容从您的应用分享到 Facebook。用户从您的应用分享时,所分享的内容会显示在其时间线中。用户分享到时间线的内容也可在好友的动态中显示。用户还可将内容从您的应用分享到 Facebook Messenger。

实施分享时,应用不应预填写任何要分享的内容,因为预填写内容会违反开发者政策

在以下照片示例中,左侧为您应用中的分享对话框,右侧则为 Facebook 应用中最终呈现的帖子。

内容分享入门指南

Android 版分享 SDK 是 Android 版 Facebook SDK 的一个组件。

要在您的项目中使用 Facebook 分享 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. 正确配置 Facebook 应用编号并将其链接到 Android 应用。

  5. 生成 Android 开发密钥散列,并将其添加至开发者设置示例应用页面。详情请参阅创建开发密钥散列运行示例应用

  6. ContentProvider 添加至 AndroidManifest.xml 文件,并将 {APP_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();

要预览 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,请创建 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();

进阶主题

内置分享回退

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

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

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