在 iOS 分享

本指南詳細說明如何從您的 iOS 應用程式分享內容至 Facebook。當用戶從您的應用程式進行分享時,其內容會顯示在用戶的「動態時報」以及用戶朋友的「動態消息」中。

用戶也可以使用 Messenger Expression Platform 從您的應用程式將內容分享至 Facebook Messenger,或者從 iOS SDK 中的分享的「訊息」對話方塊分享。

Messenger iOS SDK「訊息」對話方塊

必要條件

您需要先進行下列操作,才能夠新增分享至您的應用程式:

  • Facebook iOS SDK 新增至您的行動開發環境
  • 設定並連結您的 Facebook 應用程式編號
  • 將應用程式編號、顯示名稱和人類看得懂的相片存取原因新增至應用程式的 .plist 檔案。
  • FBSDKShareKit.framework 連結至您的專案。

您的應用程式不應該預先填入任何要分享的內容。這和 Facebook 開放平台政策不一致,請參閱 Facebook 開放平台政策第 2.3 節

iOS SDK 新手指南

建立內容模型

Facebook SDK 4.0+ 版包含用於分享內容的新模型。每一個內容類型都有一個介面,您可以用來代表其符合 <FBSDKSharingContent>。建立內容的模型之後,請對您符合 <FBSDKSharing> 的應用程式新增分享介面,例如 FBSDKShareDialog

當用戶從您的應用程式分享連結至 Facebook 時,其中會包含與連結一同分享的 contentURL。請使用 FBSDKShareLinkContent 模型建立連結的分享內容。如需所有屬性的清單,請參閱 FBSDKShareLinkContent 參考資料

自 2017 年 4 月 18 日起,圖形 API 2.9 版及更新版本已不再支援下列參數。而針對 2.8 版及更舊版本,參數仍可使用至 2017 年 7 月 17 日為止。

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

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

注意: 如果您的應用程式分享連結至 iTunes 或 Google Play 商店,我們不會張貼您在分享中指定的任何圖像或說明,而是會張貼使用 Webcrawler 直接從應用程式商店抓取的部分應用程式資訊。此資訊可能不含圖像。若要預覽 iTunes 或 Google Play 的連結分享,請在分享偵錯工具中輸入您的網址。

相片

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

  • 相片大小不得超過 12MB
  • 用戶需要安裝 iOS 專用 Facebook 應用程式 7.0 版或更新版本

請使用 FBSDKSharePhotoContent 模型建立相片的分享內容。如需所有屬性的清單,請參閱 FBSDKSharePhotoContent 參考資料

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  UIImage *image = info[UIImagePickerControllerOriginalImage];

  FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
  photo.image = image;
  photo.userGenerated = YES;
  FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
  content.photos = @[photo];
  ...
}

影片

您應用程式的用戶可以使用「分享」對話方塊或您的自訂介面,將影片分享至 Facebook:

  • 影片大小不得超過 12MB。
  • 進行分享的用戶應該安裝 iOS 版 Facebook 用戶端版本 26.0 或更新版本。

請使用 FBSDKShareVideoContent 模型建立您的影片分享內容。如需所有屬性的清單,請參閱 FBSDKShareVideoContent 參考資料

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  NSURL *videoURL = [info objectForKey:UIImagePickerControllerReferenceURL];

  FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
  video.videoURL = videoURL;
  FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
  content.video = video;
  ...
}

影片網址 videoURL 必須是資產網址。您可以從 UIImagePickerController 等取得影片資產網址。

多媒體

您的應用程式用戶可以使用「分享對話方塊」,將相片和影片組合分享到 Facebook。注意事項:

  • 用戶必須使用 iOS 7.0 版本或更新版本。
  • 進行分享的用戶應該安裝 iOS 版 Facebook 用戶端 52.0 版本或更新版本。
  • 相片和影片大小不得超過 12MB。
  • 用戶可分享最多 1 段影片,以及多達 29 或 30 張的相片。

使用 FBSDKShareMediaContent 模型建立多媒體分享內容。如需所有屬性的清單,請參閱 FBSDKShareMediaContent 參考資料

FBSDKSharePhoto *photo = [FBSDKSharePhoto photoWith...
FBSDKShareVideo *video = [FBSDKShareVideo videoWith...
FBSDKShareMediaContent *content = [FBSDKShareMediaContent new];
content.media = @[photo, video];
}

分享方式

透過建立模型完成處理內容之後,您可以觸發「分享」對話方塊、「訊息」對話方塊,或是您自己的自訂介面來分享內容。

按鈕

在 iOS 上,Facebook 具有可觸發分享的原生按鈕。


「讚」按鈕

使用「讚」按鈕是用戶和朋友分享內容的快速方法。點按「讚」按鈕即會從您的應用程式對某些內容片段「按讚」,並將內容分享至 Facebook。若要將「讚」按鈕新增至您的檢視,請在您的檢視中新增下列程式碼片段:

FBSDKLikeControl *button = [[FBSDKLikeControl alloc] init];
button.objectID = @"https://www.facebook.com/FacebookDevelopers";
[self.view addSubview:button];

分享按鈕

藉由「分享」按鈕,您可以允許用戶將內容分享至自己的 Facebook 動態時報或者朋友的動態時報,或者在社團中分享。「分享」按鈕將會呼叫「分享」對話方塊。若要將「分享」按鈕新增至您的檢視,請在您的檢視中新增下列程式碼片段:

FBSDKShareButton *button = [[FBSDKShareButton alloc] init];
button.shareContent = content;  
[self.view addSubview:button];

「發送」按鈕

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

FBSDKSendButton *button = [[FBSDKSendButton alloc] init];
button.shareContent = content; 
[self.view addSubview:button];

如果未安裝 Messenger 應用程式,將不會顯示「發送」按鈕。請確定此按鈕處於隱藏狀態時,您的應用程式版面仍能正常顯示。若要檢查「發送」按鈕是否可以顯示在目前的裝置上,請使用 FBSDKSendButton 屬性 isHidden

if (button.isHidden) {
  NSLog(@"Is hidden");
} else {
  [self.view addSubview:button];
}

「分享」對話方塊

若要使用 Facebook 建立的分享體驗,您要依前述建立內容模型區段定義您的內容,然後呼叫「分享」對話方塊。例如,若要使用「分享」對話方塊來分享連結:

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"http://developers.facebook.com"];
[FBSDKShareDialog showFromViewController:self
                              withContent:content
                                 delegate:nil];

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

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

