在 Android 分享

在您整合 Facebook 登入、Facebook 分享或 Facebook Gaming 產品後,除非您停用事件自動記錄功能,否則系統會為事件管理工具自動記錄並蒐集特定應用程式事件。我們建議所有使用 Facebook 登入、Facebook 分享或 Facebook Gaming 產品的應用程式開發人員了解此功能的運作方式。若要進一步了解系統會蒐集哪些資料,以及如何停用事件自動記錄功能,請參閱應用程式事件自動記錄一文。

本指南說明如何允許您的 Android 應用程式用戶從應用程式分享內容至 Facebook。當用戶從您的應用程式分享內容時,分享內容會顯示在其生活時報中。用戶分享至其生活時報的內容亦可能會在其朋友的動態消息中顯示。用戶也可以從您的應用程式分享內容至 Facebook Messenger。

當您執行分享操作時,您的應用程式不應預先填入任何要分享的內容。預先填入內容是不符合《開發人員政策》的行為。

下列左方的範例相片展示了應用程式中的分享對話框,右方相片則是在 Facebook 應用程式中所產生的帖子。

分享的新手指南

Android 分享 SDK 是 Facebook Android SDK 的一個元件。

若要在專案中使用 Facebook 分享 SDK,請在 Maven 中將 SDK 設為相依項目。

  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. 在您的 AndroidManifest.xml 檔案中加入 ContentProvider,然後在您的應用程式編號中設定 {APP_ID}

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. 如果您的應用程式指定 Android 11 或以上版本為目標,請在 AndroidManifest.xml 檔案中加入下列 queries 區塊,以使您的應用程式可以看到 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。如要分享內容,用戶需要安裝原生 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。

將您的影片分享內容整合至 ShareVideoContent 模型中。如需所有屬性的清單,請參閱 ShareVideoContent 參考資料

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

多媒體

用戶可以使用「分享」對話框,從您的應用程式分享相片及影片的組合至 Facebook。注意下列事項:

  • 用戶需要安裝原生 Android 版 Facebook 應用程式 71 版或更高版本。
  • 用戶一次最多可分享 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,請使用 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);
}

如果您正在使用 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();

進階主題

內建分享後援

在舊版 Facebook Android SDK 中,您的應用程式需要先檢查是否已安裝原生 Facebook 應用程式,然後才能開啟「分享」對話框。如果用戶尚未安裝此應用程式,您需要自行提供程式碼以呼叫遞補對話框。

現在,SDK 會自動檢查原生 Facebook 應用程式。如果未有安裝此應用程式,SDK 會將用戶切換至其預設瀏覽器,並開啟動態對話框

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