分享到 iOS 和 Android 版 Messenger

如果使用 4.29.0 或以上版本的 iOS 或 Android 版 Facebook SDK 开发应用,您可以让用户将应用中的链接和媒体分享到 Messenger。这些分享操作可用于通过来源链接触发聊天功能插件。此外,它们也可将您的聊天功能插件放置到分享者的更多导航抽屉中。

如需了解详情,请参阅以下各部分:

如想了解如何将链接和媒体分享到网页版 Messenger,请参阅分享到网页版 Messenger

分享类型

Facebook SDK 提供四种知晓来源的分享类型和一种不知来源的分享类型:

下表列出了“分享到 Messenger”支持的所有分享类型,是否需要提供主页或应用编号,以及模板的使用方法。

分享类型 是否需要提供主页编号? 应用程序

常规模板

可选

  • 包含按钮的常规模板
  • 包含默认操作的常规模板
  • 包含按钮和默认操作的常规模板

媒体模板

是否必需

  • 媒体模板图片网址
  • 媒体模板图片附件编号
  • 媒体模板视频网址
  • 媒体模板视频附件编号

开放图谱音乐

是否必需

  • 开放图谱音乐

链接分享

可选

  • 不包含来源的链接
  • 包含来源的链接

照片

不支持

  • 照片
  • 来自图库的照片

关联应用编号和主页编号

开发者可在分享流程中指出主页编号,这样当人们使用分享 SDK 将应用内容分享到 Messenger 时,此主页将视为内容的来源。主页管理员可控制哪些应用可以将其主页作为分享来源,以防出现伪造来源的情况。要授予某个应用将其主页作为分享来源的权限,管理员需要先关联应用编号和主页编号。

要关联应用编号和主页编号:

  1. 前往主页的设置页面。
  2. 点击 Messenger 平台版块。
  3. 前往通用设置中的关联应用版块。
  4. 输入应用编号,然后点击关联按钮。
  5. 如果此应用先前不在已订阅应用表中,则它将显示在该表中,并带有相应的“分享来源”身份。如果应用已在此表中,则它将新增一个“分享来源”身份。

当然,主页管理员也可以移除相关权限,不让此应用使用分享来源。

要移除某个应用的“分享来源”身份:

  1. 已订阅应用表中找到这个应用,点击“身份”栏中对应的下拉菜单。
  2. 点击“分享来源”取消选择此身份。
  3. 如果应用只有“分享来源”一个身份,则应用所在的行将从表格中移除。如果身份不止一个,则应用所在行将保留,但“分享来源”行会被取消选择。

将域加入白名单

如果在分享 SDK 中使用了网址按钮,并且希望在 Messenger 中打开网址时能启用 Messenger 功能插件,则必须先将对应的网址域加入白名单,才能顺利实现分享。

要将域加入白名单:

  1. 前往主页的设置页面。
  2. 点击 Messenger 平台版块。
  3. 前往通用设置中的关联应用版块。
  4. 列入白名单的域版块输入网址域,然后点击保存

如需详细了解如何设置白名单,请参阅Messenger 功能插件 SDK — 所需的域白名单

iOS

前提条件

向应用添加“分享到 Messenger”功能前,请完成下述步骤:

  • iOS 版 Facebook SDK 添加到您的移动开发环境中
  • 利用 Messenger 平台工具配置并关联您的 Facebook 应用编号与主页编号。
  • 将应用编号、显示名称和需要获取照片访问权限的理由添加到应用的 .plist 文件中,请注意,该理由必须能让人轻松看懂。
  • FBSDKShareKit.framework 链接到您的项目。

如需了解更多信息,请参阅 iOS 版 Facebook SDK 新手入门

此外,也请确保您的应用会在 FBSDKMessageDialog 实例中调用 canShow,以了解用户是否在其设备上安装了兼容版本的 Messenger。

常规模板示例分享

FBSDKShareMessengerURLActionButton *urlButton = [[FBSDKShareMessengerURLActionButton alloc] init];
urlButton.title = @"Visit Facebook";
urlButton.url = [NSURL URLWithString:@"https://www.facebook.com"];
    
FBSDKShareMessengerGenericTemplateElement *element = [[FBSDKShareMessengerGenericTemplateElement alloc] init];
element.title = @"This is a Cat Picture";
element.subtitle = @"Look at this cat, wow! Amazing.";
element.imageURL = [NSURL URLWithString:@"https://static.pexels.com/photos/126407/pexels-photo-126407.jpeg"];
element.button = urlButton;
    
FBSDKShareMessengerGenericTemplateContent *content = [[FBSDKShareMessengerGenericTemplateContent alloc] init];
content.pageID = // Your page ID, required for attribution
content.element = element;

FBSDKMessageDialog *messageDialog = [[FBSDKMessageDialog alloc] init];
messageDialog.shareContent = content;

if ([messageDialog canShow]) {
    [messageDialog show];
}

媒体模板示例分享

// Share with mediaURL
FBSDKShareMessengerURLActionButton *urlButton = [[FBSDKShareMessengerURLActionButton alloc] init];
urlButton.title = @"Visit Facebook";
urlButton.url = [NSURL URLWithString:@"https://www.facebook.com"];

