iOSでのシェア

このガイドでは、Facebookへのシェア機能をiOSアプリに実装する方法について詳しく説明します。利用者がアプリからシェアを行うと、そのコンテンツは利用者のタイムラインとその友達のニュースフィードに表示されます。

また、Messenger ExpressionプラットフォームやiOS SDKのシェア機能メッセージダイアログを使用して、アプリからFacebook Messengerにコンテンツをシェアすることもできます。

iOS用Messenger SDKメッセージダイアログ

前提条件

アプリにシェア機能を追加するには、事前に次を実行する必要があります。

  • モバイル開発環境にiOS用Facebook SDKを追加します。
  • FacebookアプリIDを設定し、リンクします。
  • アプリの.plistファイルに、アプリID、表示名、写真へのアクセスの理由(人による判読が可能なもの)を追加します。
  • FBSDKShareKit.frameworkをプロジェクトにリンクします。

シェアするコンテンツをアプリが自動入力しないようにしてください。シェアコンテンツの自動入力はFacebookプラットフォームポリシーに違反します(「Facebookプラットフォームポリシー」の2.3をご覧ください)。

iOS SDKスタートガイド

コンテンツのモデル化

Facebook SDKのバージョン4.0以降には、コンテンツのシェアのための新しいモデルが用意されています。コンテンツの各タイプはコンテンツを表すために使用できる、<FBSDKSharingContent>に準拠したインターフェイスを有しています。コンテンツをモデル化したら、<FBSDKSharing>に準拠した、FBSDKShareDialogのようなシェアインターフェイスをアプリに追加します。

利用者がアプリからFacebookにリンクをシェアするとき、シェアするリンクにcontentURLが含まれます。FBSDKShareLinkContentモデルを使用して、リンクのシェアコンテンツを構築します。すべての属性のリストを確認するには、「FBSDKShareLinkContent reference (ShareLinkContentリファレンス)」をご覧ください。

2017年4月18以降、次のパラメータはGraph APIバージョン2.9以降でサポート対象外になりました。バージョン2.8以前については、これらのパラメータは2017年7月17日まで利用できます。

  • contentTitle - リンク内のコンテンツのタイトル
  • imageURL - 投稿に表示されるサムネイル画像のURL
  • contentDescription - コンテンツの説明(一般的に2~4文)

シェアのトリガー方法の例を次に示します。

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

注: アプリでiTunesやGoogle Playストアへのリンクをシェアする場合は、シェアで指定した画像や説明は投稿されません。代わりに、Webクローラーで直接アプリストアからスクレイピングしたアプリ情報の一部が投稿されます。これには画像が含まれない場合があります。iTunesやGoogle Playへのリンクのシェアをプレビューするには、シェアデバッガーにリンクのURLを入力します。

写真

利用者は、シェアダイアログやカスタムインターフェイスを使用すると、アプリからFacebookに写真をシェアできます。

  • 写真のサイズは12MB未満である必要があります。
  • また、利用者のデバイスにはネイティブのiOS用Facebook (バージョン7.0以上)がインストールされている必要があります。

FBSDKSharePhotoContentモデルを使用して、写真のシェアコンテンツを構築します。すべての属性のリストを確認するには、「FBSDKSharePhotoContent reference (ShareLinkContentリファレンス)」をご覧ください。