如果已經安裝原生 Facebook 應用程式,SDK V4.0-V4.4 將切換至原生 iOS 版 Facebook 應用程式,然後在發佈貼文之後將控制權返回至您的應用程式。如果您使用 SDK V4.5+,用戶將會看到 iOS 分享表單;除非分享是一個開放社交關係圖動態,否則不會將用戶切換至原生 iOS 專用 Facebook 應用程式。

「訊息」對話方塊

「訊息」對話方塊會切換至原生 iOS 版 Messenger 應用程式,然後在發佈貼文之後將控制權返回至您的應用程式。

[FBSDKMessageDialog showWithContent:content delegate:nil];

注意: 目前,iPad 並不支援「訊息」對話方塊。

iOS 整合

iOS 6+ 包含原生分享表單,可讓用戶將近況更新、相片、影片和連結張貼至 Facebook,並支援設定貼文的分享對象和使用地點來標註貼文。您無法使用分享表單分享開放社交關係圖動態。Facebook SDK 支援使用此原生控制器;從 Facebook SDK V4.5 開始,這是當您呼叫 Facebook「分享」對話方塊時,用戶在大多數情況下將會看到的體驗。

使用 iOS 分享表單必須遵循 Facebook 開放平台政策,其中包括 2.3 節不可預先填入分享表單內容的規定。這表示應用程式不可在分享表單的 initialText 欄位中預先填入非應用程式用戶先前輸入的內容。

此 API 還使用相同樣式的區塊作為 Facebook SDK 的其他部分。若要顯示原生 iOS 分享對話方塊,請使用:

// Example content. Replace with content from your app.
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.content = content;
dialog.mode = FBSDKShareDialogModeShareSheet;
[dialog show];

請注意,必須要有 .fromViewController,才能顯示分享表單。

其他功能

相較於使用 API 分享,使用 Facebook 分享對話方塊讓您有更多選項。

主題標籤

您可以指定單一主題標籤與分享的相片、連結或影片一同顯示。此主題標籤也會顯示在「分享」對話方塊中,且用戶可以在發佈前將其移除。

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];
content.hashtag = [FBSDKHashtag hashtagWithString:@"#MadeWithHackbook"];

分享引文

用戶可以強調內文,將內文以引文方式呈現並附上分享連結;或者,您可以預先定義引文(例如文章的摘要式引文)與分享連結一同顯示。不管您使用何種方式,此引文都會顯示在不同於用戶留言的獨立欄位中。

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [@"https://developers.facebook.com/products/sharing"];
content.quote = @"Learn quick and simple ways for people to share content from your app or website to Facebook.";

進階主題

您可以藉由應用程式連結,從您應用程式發佈的 Facebook 貼文連結回您的應用程式。

當用戶點擊從您的應用程式發佈的 Facebook 貼文時,應用程式便會開啟,您甚至可以連結至應用程式內的特定內容。

自訂介面

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

以下是可將連結張貼至 Facebook 的 圖形 API 呼叫:

[FBSDKShareAPI shareWithContent:content delegate:nil];

分享開放社交關係圖動態

開放社交關係圖動態可讓用戶透過開放社交關係圖動作和物件定義的強型別 API 來分享豐富的結構化內容。

分享的動態會連結回您的應用程式或應用程式的「應用程式商店」網頁。

若要深入瞭解如何新增自訂動態至您的應用程式,請參閱 iOS 中的開放社交關係圖動態

使用 FBSDKShareOpenGraphContent 模型建立開放社交關係圖動作的分享內容。如需所有屬性的清單,請參閱 FBSDKShareOpenGraphContent 參考資料

NSDictionary *properties = @{
  @"og:type": @"fitness.course",
  @"og:title": @"Sample Course",
  @"og:description": @"This is a sample course.",
  @"fitness:duration:value": @100,
  @"fitness:duration:units": @"s",
  @"fitness:distance:value": @12,
  @"fitness:distance:units": @"km",
  @"fitness:speed:value": @5,
  @"fitness:speed:units": @"m/s",
};
FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:properties];
FBSDKShareOpenGraphAction *action = [[FBSDKShareOpenGraphAction alloc] init];
action.actionType = @"fitness.runs";
[action setObject:object forKey:@"fitness:course"];
FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
content.action = action;
content.previewPropertyName = @"fitness:course";

iOS 模擬器與測試

如果您使用模擬器測試您的應用程式分享功能並嘗試分享影片、相片或開放社交關係圖動作,您將會看到錯誤。這是因為您需要安裝 iOS 版 Facebook,以便提供「分享」對話方塊。我們不對模擬器提供與此相關的支援。

對於連結分享的情況,您不需要安裝 iOS 版 Facebook,因此能夠進行此測試案例。若要測試其他分享案例,請設定已安裝 iOS 版 Facebook 的實際測試裝置。