在 Android 平台分享
本指南詳細介紹如何通過 Android 應用將內容分享到 Facebook。用戶通過您的應用分享時,相關內容會在其時間線上顯示,並且可能在其好友的動態消息中顯示。

用戶還可通過您的應用將內容分享到 Facebook Messenger。
前提條件
您將需要執行以下操作,才能通過應用將內容分享到 Facebook:
-
將 Android 版 Facebook SDK 添加到您的移動開發環境中
-
獲取正確配置並鏈接到 Android 應用的 Facebook 應用編號。請參閱 Android 新手入門,添加 Facebook 應用編號
-
生成 Android 密鑰哈希並添加到開發者資料頁
-
添加
Facebook Activity
:將其納入AndroidManifest.xml
中
如需詳細了解這些要求,請參閱 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 帖子時,會打開您的應用,甚至可以鏈接到應用內的特定內容。
自定義界面
如果想要使用專屬分享界面,您需要:
-
構建發布到圖譜 API 端點
/me/feed
的自定義界面 -
在您的應用中實施 Facebook 登錄
-
在用戶登錄您的應用時請求
publish_actions
權限
以下是通過專屬界面將鏈接發布到 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();