在 Android 分享

本指南詳細說明如何從您的 Android 應用程式分享至 Facebook。當用戶從您的應用程式進行分享時,其內容可能顯示在用戶的「生活時報」上,也可能顯示在用戶朋友的「動態消息」上。

用戶也可以從您的應用程式將內容分享至 Facebook Messenger。

必要條件

從您的應用程式分享內容至 Facebook 之前,請先連結或下載 Android 專用 Facebook 分享 SDK。

Android 專用分享 SDK 是 Android 專用 Facebook SDK 的一個元件。若要在專案中使用 Facebook 分享 SDK,請在 Maven 中將 SDK 設為相依項目,或下載 SDK。透過下方按鈕選擇您要的方法。

透過 Maven 連結 SDK

  1. 在您的專案中,開啟 your_app | Gradle Scripts | build.gradle (Project),並將下列資料庫內容加進 buildscript { repositories {}} 區塊,以便從 Maven Central Repository 下載 SDK:
    mavenCentral() 
  2. 在您的專案中,開啟 your_app | Gradle Scripts | build.gradle (Module: app),並將下列編譯陳述式加進 dependencies{} 區塊,以便編譯最新版本的 SDK:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. 建置您的專案。

下載 SDK

若要下載 SDK,請點擊下方按鈕。

下載 SDK

使用 Facebook 分享 SDK 時,系統會為 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 會與連結一併分享。請將連結的分享內容建立到 ShareLinkContent 模型中。如需所有屬性的清單,請參閱 ShareLinkContent 參考資料

從 2017 年 4 年 18 日開始,Graph API 2.9 版及更新的版本將不再支援下列參數。2.8 版及更舊的版本將持續支援這些參數至 2017 年 7 年 17 日止。

  • contentTitle:代表連結中的內容標題
  • imageURL:將顯示在帖子上的縮圖圖像網址
  • contentDescription:內容的說明,通常為 2 至 4 個句子

以下是如何觸發分享的範例:

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

若要預覽 Google Play 或 App Store 的連結分享,請在分享錯誤檢查工具中輸入您的網址。

如果您的應用程式分享內含任何 Google Play 或 App Store 上架應用程式的連結,包含在分享的說明和圖像將被略過。反之,我們會直接前往商店抓取應用程式的名稱和圖像(如果沒有圖像,則分享將不包含任何圖像)。

相片

用戶可使用「分享」對話框或自訂介面,從您的應用程式將相片分享至 Facebook。

  • 相片大小不得超過 12MB
  • 用戶需要安裝原生 Android 版 Facebook 應用程式 7.0 版或更高版本

請將相片的分享內容建立到 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。注意下列事項:

  • 用戶需要安裝原生 Android 版 Facebook 應用程式 71 版或更高版本。
  • 相片大小不得超過 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 分享介面或者自行建立調用 Graph API 的 Facebook 分享介面。

按鈕

Facebook 在 Android 提供可觸發分享的原生按鈕。


隨著 Android 版 Facebook SDK 4.28.0 版推出,Android 版「讚好」按鈕也將停用,生效日期為 2018 年 2 月 5 日。

「讚好」按鈕

使用「讚好」按鈕是用戶和朋友分享內容的快速方法。點一下「讚好」按鈕即可從您的應用程式對某些內容片段「讚好」,並將內容分享至 Facebook。「讚好」按鈕的用法和 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 SDK 4.28.0 版推出,「傳送」按鈕也將停用,生效日期為 2018 年 2 月 5 日。

「傳送」按鈕

「傳送」按鈕可讓用戶使用 Facebook Messenger 以私密方式將相片、影片和連結傳送給朋友和聯絡人。「傳送」按鈕將會調用「訊息」對話框。若要將「傳送」按鈕新增至您的檢視,請在您的檢視中新增下列程式碼片段:

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

「分享」對話框

「分享」對話框會切換至原生 Android 版 Facebook 應用程式,然後在發佈帖子之後將控制權返回至您的應用程式。視您所使用的 SDK 而定,用戶可能需要點按向後箭頭圖示才能回到應用程式。如果未安裝 Facebook 應用程式,分享對話框將會自動退回至 Web 式對話框。

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

最後在 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 應用程式,然後在發佈帖子之後將控制權返回至您的應用程式。視您所使用的 SDK 而定,用戶可能需要點按向後箭頭圖示才能回到應用程式。

MessageDialog.show(activityOrFragment, content);

其他功能

相較於 API,使用 Facebook 分享對話框時,您會擁有更多的選項。

主題標籤

您可以指定單一主題標籤顯示分享相片、連結或影片。主題標籤也會顯示在分享對話框中,用戶也可以選擇在發佈之前將其移除。

以下是新增主題標籤至連結分享的範例。

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 應用程式,然後才能開啟「分享」對話框。如果用戶尚未安裝該應用程式,您需要自行提供程式碼以調用後援對話框。

現在,SDK 會自動檢查原生 Facebook 應用程式。如果未安裝,SDK 會將用戶切換至其預設瀏覽器並開啟動態對話框。如果用戶要分享「開放式圖表」動態,SDK 會開啟網頁分享對話框

您可以藉由應用程式連結從您應用程式發佈的 Facebook 帖子連結回您的應用程式。當用戶點擊從您的應用程式發佈的 Facebook 帖子時,應用程式會開啟,您甚至可以連結至應用程式內的特定內容。

自訂介面

如果您要使用自己的介面來進行分享,您需要:

以下是從您自己的介面張貼連結至 Facebook 的程式碼:

ShareApi.share(content, null);

分享開放式圖表動態

開放式圖表動態可讓用戶透過開放式圖表動作和物件定義的強型別 API 來分享豐富的結構化內容。這些帖子可連結回您的應用程式或應用程式的「應用程式商店」網頁。

若要深入瞭解如何設定「開放式圖表」動態,請參閱 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();