NSURL *mediaURL = // Must be a Facebook URL, see media template documentation
FBSDKShareMessengerMediaTemplateContent *content = [[FBSDKShareMessengerMediaTemplateContent alloc] initWithMediaURL:mediaURL];
content.pageID = // Your page ID, required
content.mediaType = FBSDKShareMessengerMediaTemplateMediaTypeImage;
content.button = urlButton;

FBSDKMessageDialog *messageDialog = [[FBSDKMessageDialog alloc] init];
messageDialog.shareContent = content;

if ([messageDialog canShow]) {
    [messageDialog show];
}

------------------------------------------------------------------

// Share with attachmentID
FBSDKShareMessengerURLActionButton *urlButton = [[FBSDKShareMessengerURLActionButton alloc] init];
urlButton.title = @"Visit Facebook";
urlButton.url = [NSURL URLWithString:@"https://www.facebook.com"];

NSString *attachmentID = // attachmentID, see media template documentation for how to upload an attachment
FBSDKShareMessengerMediaTemplateContent *content = [[FBSDKShareMessengerMediaTemplateContent alloc] initWithAttachmentID:attachmentID];
content.pageID = // Your page ID, required
content.mediaType = FBSDKShareMessengerMediaTemplateMediaTypeImage;
content.button = urlButton;

FBSDKMessageDialog *messageDialog = [[FBSDKMessageDialog alloc] init];
messageDialog.shareContent = content;

if ([messageDialog canShow]) {
    [messageDialog show];
}

开放图谱音乐示例分享

FBSDKShareMessengerURLActionButton *urlButton = [[FBSDKShareMessengerURLActionButton alloc] init];
urlButton.title = @"Visit Facebook";
urlButton.url = [NSURL URLWithString:@"https://www.facebook.com"];

FBSDKShareMessengerOpenGraphMusicTemplateContent *content = [[FBSDKShareMessengerOpenGraphMusicTemplateContent alloc] init];
content.pageID = // Your page ID, required
content.url = // open graph music url, see open graph music documentation
content.button = urlButton;

FBSDKMessageDialog *messageDialog = [[FBSDKMessageDialog alloc] init];
messageDialog.shareContent = content;

if ([messageDialog canShow]) {
    [messageDialog show];
}

Android

前提条件

按照在 Android 平台分享中的说明操作,概括如下:

此外,也请确保您的应用会调用 MessageDialog.canshow({template}),以了解用户是否在其设备上安装了兼容版本的 Messenger。

常规模板示例分享

ShareMessengerURLActionButton actionButton =
    new ShareMessengerURLActionButton.Builder()
           .setTitle("Visit Facebook")
           .setUrl(Uri.parse("https://www.facebook.com"))
           .build();
ShareMessengerGenericTemplateElement genericTemplateElement =
    new ShareMessengerGenericTemplateElement.Builder()
           .setTitle("Visit Facebook")
           .setSubtitle("Visit Messenger")
           .setImageUrl(Uri.parse("heeps://Your/Image/Url"))
           .setButton(actionButton)
           .build();
ShareMessengerGenericTemplateContent genericTemplateContent = 
    new ShareMessengerGenericTemplateContent.Builder()
           .setPageId("Your Page Id") // Your page ID, required
           .setGenericTemplateElement(genericTemplateElement)
           .build();  
                 
if (MessageDialog.canShow(genericTemplateContent)) {
    MessageDialog.show(activityOrFragment, genericTemplateContent);
}

媒体模板分享

// Share with mediaURL
ShareMessengerMediaTemplateContent mediaTemplateContent =
    new ShareMessengerMediaTemplateContent.Builder()
            .setPageId("Your page ID") // Your page ID, required
            .setMediaType(MediaType.IMAGE)
            .setMediaUrl(Uri.parse("https://Facebook/Media/URL")) // Must be a Facebook URL, see media template documentation
            .setButton(actionButton)
            .build();
if (MessageDialog.canShow(mediaTemplateContent)) {
    MessageDialog.show(activityOrFragment, mediaTemplateContent);
}

// Share with attachmentID
ShareMessengerMediaTemplateContent mediaTemplateContent =
    new ShareMessengerMediaTemplateContent.Builder()
            .setPageId("Your page ID") // Your page ID, required
            .setMediaType(MediaType.IMAGE)
            .setAttachmentId("Attachment Id") // AttachmentID, see media template documentation for how to upload an attachment
            .setButton(actionButton)
            .build();
if (MessageDialog.canShow(mediaTemplateContent)) {
    MessageDialog.show(activityOrFragment, mediaTemplateContent);
}

开放图谱音乐示例分享

ShareMessengerOpenGraphMusicTemplateContent musicTemplateContent =
    new ShareMessengerOpenGraphMusicTemplateContent.Builder()
                .setPageId("Your page ID") // Your page ID, required
                .setUrl(Uri.parse("https://Open/Graph/Music/URL")) // Open graph music url, see open graph music documentation
                .setButton(actionButton)
                .build();

if (MessageDialog.canShow(musicTemplateContent)) {
    MessageDialog.show(activityOrFragment, musicTemplateContent);
}