- (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 reference (ShareLinkContentリファレンス)」をご覧ください。

- (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;
  ...
}

動画URLvideoURLは、アセットURLである必要があります。動画アセットURLはUIImagePickerControllerなどから取得できます。

マルチメディア

アプリの利用者は、シェアダイアログを使用することによって、写真と動画を組み合わせてFacebookにシェアできます。注意:

  • iOSバージョン7.0以降が必要です。
  • また、シェアを行う利用者のデバイスにはiOS用Facebookクライアント(バージョン52.0以降)がインストールされていなければなりません。
  • それぞれの写真と動画のサイズは12MB未満である必要があります。
  • 利用者は、最大で1件の動画と29~30枚の写真をシェアできます。

マルチメディアシェアコンテンツは、FBSDKShareMediaContentモデルを使用して構築します。すべての属性のリストを確認するには、「FBSDKShareMediaContent reference (ShareLinkContentリファレンス)」をご覧ください。

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

シェア方法

モデルの構築によるコンテンツの処理が終わったら、シェアダイアログ、メッセージダイアログ、独自のカスタムシェアインターフェイスのいずれかをトリガーできます。

ボタン

Facebookでは、iOSでもシェアをトリガーするためのネイティブボタンを利用できます。


いいね!ボタン

「いいね!」ボタンを使うと、友達にコンテンツをすばやくシェアできます。「いいね!」ボタンをクリックすると、アプリ上のコンテンツが「いいね!」され、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アプリを確認します。インストールされていない場合はデフォルトのブラウザに切り換え、Feed Dialogが表示されるようになっています。Open Graph storyをシェアする場合はウェブシェアダイアログが表示されます。

ネイティブのFacebookがインストールされていて、SDKのバージョンが4.0から4.4の場合、シェアダイアログを使用するとネイティブのiOS用Facebookに切り替わりますが、投稿が公開されるとアプリにコントロールが戻ります。SDKのバージョンが4.5以上である場合、Open Graph storyのシェアでない限り、ネイティブのiOS用Facebookに切り替わらずにiOSシェアシートが表示されます。

メッセージダイアログ

メッセージダイアログを使用すると、ネイティブのiOS用Messengerに切り替わりますが、投稿が公開されるとアプリにコントロールが戻ります。

[FBSDKMessageDialog showWithContent:content delegate:nil];

注: 現在、iPadではメッセージダイアログがサポートされていません。

iOSとの統合

iOS 6以降には、利用者がFacebookに近況、写真、動画、リンクを投稿したり、投稿の対象者を設定したり、投稿に場所をタグ付けしたりできるようにする、ネイティブのシェアシートが搭載されています。シェアシートでOpen Graph storyをシェアすることはできません。Facebook SDKは、バージョン4.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」が必要です。

追加の機能

Facebookシェアダイアログでは、APIでシェアする場合には使用できないその他のオプションを使用できます。

ハッシュタグ

シェアした写真、リンク、動画とともに表示するハッシュタグを1つ指定できます。このハッシュタグはシェアダイアログにも表示されますが、利用者は投稿前に削除することもできます。

以下は、ハッシュタグをリンクシェアに追加する例です。

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.";

詳細情報が記載されたトピック

App Linksを使用すると、アプリを通じて公開したFacebook投稿からアプリにリンクバックできます。

利用者がアプリから公開されたFacebook投稿をクリックするとアプリが開きます。アプリ内の特定のコンテンツにリンクさせることも可能です。

カスタムインターフェイス

シェアに独自のインターフェイスを使用するには、以下を実行する必要があります。

Facebookにリンクを投稿するためのGraph APIは次のとおりです。

[FBSDKShareAPI shareWithContent:content delegate:nil];

Open Graph storyのシェア

Open Graph storyは、Open GraphアクションやOpen Graphオブジェクトによって厳密に事前定義されたAPIを通じて、機能豊富で構造化されたコンテンツをシェアできるようにします。

シェアされた記事は、アプリやアプリの「アプリストア」ページにリンクバックされています。

カスタム記事をアプリへ追加する方法について詳しくは、「iOSのOpen Graph story」をご覧ください。

Open GraphアクションのシェアコンテンツをFBSDKShareOpenGraphContentモデルで構築します。すべての属性のリストを確認するには、「FBSDKShareOpenGraphContent reference (ShareLinkContentリファレンス)」をご覧ください。

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シミュレータとテスト

アプリケーション内でシェア機能をテストするためにシミュレータを使用する場合、動画、写真、またはOpen Graph actionのシェアを試みるとエラーが表示されます。これは、シェアダイアログを提供するiOS用Facebookをインストールする必要があるためです。こうしたシェアシナリオでのシミュレータによるテストはサポートされていません。

リンクシェアの場合、iOS用Facebookのインストールは必要ないため、テストできます。他のシェアシナリオをテストするには、iOS用Facebookをインストールして実際のテストデバイスを設定してください。