iOSでのシェア

Facebookログイン、Facebookシェア、Facebook Gamingを統合すると、特定のアプリイベントは、アプリイベントの自動記録を無効にしない限り、イベントマネージャのために自動的に記録、収集されます。Facebookログイン、Facebookシェア、Facebook Gamingを使うすべてのアプリ開発者には、この機能の仕組みについて理解しておくことをおすすめします。収集される情報やアプリイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。

FB iOS SDKの詳細については、こちらをご覧ください。

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

前提条件

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

  • モバイル開発環境にiOS用Facebook SDKを追加します。
  • FacebookアプリIDを設定し、リンクします。
  • アプリの.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に写真をシェアできます。

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

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に動画をシェアできます。

  • 動画のサイズは50MB未満である必要があります。
  • また、シェアを行う利用者のデバイスにはiOS用Facebookクライアント(バージョン26.0以上)がインストールされている必要があります。

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にシェアできます。次の点に注意してください。

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

マルチメディアのシェアコンテンツは、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との統合

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

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

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