在 Android 平台分享

本指南详细介绍如何通过 Android 应用将内容分享到 Facebook。用户通过您的应用分享时,相关内容会在其时间线上显示,并且可能在其好友的动态消息中显示。

用户还可通过您的应用将内容分享到 Facebook Messenger。

前提条件

您将需要执行以下操作,才能通过应用将内容分享到 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,要分享的链接
  • contentTitle,表示链接中的内容的标题
  • imageURL,将在帖子中显示的缩略图的网址
  • 内容的 contentDescription,通常为 2-4 个句子

按 ShareLinkContent 模型构建链接的分享内容。如需了解完整的属性列表,请参阅ShareLinkContent 参考文档

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

注意:如果您的应用分享的是 iTunes 或 Google Play 商店的链接,我们不会发布您在分享中指定的任何图片或说明。相反,我们会发布通过网络爬虫直接从应用商店搜刮的一些应用信息,其中可能不包括图片。要预览转至 iTunes 或 Google Play 的链接分享,请在分享调试器中输入您的网址。

照片

用户可以使用分享对话框或自定义界面,通过您的应用将照片分享到 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 提供用于触发分享的原生按钮。


“赞”按钮

“赞”按钮是用户与好友分享内容的快捷途径。轻触“赞”按钮即可为应用中的内容点“赞”,并将内容分享到 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);

“发送”按钮

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

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

分享对话框

分享对话框会切换到原生 Android 版 Facebook 应用,并在发布帖子后将控制权交还您的应用。如果未安装 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);
FacebookSdk.sdkInitialize(getApplicationContext());
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()
.setContentTitle("Hello Facebook")
.setContentDescription(
"The 'Hello Facebook' sample showcases simple Facebook integration")
.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 应用,并在发布帖子后将控制权交还您的应用。

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

facebook 分享的更多相关文章

  1. 网页上facebook分享功能的具体实现

    1,一个链接: 参数是要分享的页面的链接 代码如下: <a style="width:35px; height:40px; position:relative; top:10px; l ...

  2. Android Facebook分享功能实现

    1.下载 Facebook SDK https://developers.facebook.com/docs/Android?locale=zh_CN 2.在facebook下设置app的相关信息 3 ...

  3. Android集成友盟facebook分享

    在项目中需要将图片和视频分享到社交平台,所以集成了友盟分享.在集成facebook分享的时候走了不少弯路,现在将过程记录下来. 1.先将友盟facebook的jar包复制到项目的libs文件夹下. 2 ...

  4. 接入Twitter和Facebook分享踩坑记录

    准备工作 1.首先需要在HTML的head添加下述meta标签内容,在分享时,Twitter和Facebook会爬取该网站页面的meta内容,然后生成分享卡片. 2.按照下述配置完成后,需要把内容发布 ...

  5. 使用ShareSDK完成Facebook第三方登录和Facebook分享时没办法跳转到Facebook应用

    楼主是通过cocoapod接入ShareSDK, 后来发现无论是使用fb分享还是登录, 都是跳出了网页认证(即使我的手机有安装了fb) 后来mob的技术客服小哥告诉我在构造分享参数的时候, 执行参数字 ...

  6. facebook分享

    http://bbs.mob.com/forum.php?mod=viewthread&tid=19104&page=1&extra=#pid40942  应用审核 http: ...

  7. 烦人的Facebook分享授权

    开发端授权app权限 facebook要求提交应用到他们平台, 并且还限制100mb, 坑爹死了, 果断使用google drive分享给他们, 最開始不确定分享给他们什么样的程序包, 结果审核没通过 ...

  8. Android 开发 facebook分享,登陆,获取信息

    1 搭建开发环境    1.1 在Facebook官网SDK中,下载4.0.0的SDK包.        1.2 使用Eclipse导入SDK包中的Facebook工程,并添加android-supp ...

  9. facebook分享遇到的错误解决方法

    *** Terminating app due to uncaught exception 'InvalidOperationException', reason: ''App ID not foun ...

随机推荐

  1. css划斜线

    http://stackoverflow.com/questions/18012420/draw-diagonal-lines-in-div-background-with-css

  2. codefoeces problem 671D——贪心+启发式合并+平衡树

    D. Roads in Yusland Mayor of Yusland just won the lottery and decided to spent money on something go ...

  3. swift xcode设置 ,代码折叠,全局折叠 快捷键

    在preference text editing 里面打开 function 折叠的项, 折叠方法快捷键: option+command +left/right 全局折叠快捷键: shift+opti ...

  4. linux下使用wget下载整个网站

    linux下可以用wget下载整个网站,而且网站链接中包含utf-8编码的中文也能正确处理. 简要方法记录如下: wget --restrict-file-name=ascii -m -c -nv - ...

  5. 从setting文件导包

    两种方式 from project.settings.py import s3_key 第二种: from django.conf import setting s3_key = settings.S ...

  6. Swift, Playgrounds, and XCPlayground

    http://www.codeschool.com/blog/2014/12/12/swift-playgrounds-xcplayground/ Swift, Playgrounds, and XC ...

  7. Linux 下编译安装OpenCV【转】

    转自:http://www.cnblogs.com/emouse/archive/2013/02/22/2922940.html OpenCV 2.2以后版本需要使用Cmake生成makefile文件 ...

  8. [MySQL] 一致性读分析

    MySQL MVCC MySQL InnoDB存储引起实现的是基于多版本的并发控制协议---MVCC(Multi-Version Concurrency Control),基于锁的并发控制,Lock- ...

  9. 【反演复习计划】【COGS2431】爱蜜莉雅的求助

    出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...

  10. Eclipse svn代码提交冲突

    Eclipse svn代码提交冲突(转) 1.Synchronize视图下查看代码冲突 1.Incoming Mode 全部update,更新到本地2.Outgoing Mode 全部commit,提 ...