Facebookログイン、Facebookシェア、Facebook Gamingを統合すると、特定のアプリイベントは、アプリイベントの自動記録を無効にしない限り、イベントマネージャのために自動的に記録、収集されます。Facebookログイン、Facebookシェア、Facebook Gamingを使うすべてのアプリ開発者には、この機能の仕組みについて理解しておくことをおすすめします。収集される情報やアプリイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。
FB iOS SDKの詳細については、こちらをご覧ください。
このガイドでは、Facebookへのシェア機能をあなたのiOSアプリに実装する方法について詳しく説明します。利用者がアプリからシェアを行うと、そのコンテンツは利用者のタイムラインとその友達のフィードに表示されます。
アプリにシェア機能を追加するには、事前に次のことを実行する必要があります。
.plist
ファイルに、アプリID、表示名、写真へのアクセス理由(人による判読が可能なもの)を追加します。FBSDKShareKit.framework
をプロジェクトにリンクします。シェアするコンテンツのアプリによる自動入力は行わないでください。これはFacebookプラットフォームポリシーに違反します(開発者ポリシーを参照)。
iOS SDKスタートガイド各タイプのコンテンツには、コンテンツを表すために使用できる、SharingContent
に準拠したインターフェイスがあります。コンテンツをモデル化したら、Sharing
に準拠しているアプリにシェアインターフェイスを追加するか、提供されているShareDialog
クラスを使用します。
利用者がアプリからFacebookにリンクをシェアするとき、シェアするリンクにcontentURL
が含まれます。ShareLinkContent
モデルを使用して、リンクのシェアコンテンツを作成します。
シェアをトリガーする方法の例を次に示します。
guard let url = URL(string: "https://developers.facebook.com") else { // handle and return } let content = ShareLinkContent() content.contentURL = url let dialog = ShareDialog( viewController: self, content: content, delegate: self ) dialog.show()
注: アプリでiTunesやGoogle Playストアへのリンクをシェアする場合は、シェアで指定した画像や説明は投稿されません。代わりに、Webクローラーでアプリストアから直接スクレイピングしたアプリ情報の一部が投稿されます。これには画像が含まれない場合があります。iTunesやGoogle Playへのリンクのシェアをプレビューするには、シェアデバッガーにリンクのURLを入力します。
利用者は、シェアダイアログやカスタムインターフェイスを使用すると、アプリからFacebookに写真をシェアできます。
SharePhotoContent
モデルを使用して、写真のシェアコンテンツを作成します。
func imagePickerController( _ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any] ) { guard let image = info[.originalImage] as? UIImage else { // handle and return return } let photo = SharePhoto( image: image, userGenerated: true ) var content = SharePhotoContent() content.photos = [photo] // use the content }
アプリの利用者は、シェアダイアログやカスタムインターフェイスを使用すると、Facebookに動画をシェアできます。
FBSDKShareVideoContent
モデルを使用して、動画のシェアコンテンツを作成します。すべての属性のリストを確認するには、FBSDKShareVideoContent
のリファレンスをご覧ください。
func imagePickerController( _ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any] ) { let video: ShareVideo if #available(iOS 11, *) { guard let videoAsset = info[.phAsset] as? PHAsset else { return } video = ShareVideo(videoAsset: videoAsset) } else { guard let url = info[.referenceURL] as? URL else { return } video = ShareVideo(videoURL: url) } }
アプリの利用者は、シェアダイアログを使用することによって、写真と動画を組み合わせてFacebookにシェアできます。次の点に注意してください。
マルチメディアのシェアコンテンツは、ShareMediaContent
モデルを使用して作成します。
let photo = SharePhoto(...) let video = ShareVideo(...) var content = ShareMediaContent() content.media = [photo, video]
モデル化してコンテンツの取り扱いが終わったら、シェアダイアログまたはメッセージダイアログをトリガーできます。
Facebookでは、iOSでもシェアをトリガーするためのネイティブボタンを利用できます。
シェアボタンを使用すると、利用者は自分や友達のFacebookタイムラインに向けて、またはグループ内でコンテンツをシェアできます。シェアボタンをクリックすると、シェアダイアログが呼び出されます。ビューにシェアボタンを追加するには、以下のコードスニペットをビューに加えてください。
var button = FBShareButton() button.shareContent = content // Add button to view
送信ボタンを使用すると、Facebook Messengerアプリを通じて友達や連絡先に写真、動画、リンクを非公開で送信できます。送信ボタンをクリックすると、メッセージダイアログが呼び出されます。ビューに送信ボタンを追加するには、以下のコードスニペットをビューに加えてください。
var button = SendButton() button.shareContent = content // Add button to view
Messengerアプリがインストールされていない場合は、送信ボタンの表示が暗くなります。現在のデバイスで送信ボタンを使用できるかどうかを確認するには、SendButton
のプロパティisImplicitlyDisabled
を使用します。
Facebookが構築したシェア機能を使用するには、上記のコンテンツのモデル化セクションに示すようにコンテンツを定義して、シェアダイアログを呼び出します。以下は、シェアダイアログでリンクをシェアする方法の例です。
guard let url = URL(string: "https://developers.facebook.com") else { // handle and return } let content = ShareLinkContent() content.contentURL = url let dialog = ShareDialog( viewController: self, content: content, delegate: self ) dialog.show()
旧バージョンのiOS用SDKの場合、アプリからシェアダイアログを開く前にネイティブのFacebookアプリがインストールされていることを確認する必要がありました。このアプリがインストールされていない場合、代替ダイアログを呼び出す独自のコードを作成しなければなりませんでした。
現在のSDKでは、自動的にネイティブのFacebookアプリを確認します。このアプリがインストールされていない場合はデフォルトのブラウザーに切り替わり、フィードダイアログが表示されるようになっています。
ネイティブのFacebookアプリがインストールされている場合、ネイティブのiOS用Facebookアプリに切り替わるのではなく、iOSシェアシートが表示されます。
メッセージダイアログを使用すると、ネイティブのiOS用Messengerアプリに切り替わりますが、投稿が公開された後はアプリにコントロールが戻ります。
MessageDialog(content: content, delegate: delegate).show()
注: 現在、iPadではメッセージダイアログがサポートされていません。
iOSにはネイティブのシェアシートがあります。これにより利用者は、Facebookに近況アップデート、写真、動画、リンクを投稿したり、投稿の共有範囲を設定したり、投稿に位置情報をタグ付けしたりできます。Facebook SDKは、このネイティブコントローラーの使用をサポートしています。この機能はほとんどの場合、Facebookシェアダイアログを呼び出すときに利用されています。
iOSシェアシートは、開発者ポリシーに従って利用する必要があります。これには、アプリがシェアシートのコンテキストを自動入力することを禁止している第2条の第3項が含まれます。つまり、アプリの利用者が入力していないコンテンツが、アプリによってシェアシートのinitialTextフィールドに自動入力されることはありません。
このAPIはまた、Facebook SDKのほかの部分と同じスタイルブロックを使用します。ネイティブiOSシェアダイアログを表示するには、次のようにします。
let dialog = ShareDialog( viewController: self, content: content, delegate: nil ) dialog.mode = .shareSheet dialog.show()
シェアシートを表示するには、viewController
引数が必要です。
シェアした写真、リンク、動画とともに表示するハッシュタグを1つ指定できます。このハッシュタグはシェアダイアログにも表示されますが、利用者は投稿前に削除することもできます。
ハッシュタグをリンクシェアに追加する例を次に示します。
let content = ShareLinkContent() guard let url = URL(string: "https://developers.facebook.com") else { return } content.contentURL = url content.hashtag = Hashtag("#MadeWithHackbook")
App Linksを使用すると、アプリを通じて公開したFacebook投稿からアプリにリンクバックできます。
利用者がアプリから公開されたFacebook投稿をクリックするとアプリが開きます。アプリ内の特定のコンテンツにリンクさせることも可能です。
アプリケーション内でシェア機能をテストするためにシミュレーターを使用する場合、動画や写真のシェアを試みるとエラーが表示されます。これは、シェアダイアログを提供するiOS用Facebookがインストールされている必要があるためです。こうしたシェアシナリオでのシミュレーターによるテストはサポートされていません。
リンクシェアの場合、iOS用Facebookのインストールは必要ないため、テストできます。ほかのシェアシナリオをテストするには、iOS用Facebookがインストールされている実際のテストデバイスを設定してください。